一、模型思想
邻近算法,或者说K最邻近(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。
如上图所示,模型的本质就是寻找k个最近的样本,然后基于最近样本做“预测”。对于离散型因变量来说,从k个最近的已知类别样本中挑选出频率最高的类别用于未知样本的判断;对于连续变量来说,则是将k个最近的已知样本均值作为未知样本的预测。
模型的执行步骤如下:
- 确定未知样本近邻的个数k值
- 根据某种度量样本间相似度的指标,将每一个未知类别样本的最近k个已知样本搜寻出来,形成簇
- 对搜寻出来的已知样本进行投票,将各簇下类别最多的分类用作未知样本点的预测
二、k值的选择
不同的k值对模型的预测准确性会有较大的影响,若k值过于偏小,可能会导致模型的过拟合;若k值偏大,又可能会使模型欠拟合。
01 设置权重
若k值设置的比较大时,担心模型发生欠拟合的现象时,可以设置近邻样本的投票权重,若已知样本距离未知样本比较远时,则对应的权重就设置得小一点,否则权重就大一点,通常可以将权重设置为距离的倒数。
02 交叉验证
采用多重交叉验证法,就是将k取不同的值,然后在每种值下执行m重交叉验证,最后选出平均误差最小的k值
三、距离度量
01 欧式距离
在n维空间中,对于两点 A ( x 1 , x 2 , ⋯ , x n ) A(x_1,x_2,\cdots,x_n) A(x1,x2,⋯,xn) 和 B ( x 1 , x 2 , ⋯ , x n ) B(x_1,x_2,\cdots,x_n) B(x1,x2,⋯,xn) 间距离为:
d A , B = ( y 1 − x 1 ) 2 + ( y 2 − x 2 ) 2 + ⋯ + ( y n − x n ) 2 d_{A,B}=\sqrt{(y_1-x_1)^2+(y_2-x_2)^2+\cdots+(y_n-x_n)^2} dA,B=(y1−x1)2+(y2−x2)2+