K近邻法(KNN)既能用来做多分类也能用来做回归,但是一般用来做分类。K近邻算法采用测量不同特征值之间的距离进行分类。
1. KNN分类原理
给定一个训练数据集,对新输入的实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例中大多数属于某一个类别,则该输入实例也属于这个类别。
如上图所示,训练数据集中有两类数据,一类是蓝色方框,另外一类是红色三角,中心的绿色圆圈是输入的实例,也就是需要进行分类的数据,图中的实线是K=3时的情形,虚线是K=5时的情形。当k=3时,这三个实例中有两个是红色三角,一个是蓝色方框,因此K=3时绿色圆圈属于红色三角分类。而当K=5时,这5个实例中有三个蓝色方框,两个红色三角,因此K=5时绿色圆圈属于蓝色方框分类。
2. K值的选择
[1] K值过小导致近似误差小,估计误差大,容易发生过拟合。
[2] K值过大导致估计误差小,近似误差会增大,与输入实例较远的训练实例也会对预测起作用,使预测发生错误。
[3] K一般取较小值,通过交叉验证来获取K的最优值,通常取不大于20的整数。
PS:近似误差:可以理解为对现有训练集的训练误差。 估计误差:可以理解为对测试集的测试误差。近似误差小,会出现过拟合的现象,即模型在训练集上预测误差小,在未知的测试集上则表现差,此时模型并非最优模型;估计误差小,则模型在未知的测试集上的误差小,模型接近于最优模型。
3.优点
[1] 既能做分类也能做回归。
[2] 不需要过多调节就可以得到不错的性能。
[3] 对异常值不敏感。
[4] 不需要进行参数估计。
4.缺点:
[1] 特征数很多或者样本数很大时预测速度非常慢。
[2] 对于有很多特征(几百或更多)的数据集往往效果不好,对于大多数特征的大多数取值都为 0 的数据集(所谓的稀疏数据集)来说,这一算法的效果尤其不好。
[3] 由于预测速度慢且不能处理具有很多特征的数据集,所以在实践中往往不会用到。
5.参考文献
[1] 李航. 统计学习方法[M]. 清华大学出版社, 2012.
[2] Harrington P , 李锐 … [等. 机器学习实战[M]. 人民邮电出版社, 2013.
[3] Andreas C. Müller , Sarah Guido Python. 机器学习基础教程[M]. 人民邮电出版社, 2018.
[4] https://blog.csdn.net/dream_angel_z/article/details/45896449