干货 | 总结k近邻(KNN)算法

本文分以下几个部分“【对KNN的理解】”、“【算法原理推导】”、“【kd树】”、“【kd树搜索】”来进行展开,总共阅读时间大约15分钟。

关于我的更多学习笔记,欢迎您关注“武汉AI算法研习”公众号,本文作者微信comrliuyu

 

【对KNN的理解】

1、KNN是一种基本分类回归方法

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

3、k值的选择会对k近邻算法产生重大影响,当k取值较小,容易学习到噪声从而出错,则容易发生过拟合;当k取值较大,意味着用较大领域中的训练数据进行预测,这时与输入实例较远的不相似训练实例会对预测产生作用

4、KNN分类方法是一种非参数的分类技术,易于实现,只要让预测点分别和训练数据求距离,挑选前k个即可,非常简单直观;

5、KNN是一种在线技术,新数据可以直接加入数据集而不必进行重新训练

6、对于样本不均衡时候,容易陷入样本容量较大的类,导致错误分类,同时计算量比较大,每个待分类样本都要计算它到全部点的距离,根据距离排序才能求得K个临近点。

 

【算法原理推导】

1、距离度量

常用的距离度量有欧式距离、曼哈顿距离、切比雪夫距离

欧式距离:P=2,我们常见的距离计算公式

曼哈顿距离:P=1,也称作“城市街区距离”,可以理解在方格网的城市街道中,你从一个十字路口到另一个十字路口需要走的距离

切比雪夫距离:P趋向无穷大,是各个坐标距离中的最大值,

2、特征归一化

由于距离度量中,不同特征值的量纲(范围)会存在比较大的差距,所有让特征值归一化尤为必要

min-max标准化:常见方法

Z-Score 标准化:其中u是样本均值,是样本标准差

【kd树】

kd树是一个二叉树结构,同一纬度中,位于节点左子树样本点均小于此节点数值,位于右子树样本点均大于此节点数值。

1、构造根节点

首先选择样本点的一个维度,作为我们划分左右子树的依据,比如在二维样本点中,首先选择根据所有样本点在x轴上的数值的中位数作为切分点。如下:A(2,3)、D(4,7)、B(5,4)、F(7,2)、E(8,1)、C(9,6),其中x轴对应中位点是B或者F,我们选择F作为根节点。

干货 | 总结k近邻(KNN)算法_第1张图片

干货 | 总结k近邻(KNN)算法_第2张图片

2、重复进行划分子树

划分根节点后,之后换做另一个维度,对左右矩形区域内的样本点进行划分,此时对y轴方向进行划分,F点的左边是样本点A、B、D点,右边是样本点C和E,此时中位点是B和C。

干货 | 总结k近邻(KNN)算法_第3张图片

干货 | 总结k近邻(KNN)算法_第4张图片

重复进行划分子树,指导再没有可划分样本点

干货 | 总结k近邻(KNN)算法_第5张图片

干货 | 总结k近邻(KNN)算法_第6张图片

【kd树搜索】

构造完kd树后,需要利用kd树进行k近邻搜索。

1、找叶子节点

根据各个节点的数值进行比较,小于则进入左侧子树,大于则进入右侧子树

2、以此叶子节点作为“当前最近点”

3、向上回退

回退的过程中,不断的计算样本点距离节点的距离并更新“当前最近点”,同时通过以最近点距离为半径画圆,看是否节点另外一半存在隐藏的可能点。

 

 

你可能感兴趣的:(机器学习)