k-NN一般都选比较大的数,几乎没有见过选k=1,为什么?
如果k=1,会怎样?
谢谢!
4个回答
举个两元分类的例子。上图是k=1,下图是k=100。
当k=1的时候,决策边界变得非常不光滑,换句话说,模型的决策规则变得非常复杂,而这个就会很容易造成过拟合。
至于k怎么选,可以参考k近邻算法怎么选k
+ $k$ 的值越小,模型就越复杂,所以就越容易过拟合,过拟合表现出来的特点就是“训练误差远小于测试误差”。
+ $k$ 的值越大,模型就越简单(可以从极端情况来理解,$k$ 设置成一个很大很大的数值,那么我们的模型就不用计算 $k$ 近邻了,把所有的训练样本都拿进来做一次投票就行了),所以就越容易欠拟合。
一直有个疑问,KNN是不需要训练的,学习时间为0,直接用于测试就行,何来训练误差?
-
AIphaCat
2018-10-11 14:16
kNN是惰性算法。模型在训练集上的误差就是训练误差。kNN没有那种迭代的过程罢了,类似的还有朴素贝叶斯。
-
WinJ
2018-10-11 14:21
先了解knn的原理:给定一个实例点,然后在所有的数据中找到与该实例点距离最近的 k 个样本,最后选择 k 个样本中出现最多的分类标记作为实例点的分类预测结果。
k 值如何选择?
- k 值的选择不能过小,否则实例点会对自己周边的点异常敏感,容易过拟合
- k 值的选取也不能过大,容易产生较大的误差
- 一般选择一个合适的 k 值,用交叉验证法择优选取
如果你将 k 设置为 1,那么knn会找所有数据中与该点距离最近的 1 个点,此时模型会变得很敏感。想想小蝌蚪找妈妈,它总不能看到一个人就叫妈妈吧?:)