cs231n练手项目(一): 使用KNN进行图像分类(kd 树实现)

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(aibi)pp d ( a a , b b ) = ∑ i = 1 n ( a i − b i ) p p

  • p=1 p = 1 时,被称为Manhattan Distance

《cs231n练手项目(一): 使用KNN进行图像分类(kd 树实现)》

从曼哈顿城左下角到右上角, 红线,蓝线和黄线的曼哈顿距离相同

  • p=2 p = 2 时, 被称为Euclidean Distance, 这个我们很熟悉了
  • p= p = ∞ 时, 被称为Chebyshev Distance
    Dchebyshev(aa,bb)=limpi=1n(aibi)pp=maxi|aibi|(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(aibiσi)pp d ( a a , b b ) = ∑ i = 1 n ( a i − b i σ i ) p p

因为每一列的标准差在此式中作为倒数,所以如果把它看作系数,其实这是一种
Weighted Euclidean Distance

1.1.3 Mahalanobis Distance(马氏距离)

这个用的比较少

点赞