最近学习KNN算法,然后发现K值如果很大的话,分类准确率会越来越低,准确率随着K值增加而减少
在相关文章里面也发现K值通常是选择1,3,5,7都比较小
一直没想明白,为什么K越大 准确率却越来越低
还请各位大神帮忙指点迷津
5个回答
KNN的思想是用目标点邻点的类别投票判断目标点的类别。如果K过大,即和它距离较远的不同类别的点就变成了邻点,偏差变大,准确率就低了。如果K过小,比如就选最近的一个点,容易被噪声和错误的样本干扰,就容易过拟合。
SofaSofa数据科学社区DS面试题库 DS面经KNN有一个先验假设,物以类聚,人以群分。距离近的点有相似的分布,所以相近点的统计量也相近。
KNN有两步:
1.对一个测试点,找K个最临近的训练点作为一个聚类(cluster)的采样,得到统计量,比如均值、中位数、方差或分类标签等。
2.用得到的统计量表示这个测试点的统计量。
K太小,因为采样数太小,估计统计量的置信区间过大,偏差大,会过拟合。K太大,一个聚类中的训练点没有相同分布,所以聚类的统计量不能代表测试点的统计量,没有找到想要的统计量,会欠拟合。统计量的置信区间和相同分布是两个矛盾的条件。K应该选训练数据中聚类大小的平均值。
对于你的例子,如果K>60,用不是同类的点去计算分类标签,肯定会引入更多错误。
SofaSofa数据科学社区DS面试题库 DS面经感谢各位前辈的解答。
小弟还有一个问题,我自己编写的程序和SKLEARN调用的程序,在相同K值、相同数据集的情况下,得到的分类准确率很多不一样,不知道什么原因,这个现象正常吗?
下图是对比曲线,请参考