- KNN通常用于不知道给定预测因子下响应变量条件分布的情况,这时无法使用贝叶斯分类器预测定性响应。
- KNN属于懒惰学习(lazy learning),即没有训练阶段,数据集事先已有了分类和特征值,待收到新样本后直接进行处理。
- KNN是通过测量不同特征值之间的距离进行分类,常用的是欧几里得距离。
R语言中class和kknn两个包可以实现KNN, kknn包可以处理带有因子型变量的数据集。
过程:
- 计算测试数据与各个训练数据之间的距离;(新的数据点一般用“?”表示)
- 按照距离的递增关系进行排序;
- 选取距离最小的K个点;
- 确定前K个点所在类别的出现频率;
- 返回前K个点中出现频率最高的类别作为测试数据的预测分类。
注意:
- 计算距离之前,要对数据进行scale,使所有的变量在一个可比的尺度上;
- 在二元匹配问题上,K选择奇数;
- K值不能是分类数据的倍数;
- KNN容易消耗内存;
- 它对异常值不灵敏,能适应分类数据中的错误。
参考
网友评论