微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Appropriate choice of k for knn

如何解决Appropriate choice of k for knn

我看到很多帖子要求“为我的问题 X 选择 knn 的最佳选择”,我想要一个更一般的答案,因此它适用于任何 K-NN 分类问题。

  1. 是否应该只关心模型的准确度,从而调整以获得最佳的数据集答案?

  2. 为我们的问题选择可能的最佳 K 是否存在任何一般问题?

解决方法

一般来说:

  1. 太小的 K(比如 1)对噪声数据很敏感,即异常值会严重影响您的模型

  2. 太大的 K 会导致错误分类,即模型给出的预测不准确

  3. 计算距离的方式很重要。例如,在稀疏数据集中,余弦距离将产生比欧几里德距离好得多的结果。您可以为 K 选择一个正确的值,但如果您的距离计算无关紧要,那么模型的性能无论如何都会很差。

  4. K 等于类数是一个非常糟糕的选择,因为最终的分类将是随机的。

想象一个二元 k-nn 分类模型,其中输出是狗或猫。 现在假设您选择 k 等于 2(或任何其他偶数)。 此外,假设一个数据点位于,因此它的 k 个最近邻居同样属于一个类和另一个类(两个最近的邻居既是狗又是猫,或者每个类中有 2 个,或者每个类中有 3 个,等等)。 现在,您如何确定该点属于哪个类?

你不能。您需要随机化该过程,或者选择第一个,两者都会产生同样糟糕的结果。

,

K-NN 算法是一种非参数机器学习算法,相对较快且易于实现。它在训练期间很快,但在测试/推理期间很慢。

确定 K 的数量实际上取决于手头的数据集,因为它在很大程度上取决于决策(特征)空间中样本点的散布(分布)。如果给定的数据集形成了一个相对于维数(特征)的“密集”特征空间,那么 K-NN 将工作得最好。但是,如果数据集导致特征空间稀疏,那么 K-NN 的准确率可能会很低;选择其他机器学习算法可能是更好的选择。

与尝试为给定数据集找到“最佳”K 一样,通常最佳做法是针对不同的值实施 k 折交叉验证过程K,然后根据用于模型的 K 数量绘制模型的准确度。这将为每个选择的 K 值生成 k 个准确度值。导致最高平均准确度的 K 值被视为使用指定数据集的模型的最佳 K 值。这样的情节通常(完成一次)看起来像这样:

enter image description here

(实践中通常使用 10 倍 CV,因为它可以很好地平衡使用更多样本来生成更准确的置信区间并减少对估计模型“真实”误差的偏差)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。