如何为 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 中以相同的距离工作?