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个邻近样本中距离越小——>权重越大——>说明:越有资格代表 “待预测对象”
举例分析:
如图:
等权时:多数表决法
五角星:2/5
圆:3/5
最终输入的正方形被预测为 :圆
加权多数表决法
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/距离 (权重与距离成反比)
- 权重的计算同上要进行:权重归一化
- 在计算平均值时进行加权操作
举例分析:
等权,平均值法
预测结果 = (3+3+3+2+5)/5 =2.6加权平均值法
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个相邻的数据
这个相邻的判别标准用“欧氏距离”进行选择
我们传入的数据是特征向量的形式,如下
X1(x1, y1 )第一个人前2个月工资
X2(x2, y2 )第二个人前2个月工资
X3(z3, z3 )第二个人前2个月工资
假设计算X1和X2的欧式距离
这个时候如果我X1的所有特征是以千为单位,X2的所有特征是以元为单位,那么进行欧式距离的计算时:
(x1-x2)和(y1-y2)由于,x1,y1过小,最后的,x1,y1就起不到做用了
所以要对特征进行标准化
特征标准化内容后面会更新