如何为 k-NN 找到 k 的最佳值?

Posted

技术标签:

【中文标题】如何为 k-NN 找到 k 的最佳值?【英文标题】:How to find the best value of k For the k-NN? 【发布时间】:2018-03-17 21:27:11 【问题描述】:

我有 4 个不同的数据集,每个数据集都包含属于以下两个类别之一的二维样本:1 或 2。每个样本的类别标签(1 或 2)位于最后一列。第一列和第二列包含代表样本的二维点的坐标。我的任务是,

    对于 k-NN,找到 k 的最佳值,并将其与使用 Scikit 的 1-NN 进行比较

我是机器学习和 python 的新手。请告诉我如何找到最佳 k 以及我们必须根据哪个度量来选择最佳 k。

【问题讨论】:

【参考方案1】:

请注意,在您的情况下,k 是 hyperparameter。要对其进行调整,您需要将数据集拆分为训练和测试存储桶,并对 k 值范围内的每个测试元素进行多次分类,例如从 1 到 20。计算每种情况下的准确度(或精确度/召回率)。

然后为每个 k 绘制准确度值,并选择足够小的 k 来为您提供“良好”的准确度。通常,人们会查看图表的斜率并选择最小的k,例如之前的值k-1会显着降低准确性。

请注意,k 的值很大程度上取决于您的数据。例如,在下面的图表中(信用:https://kevinzakka.github.io/2016/07/13/k-nearest-neighbor/)k 的一个好的选择是 8,因为它会导致最低的误分类错误。

此链接也可能有帮助:https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm#Parameter_selection

【讨论】:

感谢您的回复。我还有一个疑问......我找到了 k 值,但我得到了超过一个 k 的相同精度。那么在这种情况下我应该选择哪个k?最小 k 值还是最大 k 值? 一般来说,min k 更好,因为您的系统需要更少的信息来产生相同的结果。您还可以尝试多次运行您的实验,并在不同的实验中获得不同 k 的平均准确度。它可能会导致算法的鲁棒性更好。

以上是关于如何为 k-NN 找到 k 的最佳值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 K-nn 算法处理音乐流派,如何处理提取的特征? [关闭]

K-NN 算法如何在 rapidminer 中以相同的距离工作?

K-近邻算法(K-NN)

使用 sklearn 获得相同的精度和召回率 (K-NN) 值

如何为管道中的不同“步骤”找到最佳参数?

使用 python 和 Scikit Learn 为 K-NN 机器学习算法实现 ROC 曲线