1、简介
knn,the k nearestNeighbor,也就是最k个邻居的意思。因此涉及到两个变量的问题,k的选择以及距离的选择。
对于k值的选择,有几点需要考虑;
(1)如果当K的取值过小时,一旦有噪声得成分存在们将会对预测产生比较大影响,例如取K值为1时,一旦最近的一个点是噪声,那么就会出现偏差,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
(2)如果K的值取的过大时,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误。K值的增大就意味着整体的模型变得简单;
(3)如果K==N的时候,那么就是取全部的实例,即为取实例中某分类下最多的点,就对预测没有什么实际的意义了;
(4)K的取值尽量要取奇数,以保证在计算结果最后会产生一个较多的类别,如果取偶数可能会产生相等的情况,不利于预测。
基于以上考虑,k的取值遵循如下原则:
常用的方法是从k=1开始,使用检验集估计分类器的误差率。重复该过程,每次K增值1,允许增加一个近邻。选取产生最小误差率的K。一般k的取值不超过20,上限是n的开方,随着数据集的增大,K的值也要增大。
对于距离的选择
关于距离的度量方法,常用的有:欧几里得距离、余弦值(cos), 相关度 (correlation), 曼哈顿距离 (Manhattan distance)或其他。
在knn中最常选择的距离为欧几里得距离,为各维度特征值的差的平方和最终开方。
至于最终的决策机制,一般选用多数投票机制。也就是在k个邻居中,所持有个数最多的标签为预测标签。
2、KNN的优缺点
(1)优点
1)简单、有效,重新训练的代价较低(类别体系的变化和训练集的变化,在Web环境和电子商务应用中是很常见的)
2)计算时间和空间线性于训练集的规模(在一些场合不算太大)
3)由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合
4)该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分
(2)缺点
1)KNN算法是懒散学习方法(lazy learning,基本上不学习),一些积极学习的算法要快很多
2)类别评分不是规格化的(不像概率评分)
3)输出的可解释性不强,例如决策树的可解释性较强
4)该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数
5)计算量较大。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。
以上总结为各博客阅读片段的组合,拟形成系统性总结待日后翻阅巩固。