1. K-Nearest Neighbors
物以类聚,人以羣分
首先这是个分类算法, 简单到通过名字就能猜到大半, 通过K个与你关系最近的人就能够判断你是哪类人了
算法流程:在特征空间找出离当前点最近的K个点,K个点最”普遍”的类别即为当前点的类别
这里能看到两个细节的地方:
1. 如何定义距离
2. 如何快速寻找离当前点最近的K个点
1.1 距离的度量
拿两个点举例: aa=(a1,a2,⋯,an)T,bb=(b1,b2,⋯,bn)T a a = ( a 1 , a 2 , ⋯ , a n ) T , b b = ( b 1 , b 2 , ⋯ , b n ) T
1.1.1 L-p norm
定义 aa a a 到 bb b b 的 Lp L p 范数如下:
d(aa,bb)=∑i=1n(ai−bi)p−−−−−−−−−−√p d ( a a , b b ) = ∑ i = 1 n ( a i − b i ) p p
- p=1 p = 1 时,被称为Manhattan Distance
从曼哈顿城左下角到右上角, 红线,蓝线和黄线的曼哈顿距离相同
- p=2 p = 2 时, 被称为Euclidean Distance, 这个我们很熟悉了
- p=∞ p = ∞ 时, 被称为Chebyshev Distance
Dchebyshev(aa,bb)=limp→∞∑i=1n(ai−bi)p−−−−−−−−−−√p=maxi|ai−bi|(102)(103) (102) D c h e b y s h e v ( a a , b b ) = lim p → ∞ ∑ i = 1 n ( a i − b i ) p p (103) = max i | a i − b i |
上面这几种距离,合起来叫 Lp L p 范数,也叫Minkowski Distance
1.1.2 Standardized Euclidean Distance
因为各个维度的数据分布可能差的特别大,所以针对Euclidean Distance的缺点,推出了Standardized Euclidean Distance, 即先对各个维度进行标准化(使得这一列均值为0,标准差为1)
Xi=Xi−μσ X i = X i − μ σ
此时欧几里得距离演变成了:
d(aa,bb)=∑i=1n(ai−biσi)p−−−−−−−−−−−√p d ( a a , b b ) = ∑ i = 1 n ( a i − b i σ i ) p p
因为每一列的标准差在此式中作为倒数,所以如果把它看作系数,其实这是一种
Weighted Euclidean Distance
1.1.3 Mahalanobis Distance(马氏距离)
这个用的比较少