KNN算法
一、概念
KNN(K Near Neighbor):k个最近的邻居,即每个样本都可以用它最接近的k个邻居来代表。
用我们的一句古语来说就是:物以类聚,人以群分。假如一个人的通讯录里有马云、王健林、李嘉诚等,那么这个人肯定也是这个圈子里的人;再假如,一个爱好游戏的人的朋友圈,应该大部分都是玩游戏的;爱喝酒的人的朋友圈,应该都是爱喝酒的;有句话说得好,臭味相投。
最近邻算法是一种分类算法,1968年由Cover和Hart提出,应用场景有字符识别、文本分类、图像识别等领域。
该算法的思想是:一个样本与数据集中的k个样本最相似,如果这k个样本中的大多数属于某一个类别,则该样本也属于这个类别。
如上图所示:当 k = 1 k=1 k=1时,绿色这个点属于class2;当 k = 5 k=5 k=5时,绿色这个点属于class1。
二、距离度量
KNN的主要思想是计算样本与样本之间的距离,接下来我们介绍距离度量的方法。
在我们选择两个实例相似性时,一般使用欧氏距离进行度量。
L P 距 离 : LP距离: LP距离: L p ( x i , x j ) = ( ∑ i n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p L_p(x_i,x_j)=(\sum\limits_{i}^n|x_i^{(l)}-x_j^{(l)}|^p)^\frac{1}{p} Lp(xi,xj)=(i∑n∣xi(l)−xj(l)∣p)p1,其中 x i ∈ R n x_i\in R^n xi∈Rn, x j ∈ R n x_j\in R^n xj∈Rn, L ∞ L_\infty L∞定义为:
L ∞ ( x i , x j ) = m a x l ∣ x i ( l ) − x j ( l ) ∣ L_\infty(x_i,x_j)=\mathop{max}\limits_{l}|x_i^{(l)}-x_j^{(l)}| L∞(xi,xj)=lmax∣xi(l)−xj(l)