KNN算法 总结

来源:互联网 发布:知乎经历最多的人 编辑:程序博客网 时间:2024/06/06 03:45

KNN算法 总结

总结

KNN K-Nearest-Neighbor Algorithm,从算法名称来看一个待测点只要看周围K个邻居是什么就行了,符合中国一句谚语,物以类聚,人以群分。KNN算法实际就是上述谚语的数学描述,算法是现实世界的数字化。KNN既可以用于cluster也可以用于classification,对于cluster而言,KNN就是将物以类聚,其中K代表多少个类,对于classification而言,K是多少个邻居,就是根据K个邻居判断未知物属于哪个类。

KNN 算法

KNN算法核心是如何计算和Neighbor的距离,就是如何判定邻居之间的距离,如何用量化的数据描述,我和你很近,我和你很远等非数字化的语言。

距离计算

下面多种距离的判断方式
1. 欧式距离

d(x,y):=(x1y1)2+(x2y2)2++(xnyn)22=i=1n(xiyi)2

2. 曼哈顿距离
d12=k=1n|x1kx2k|

3. 切比雪夫距离(L∞度量
D(p,q):=max(|piqi|)

等价公式
d12=limki=1n|X1iX2i|k1k

4. 闽科夫斯基距离
d12=k=1n|X1kX2k|pp

其中P为参数
当p=1时,就是曼哈顿距离
当p=2时,就是欧式距离
当p→∞时,就是切比雪夫距离
5. 标准化欧式距离
标准化欧式距离是针对普通欧式距离标准化
X=XmS

样本的均值为m,标准差为s
d12=k=1n(x1kx2ksk)2

6. 马氏距离
有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:
D(X)=(Xu)TS1(Xu)

(协方差矩阵中每个元素是各个矢量元素之间的协方差Cov(X,Y),Cov(X,Y) = E{ [X-E(X)] [Y-E(Y)]},其中E为数学期望)
而其中向量Xi与Xj之间的马氏距离定义为:
D(Xi,Xj)=(XiXj)TS1(XiXj)

若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:
D(Xi,Xj)=(XiXj)T(XiXj)

也就是欧氏距离了。  
若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离
7. 巴氏距离
8. 汉明距离
9. 夹角余弦
cos(t)=nk=1x1kx2knk=1x21knk=1x22k

10. 杰卡德相似系数
11. 皮尔逊系数
Rxy=ni=1(Ximean(X))2(Xjmean(X))2ni=1(Ximean(X))2ni=1(Ximean(X))2

KNN算法实现

KNN算法实现
4.1 暴力手段,就是计算待测项与所有的训练集的点,判断待测项最近的邻居,即缺点显而易见,慢,如果待测项有1K多的维度,则计算量则是一个天文数字。
4.2 使用KD树,先将训练集的数据构造成KD树,判断测试集时,时间大大缩短。其缺点是构造KD树时比较慢,但是构造完KD树后查询很快。

0 0