【问题标题】:Value of k in k nearest neighbor algorithmk最近邻算法中k的值
【发布时间】:2012-07-19 02:43:03
【问题描述】:

我有 7 个类需要分类,我有 10 个特征。在这种情况下,我是否需要使用 k 的最佳值,还是必须针对 1 到 10(大约 10)之间的 k 值运行 KNN 并在算法本身的帮助下确定最佳值?

【问题讨论】:

  • 可能想看看this article
  • 哦,不,不幸的是,我没有足够的知识来阅读和理解那篇论文。有人可以帮我吗:(?

标签: classification knn


【解决方案1】:

除了 the article 我在 cmets 中发布的还有 this one 以及暗示:

k 的选择非常关键——k 值较小意味着噪声对结果的影响较大。较大的值使其计算成本很高,并且有点违背 KNN 背后的基本理念(靠近的点可能具有相似的密度或类别)。选择 k 的简单方法设置为 k = n^(1/2)。

这在很大程度上取决于您的个人情况,有时最好遍历 k 的每个可能值并自己决定。

【讨论】:

  • 你能告诉我n是否代表班级数吗?
  • 你是根据特征分类的,所以n代表特征数。
  • 如果我有 93 个功能,那么 97 是否是一个合适的选择,或者我应该选择 93^1/2?
  • 如前所述,您应该将 n^0.5(其中 n=没有数据实例,而不是特征)作为 k 的起始值并相应地进行更改。
  • 如果“最优 k”没有给我们最好的结果是什么意思?
【解决方案2】:

在 k-NN 算法中需要注意的重要一点是 特征 的数量和 的数量都 在确定k-NN算法中k的值。 k-NN算法是一种ad-hoc分类器,用于根据距离度量对测试数据进行分类,即如果与其他类相比,靠近测试样本的Class-1训练样本数量更多,则将测试样本分类为Class-1训练样本。例如:如果 k = 5 个样本的值,则根据距离度量选择 5 个最接近的训练样本,然后对每个类的大多数样本进行投票。因此,如果 3 个样本属于 1 类,2 个样本属于 5 类,则该测试样本被归类为 1 类。所以k的值表示对测试样本进行分类所需的训练样本数。

关于您的问题,k 的值是非参数的,选择 k 值的一般经验法则是 k = sqrt( N)/2,其中 N 代表训练数据集中的样本数。我建议的另一个技巧是尽量保持 k 的值奇数,这样在选择一个类之间就没有联系,但这表明训练数据在类之间高度相关并且使用简单的分类算法,例如 k- NN 会导致分类性能不佳。

【讨论】:

    【解决方案3】:

    在 KNN 中,找到 k 的值并不容易。 k 值较小意味着噪声对结果的影响较大,而较大的值使其计算量大。

    数据科学家通常会选择:

    1.如果类数为2,则为奇数

    2.另一种选择k的简单方法是设置k = sqrt(n)。 其中 n = 训练数据中的数据点数。

    希望这会对你有所帮助。

    【讨论】:

    • 大型k 的计算开销通常不是最重要的问题。大的k 会过度平滑忽略局部结构。
    【解决方案4】:

    您可能想尝试将其作为一种遍历不同 k 值并将其可视化以帮助您做出决策的方法。我已经使用了很多次,它给了我想要的结果:

    error_rate = []
    
    for i in range(1,50):
        knn = KNeighborsClassifier(n_neighbors=i)
        knn.fit(X_train, y_train)
        pred = knn.predict(X_test)
        error_rate.append(np.mean(pred != y_test))
    
    plt.figure(figsize=(15,10))
    plt.plot(range(1,50),error_rate, marker='o', markersize=9)
    

    【讨论】:

      【解决方案5】:

      没有预定义的统计方法可以找到最有利的 K 值。选择非常小的 K 值会导致决策边界不稳定。 K 的值可以选择为 k = sqrt(n)。其中 n = 训练数据中的数据点数 奇数优先作为K值。

      以下方法的大部分时间都在工业中遵循。 初始化一个随机的 K 值并开始计算。 得出错误率和 K 之间的图,表示定义范围内的值。然后选择K值作为具有最小错误率。 得出精度和 K 之间的图,表示定义范围内的值。然后选择K值作为具有最大精度。 尝试在误差曲线和准确度曲线之间找到 K 的折衷值。

      【讨论】:

        猜你喜欢
        • 2014-02-23
        • 2018-05-09
        • 2010-10-16
        • 2011-06-20
        • 1970-01-01
        • 1970-01-01
        • 2012-11-10
        • 2014-04-12
        • 2013-03-21
        相关资源
        最近更新 更多