首页 > 技术文章 > 8.史上最懒惰的算法之KNN

inpluslab-dataplayer 2018-03-05 17:38 原文

本文由中山大学In+ Lab整理完成,转载注明出处

团队介绍 传送门

序言

KNN全称K-Nearest Neighbor algorithm,又称K近邻算法。由于KNN是“惰性学习”(lazy learning)的著名代表,不做任何模型训练,训练时间开销为零,所以我们称它为“史上最懒惰的算法”。看到这你一定觉得很讶异,居然还有分类器可以懒惰成这个样子。那么,我们就来看一看KNN凭什么可以理直气壮地不做训练却能达到分类效果。

什么是KNN

KNN的基本思想莫过于“近朱者赤,近墨者黑”这简单的八字箴言,他认为“物以类聚,人以群分”,简而言之就是待预测的样本点应该与其距离近的样本点同类,这个距离近的样本点我们称之为“邻居”,K=1时指的是与待测样本距离最近的邻居,K>1时则是指距离相对较近的K个邻居,那么此时待测点是判别为属于K个邻居中出现最多的类别。以金融领域中的股票为例,按股票的成长空间可分为潜力股和地雷股。所谓潜力股就是指在未来一段时期存在上涨潜力的股票或具有潜在投资预期的股票。而地雷股正好相反,如果一些公司的造假暴露、突发的业绩下降、长时间停牌、或前期遭大幅爆炒,从而导致股票价格大幅下跌甚至连续跌停,使原先买入公司股票的人猝不及防,好像中了地雷,对于这样的股票,我们就称它为地雷股。投资者自然希望投资潜力股,避开地雷股。基于上述的场景我们来看下面这张图片,用蓝色方形表示潜力股样本数据,红色三角形表示地雷股样本数据,现在我们需要判断中间绿色圆形是属于潜力股还是地雷股。

K的取值≥1:

K=1时,绿色原点的最近1个邻居是红色三角形,则判断判定绿色的这个待分类点属于红色的三角形一类(地雷股)。

K=3时,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类(地雷股)。

K=5时,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类(潜力股)。

l ....

分析到这里,大家不难发现KNN算法思想很简单,其分类结果取决于“K值”以及“近邻距离的度量方法”。

近邻距离的度量方法

近邻的度量方式有很多,不同方式找到的邻居点也不同,下面介绍几种常见的近邻距离的度量方法。

1.LP距离(LP distance)

定义空间中的两个样本点为  ,那么,xixjLp距离定义如下:

我们知道每个样本是具有多个特征值的,所以我们可以把样本点看成是一个由多个特征值组成的特征向量形如。

在这里你会发现有一个未知的参数P,P的取值范围应是大于等于1的,Lp距离其实是P值不同的一组距离的定义:

 l P=1时,称为曼哈顿距离(Manhattan distance),即:

 

P=2时,就是我们最早学到的欧氏距离(Euclidean distance),即:

回忆一下二维平面上的两点间距离公式,其实就是二维的欧氏距离。

P=∞时,称为切比雪夫距离(Chebyshev distance),即:

玩过国际象棋的人或许知道,国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步?你会发现最少步数总是 步 ,切比雪夫就是这样的一种度量方式。

上述三种不同的P值,当P取不同值时与原点的Lp距离为1的点所构成的图形如下图:

 

2.余弦值(Cosine)

我们学过二维空间两个向量的夹角余弦公式为:

 

扩展到多维空间中,对于,同样可以计算多维向量的余弦值:

 

这里借助三维坐标系来看下欧氏距离和余弦距离的区别,余弦距离使用两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比欧氏距离,余弦距离更加注重两个向量在方向上的差异。

对于文本类型的数据(比如股票新闻数据等)来说,使用余弦值来作为距离量度更为合适。 夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,此时两个向量的相似性最高,当两个向量的方向完全相反夹角余弦取最小值-1,此时两个向量的相似性为负。

K值的选择

K值的选择会影响选择多少个邻居点作为参考点,我们之前提到KNN的分类依据就是K个邻居点的类别,在所选取的K歌邻居点中,出现次数最多的类别即为待预测点的类别。关于K值的选取有一下三种可能发生的不当情况:

如果选择较小的K值,就相当于用较小的领域中的训练实例进行预测,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是预测结果会对邻近的实例点非常敏感,如果邻居点恰巧是噪声,预测结果就会出错。

如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少噪声带来的影响,但缺点是与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。

l 当K=N时,则完全不做选取,因为此时无论输入实例是什么,都只是简单的预测它属于全部训练实例中最多的类别,这样的模型过于简单,忽略了训练实例中大量有用信息。

在实际应用中,K值一般取一个比较小的数值,通常采用交叉验证法(简单来说,就是一部分样本做训练集,一部分做测试集),通过观察K值不同时模型的分类效果来选择最优的K值。

 

参考文献

1.统计学习方法,李航

2.https://www.cnblogs.com/v-July-v/archive/2012/11/20/3125419.html

3.概率论与数理统计 第四版 盛骤等编,高教版

 

 

推荐阅读