KNN算法中如何选择K值

How to choose K value in KNN Algorithm

我对应用 KNN 有点困惑 algorithm.The 问题是 - 我如何设置 K 值我看到有时它是 2,4 等等? 有什么symptom/efficient的方式来选择最佳K值? 我使用不同的 k 值并找出哪个值最适合您的问题。 还有其他节省我时间的方法吗? 谢谢。

这可能非常棘手。首先,我会看这里:https://stats.stackexchange.com/questions/126051/choosing-optimal-k-for-knn。我继续解释。

诀窍在于——一般来说——k 值越低,在训练集中的表现越好。也就是说,您的模型越能捕捉到它所训练的数据集的可变性。您可以这样想:k = 1 是所有实例中最过度拟合的情况。预测仅基于最接近所提供样本的训练样本。

问题在于——即使在低维、直观的 space 中——这也不能(或者更确切地说,不经常)很好地概括。在更大的数据集上,最好增加邻居的数量以更好地表示 class 被区分的共享特征:一些可变性是可以接受的,但它(希望)通常会抵消以最好地反映平均属性class(es) 正在识别中。

总的来说,这个问题没有灵丹妙药。有时,这可能很明显:将泛化误差绘制为 k 的函数。如果有明显的弯头(快速下降,然后是平台),这很好地表明 k 值选择得当。这意味着训练数据有一个 k "suggested" 的值:一个在不过度计算最近邻的 class 的情况下最优泛化的值。

虽然没有明确的解析解。从根本上说,这是一个关于你的训练数据如何反映你的测试数据以及你的训练和测试数据如何反映所收集样本之外的数据的问题。如果您还有其他问题,请告诉我!我对数据科学充满热情,很乐意完善我的答案!

凭直觉,较低的 k 值对应于 class 化 space 中的 "sharp" 个决策边界。较高的 k 值对应于 "curvier" 或在极限平面中的决策边界。我的建议是制作一些合成数据以获得对不同 k 的影响的直觉!