KNN算法 总结
总结
KNN K-Nearest-Neighbor Algorithm,从算法名称来看一个待测点只要看周围K个邻居是什么就行了,符合中国一句谚语,物以类聚,人以群分。KNN算法实际就是上述谚语的数学描述,算法是现实世界的数字化。KNN既可以用于cluster也可以用于classification,对于cluster而言,KNN就是将物以类聚,其中K代表多少个类,对于classification而言,K是多少个邻居,就是根据K个邻居判断未知物属于哪个类。
KNN 算法
KNN算法核心是如何计算和Neighbor的距离,就是如何判定邻居之间的距离,如何用量化的数据描述,我和你很近,我和你很远等非数字化的语言。
距离计算
下面多种距离的判断方式
1. 欧式距离
d(x,y):=(x1−y1)2+(x2−y2)2+⋯+(xn−yn)2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√2=∑i=1n(xi−yi)2−−−−−−−−−−−√
2. 曼哈顿距离
d12=∑k=1n|x1k−x2k|
3. 切比雪夫距离(L∞度量
D(p,q):=max(|pi−qi|)
等价公式
d12=limk→∞∑i=1n|X1i−X2i|k−−−−−−−−−−−−−√1k
4. 闽科夫斯基距离
d12=∑k=1n|X1k−X2k|p−−−−−−−−−−−−−√p
其中P为参数
当p=1时,就是曼哈顿距离
当p=2时,就是欧式距离
当p→∞时,就是切比雪夫距离
5. 标准化欧式距离
标准化欧式距离是针对普通欧式距离标准化
X∗=X−mS
样本的均值为m,标准差为s
d12=∑k=1n(x1k−x2ksk)2−−−−−−−−−−−−−√
6. 马氏距离
有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到u的马氏距离表示为:
D(X)=(X−u)TS−1(X−u)−−−−−−−−−−−−−−−−−√
(协方差矩阵中每个元素是各个矢量元素之间的协方差Cov(X,Y),Cov(X,Y) = E{ [X-E(X)] [Y-E(Y)]},其中E为数学期望)
而其中向量Xi与Xj之间的马氏距离定义为:
D(Xi,Xj)=(Xi−Xj)TS−1(Xi−Xj)−−−−−−−−−−−−−−−−−−−−√
若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:
D(Xi,Xj)=(Xi−Xj)T(Xi−Xj)−−−−−−−−−−−−−−−−−√
也就是欧氏距离了。
若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离
7. 巴氏距离
8. 汉明距离
9. 夹角余弦
cos(t)=∑nk=1x1kx2k∑nk=1x21k−−−−−−−−√∑nk=1x22k−−−−−−−−√
10. 杰卡德相似系数
11. 皮尔逊系数
Rxy=∑ni=1(Xi−mean(X))2(Xj−mean(X))2−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−√∑ni=1(Xi−mean(X))2−−−−−−−−−−−−−−−−−−√∑ni=1(Xi−mean(X))2−−−−−−−−−−−−−−−−−−√
KNN算法实现
KNN算法实现
4.1 暴力手段,就是计算待测项与所有的训练集的点,判断待测项最近的邻居,即缺点显而易见,慢,如果待测项有1K多的维度,则计算量则是一个天文数字。
4.2 使用KD树,先将训练集的数据构造成KD树,判断测试集时,时间大大缩短。其缺点是构造KD树时比较慢,但是构造完KD树后查询很快。