k在k近邻算法中的应用

时间:2012-07-19 20:36:46

标签: classification knn

我有7个类需要分类,我有10个功能。在这种情况下我是否需要使用k的最佳值,或者我必须运行KNN以获得介于1和10(大约10)之间的k值,并在算法本身的帮助下确定最佳值?

4 个答案:

答案 0 :(得分:11)

除了the article我在评论中发布的内容还有this one,表明:

  

k的选择非常关键 - k的小值意味着噪声对结果的影响更大。一个很大的值使它在计算上变得昂贵,并且有点击败了KNN背后的基本哲学(近点的点可能具有相似的密度或类)。选择k的简单方法是设置k = n ^(1/2)。

它将在很大程度上依赖于您的个案,有时最好是为k自己决定每个可能的值并自行决定。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

数据科学家通常选择:

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

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

希望这会对您有所帮助。

答案 3 :(得分:0)

您可能想尝试一下此方法,以运行不同的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)