【问题标题】:Appropriate choice of k for knn [closed]Appropriate choice of k for knn [closed]
【发布时间】:2021-06-18 09:39:19
【问题描述】:

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

  1. 是否应该只关心自己模型的准确性,并因此调整以通过自己的数据集获得最佳答案?

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

  3. 这样的技巧是不是在建立了很多模型之后自然而然地出现了,并且可以本能地选择正确的值,或者至少想出一个合理的范围来测试?

【问题讨论】:

  • 我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅 machine-learning @ 中的介绍和注意事项987654322@.
  • 问题与pythonnumpy 无关 - 请不要向无关标签发送垃圾邮件(已删除)。
  • 对不起@desertnaut,我是 StackOverflow 的新手。那么我到底在哪里发布像我这样的问题呢?
  • 请注意,当我们包含“请参阅”的建议时,我们实际上希望您会真正看到它。请看。

标签: machine-learning classification knn


【解决方案1】:

一般:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 2022-12-02
      • 2017-06-30
      • 2020-06-17
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-18
      相关资源
      最近更新 更多