KNN

KNN模型
(一)KNN算法

1.工作原理

  1. 假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系。
  2. 输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较。
    1. 计算新数据与样本数据集中每条数据的距离。
    2. 对求得的所有距离进行排序(从小到大,越小表示越相似)。
    3. 取前 k (k 一般小于等于 20 )个样本数据对应的分类标签。
  3. 求 k 个数据中出现次数最多的分类标签作为新数据的分类。

给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,这 k 个实例的多数属于某个类,就把该输入实例分为这个类。

2.KNN三大基本要素

(1)距离度量:特征空间中2个实例点的距离是2个实例点相似程度的反映


(2)K值的选择:K值较小使模型复杂化容易过拟合,K值较大使模型简单化容易欠拟合

(3)分类决策规则:一般是多数表决

(二)KD树

1.实现KNN算法的核心在于如何快速进行K近邻搜索,尤其是在特征维数较大或者数据样本量大的情况下,常用的有效方法就是用KD树存储数据样本,然后搜索KD树;(KNN的K与KD树的K意义不同,前者是指K个邻近样本点,后者是指K维数据,两者并无联系)

2.KD树是一种二叉树,用于存储K维空间实例点以便快速搜索的一种树形数据结构;KD树表示对K维空间的一个划分,构造KD树相当于不断地用垂直于坐标轴的超平面将K维空间切分,构成一系列的K维超矩形区域;

3.构造KD树流程:

(1)现在有K维空间数据集,其中

(2)初始化根结点:以数据集T中所有实例点的坐标的中位数为切分点,将所有实例点分成3部分,坐标为中位数的落在根结点中,小于中位数的落在深度为1的左结点中,大于的落在深度为1的右结点中;

(3)重复:对于深度为 j 的结点,选择结点中所有实例点的坐标的中位数为切分点,将所有实例点分为3部分,坐标为中位数的落在 j 结点中,小于中位数的落在深度为 j+1 的左结点中,大于的落在深度为 j+1 的右结点中;其中;

(4)直到深度为 j 的结点的左右结点中没有实例点存在时,则结束KD树的划分;

PS:最终整棵KD树的每一个结点都存放着一个K维数据样本点;

4.搜索KD树流程:

(1)在KD树中找出包含目标点 x 的叶结点:从根结点出发,递归地向下访问KD树,若目标点x当前维的坐标小于或等于切分点的坐标,则移动到左结点,否则移动到右结点,直到子结点为叶结点为止;

(2)以此叶结点为“当前最近点“;

(3)递归地往上回退,在每个结点进行以下操作:如果该结点保存的样本点比“当前最近点”距离目标点更近,则更新“当前最近点”;接着检查该结点的另一子结点对应的区域是否有更近的点,也就是检查另一子结点对应的区域是否与以目标点为球心,以目标点与”当前最近点“间的距离为半径的超球体相交(也就是结点的超平面与超球体是否相交);如果相交,说明在另一个子结点对应的区域内有可能存在距目标点更近的点,则进入另一子结点区域进行搜索;

(4)当回退到根结点搜索结束后,“当前最近点”就是x的最邻近点;

5.例子:


其中A是根结点,B,C是子结点,D,F是B的叶结点,G,E是C的叶结点,S是目标实例;首先找到包含S的叶结点D,因此D为当前最近点;接着回退搜索结点B,当前最近点不用更新;超球体与B结点平面不相交,所以回退到A结点,当前最近点不用更新;超球体与结点A的超平面相交,所以进入A的另一边区域进行搜索,A的另一子结点 C中存在E比D更近,因此更新,最近点就是E;

6.KD树更适用于训练样本数远大于空间维数时的K近邻搜索;

(三)KNN模型的优缺点

1.优点:

(1)思想简单,理论成熟,既可以用来做分类也可以用来做回归;

(2)可用于非线性分类;

(3)训练时间复杂度为O(n);

(4)准确度高,对数据没有假设,对outlier不敏感;

2.缺点:

(1)计算量大;

(2)样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);

(3)需要大量的内存;

3.改进:对距离加权,可以降低k值设定的影响;

PS:常见的距离计算

(1)欧式距离


(2)曼哈顿距离


(3)切必雪夫距离


(4)闵可夫斯基距离


(5)马氏距离(S为协方差矩阵)


(6)夹角余弦距离


(7)杰卡德相似系数


(8)相关系数

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值