K近邻算法(KNN)

  • 思想:用K个最近邻居代表待预测样本
  • KNN算法三要素:
  • K值的选择:
  • KNN分类预测规则
  • KNN回归预测规则
  • KNN算法中“特征标准化”重要性
  • KNN的Python伪代码


思想:用K个最近邻居代表待预测样本

KNN算法三要素:

  • K值选择
  • K过大——>模型简单——>容易“欠拟合”
  • K过小——>模型复杂——>容易“过拟合”
  • 距离
  • 欧式距离
  • 决策与规则
  • 分类模型
  • 多数表决法
  • 加权多数表决法
  • 回归模型
  • 平均值法
  • 加权平均值法

K值的选择:

假设有100个数据作为训练集,其中有60个1,40个0
如果这时我们取的 K = 100 ,即1 = 60%,0 = 40%
那么这个时候新进来一数据:x,取距离x最近的k=100个元素,最终x必然被预测成1,这时,预测的正确率仅为60%,在训练数据中正确率仅为60%,模型过于简单,容易发生“欠拟合
反之,若果设K=1,那么在训练集里的正确率为100%,模型过于复杂,当新进来数据时,取值过于片面,容易导致在测试集的训练结果反而不是很好,则模型“过拟合


KNN算法根据不同的决策规则既可以解决分类任务,也可以解决回归任务

KNN分类预测规则

  • 多数表决发(等权)
  • 邻近样本的权重一样
  • 最终预测结果 = K个样本中出现类别最多的那个类
  • 加权对数表决法
  • 权重 = 1/距离 (权重与距离成反比)
  • K个邻近样本中距离越小——>权重越大——>说明:越有资格代表 “待预测对象”

举例分析:

如图:

等权时:多数表决法

knn近邻k的选择 k近邻算法的k值选择_权重


五角星:2/5

圆:3/5

最终输入的正方形被预测为 :圆


加权多数表决法

knn近邻k的选择 k近邻算法的k值选择_算法_02


1、权重归一化

所有权重和 = 1/2 +1/2 +1/2 + 1/1 +1/1 = 7/2

使得权重和为1 ,就需要各个权重乘 2/7

2、计算各个类别权重和

圆的权重和 = 1/2 * 2/7 + 1/2 * 2/7 + 1/2 * 2/7 = 3/7

五角星权重和 = 1/1 * 2/7 + 1/1 * 2/7 = 4/7

3、比较权重和,大的更有资格代表“待预测样本”

五角星 4/7 > 圆 3/7 ==> 待预测样本为圆


KNN回归预测规则

  • 平均值法(等权)
  • 邻近样本权重一样
  • 最终预测结果 = 邻近K个样本目标属性值的均值
  • 加权平均值法
  • 邻近样本的权重不一样
  • 权重 = 1/距离 (权重与距离成反比)
  • 权重的计算同上要进行:权重归一化
  • 在计算平均值时进行加权操作

举例分析:

等权,平均值法

knn近邻k的选择 k近邻算法的k值选择_近邻算法_03


预测结果 = (3+3+3+2+5)/5 =2.6加权平均值法

knn近邻k的选择 k近邻算法的k值选择_knn近邻k的选择_04


1、权重归一化

所有权重和 = 1/2 +1/2 +1/2 + 1/1 +1/1 = 7/2

使得权重和为1 ,就需要各个权重乘 2/7

2、计算加权平均值

加权平均值 = 圆1权重 * 值 + 圆2权重 * 值 + 圆3权重 * 值 + 方1权重 * 值 + 方2权重 * 值

3、预测结果 = 加权平均值

1/7 * 3 + 1/7 * 3 + 1/7 * 3 + 2/7 * 2 + 2/7 * 2 = 2.43


KNN算法中“特征标准化”重要性

要进行上述的两种预测规则,首先要得到这K个相邻的数据

这个相邻的判别标准用“欧氏距离”进行选择

knn近邻k的选择 k近邻算法的k值选择_机器学习_05

我们传入的数据是特征向量的形式,如下
X1(x1, y1 )第一个人前2个月工资
X2(x2, y2 )第二个人前2个月工资
X3(z3, z3 )第二个人前2个月工资
假设计算X1和X2的欧式距离
这个时候如果我X1的所有特征是以千为单位,X2的所有特征是以元为单位,那么进行欧式距离的计算时:
(x1-x2)和(y1-y2)由于,x1,y1过小,最后的,x1,y1就起不到做用了
所以要对特征进行标准化
特征标准化内容后面会更新