KNN模型

来源:互联网 发布:打卡机数据恢复 编辑:程序博客网 时间:2024/04/30 05:19

(一)KNN算法

1.算法流程:

(1)根据给定的距离度量,在训练集中找出与样本x最近的k个点

(2)在这k个点中,根据分类决策原则(比如多数表决),决定x的类别y

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
原创粉丝点击