我相信很多人都在研究K-NN算法,我也是其中之一。
我刚刚看到一句描述:“对于任何给定的问题,小的k值会导致预测的方差很大。相反,设置较大的k值可能会导致模型偏差很大。”这句话对很多人来说可能很直白,但对我来说却不是这样。
如果你已经明白这句话的意思,请帮助我理解它。
回答:
好的,我们从头开始讲起。
1. k-NN是如何工作的?
你有一个包含n个点(k远小于n)的基础数据集,你知道这些点的期望答案——这些答案可能是从某个权威来源获得的。这个集合被称为训练集,因为你将它提供给一个虚拟实体(k-NN分类器),以便它学习期望的结果。这里的“点”指的是单个示例,这些示例在某个空间中用特征描述,这个空间允许我们计算距离。
当需要对一个新点进行分类(识别)时,你会在n个点中搜索与新点最接近的k个实例。这里的“最接近”是指“特征向量之间的距离最短”。然后,你会根据这k个点的投票选择答案。例如,如果k=5,且3个点认为新点属于A类,2个点认为属于B类,你会假设新点属于A类。你需要为平局指定某种策略——可能回退到1-NN并返回最接近点的类别。
2. “对于任何给定的问题,小的k值会导致预测的方差很大。”
我假设作者所说的“预测的方差很大”是指“在分类大量数据时会出现很多错误”。
为什么会这样呢?
因为k-NN非常简单直观。直觉上,接近的点可能会属于同一类,但并非总是如此。例如,查看下图中的点A。如果我们使用k=1,那么最接近的点将是红色,尽管答案应该是绿色。对于k=2,我们得到红色和绿色之间的平局,并选择红色,因为它更接近。
来源:英文维基百科,稍作手动修改
总的来说,我认为这句话的意思是“如果k值小,你可能会得到很多错误的结果”。
3. “设置较大的k值可能会导致模型偏差很大。”
“偏差”是指即使问题分布均匀,也倾向于给出一种答案的倾向。使用较大的k值可能会发生这种情况,但问题是“什么时候”。
那么,“什么时候”的答案是“当你的训练集有偏差时”。“有偏差”在这里意味着某些类别由更多的点代表。
考虑一个训练集,其中你有5个点属于+类,而*类有更多的点,如下图所示。
这可能不代表类别之间的真实关系,但这是你所有的数据。下图中的类别可能是线性可分的,标记为红色的?点可能是+类。
如果你使用k=10,你几乎总是会得到*的答案。最佳情况是标记为红色的?点——你会选取所有五个+点,再加上五个*点,并通过1-NN解决平局,使用+,所以答案是正确的。
无论如何,在大多数情况下,你的分类器会提供一个特定的答案,这就是偏差——一个类别会被更频繁地返回。
然而,在前面的例子中并非如此——正如这句话所述,它可能导致大的偏差,但不一定如此。
总的来说,这句话的意思是,如果你的数据集有偏差,那么对于较大的k值,你的分类器比对于较小的k值更可能有偏差。
来源:我自己的
4. 总结和进一步阅读。
我希望这能为你澄清一些事情。
如果你需要更多,请查看这里。