K近邻(KNN)算法

来源:互联网 发布:matlab 优化 线性规划 编辑:程序博客网 时间:2024/06/06 21:38

一、k近邻

三大要素:距离判别公式、k的选取、分类决策
1、距离度量

2、k取值
取值小,结构复杂,相似误差小,但容易过拟合;
取值大,结构简单,相似误差大。

二、kd树

思想:通过不断比较父节点分割线与目标点的距离与 已经找到的点与目标点的距离,进行比较,来确定要不要对该父节点下的数据进行搜索。

https://pic4.zhimg.com/v2-f3bf5299b1b137abde18f40a3634de2f_r.jpg

举个例子,设我们想查询的点为 p=(−1,−5),设距离函数是普通的

距离,我们想找距离问题点最近的 k=3 个点。如下:

步骤:1、先分别从X、Y轴来比较目标点坐标的大小,找到底层的节点;
2、然后,我们可以算出节点与目标点的距离L,并把该节点纳入最邻近点Dot1;
3、向父节点找,纳入KNN的Dot2;
4、向父节点找,把(1.24,-2.86)纳入Dot3,三个邻点已经找到,但还需要验证;
5、分别计算与Doti的距离,并与最远的父节点的分割线距离比较,发现与分割线距离小于与max(|x-doti|),说明搜索还不能结束;
6、那么,这时根据1的做法,先找到最远父节点的底层节点;
7、分别计算节点(1.75,)、(-2.96,),再和3个Dot比较距离,更新Dot点;
8、在(-2.96,)节点上,在来比较分割线与目标点的距离与目标点与Dot的最大距离的值,看要不要搜索左叉树;
9、计算目标点X和上父节点(6.27,)的距离及对应分割线的距离。
只有在满足分割线的距离比目标点与邻点距离还要大,才停止搜索。

(注,个人感觉,可以先算目标点与分割线的距离,比较Max(distance(|x-L|)),再计算目标点与父节点距离)。


参考:https://zhuanlan.zhihu.com/p/23966698

原创粉丝点击