K近邻算法原理

265 阅读3分钟

1. 基本思想

根据K个近邻样本的y值来预测自身的y值。

K近邻是监督学习中比较简单的一种算法,它既可以解决分类问题,也可以解决回归问题。具体到分类问题中,y值就是样本类别的取值,一般采用多数表决的原则来对测试样本的类别进行预测。回归问题中预测y值是一个连续值,K近邻是将离X最近的K个样本的y值的平均值作为X的预测y值。

2. 欧氏距离

在K近邻算法中一般选取的是欧氏距离。它的计算比较简单,可以类比两点间的距离公式:

image.png

拓展到更高维的空间的距离公式是类似的:

image.png

其实就是先计算向量a和向量b对应维度数值差的平方和,然后再开方。由此我们可以写出任意维特征向量a和b的欧式距离公式:

image.png

3. 算法流程

K近邻分类算法的流程:

  1. 准备训练样本集:data = {[x1, x2, ..., xn,y], ...},其中x1,x2,...,xn是样本特征,y是样本类别取值。
  2. 输入测试样本 A:[x1,x2,...,xn]
  3. 计算测试样本 A 和所有训练样本的距离
  4. 按照距离递增排序
  5. 选取与 A 距离最小的 K 个样本
  6. 计算这 K 个样本所在类别的出现频率
  7. 返回出现频率最高的类别作为 A 的预测分类

4. 影响因素

K近邻中的K值是人为设定的参数,在机器学习中的术语叫超参数 。

如果选择较小的K值,则一旦邻近点是噪声(和X实际上并不相似的点),预测结果就会出错。如果选择较大的K值,则和X距离较远的点也会对预测结果产生影响。极端情况下K值等于训练样本个数时,无论输入的测试样本是什么,预测结果都将是训练样本中最多的类。在实际应用中,K值取比较小的数,一般低于训练样本数的平方根。

此外,还可以采用交叉验证的方法来选择最优的K值。

使用简单交叉验证进行K值选择的思路:首先将数据分为训练集和测试集,然后使用不同的K值(如:1,3,5,7,...)进行实验,最后选出在测试集上误差最小的K值。

除了K值外,K近邻的预测结果还受距离度量和决策规则的影响。距离度量实际上是衡量两个样本的相似程度:距离越小,相似程度越高。常见的相似性度量函数有:欧氏距离、余弦相似性、皮尔逊相关系数。

K近邻中的分类决策规则一般是多数表决,如果采用其他的决策方式,相应的预测结果也会发生变化。