如何在Matlab中确定k最近邻算法的k值

3
如果我们有一个6行10列的矩阵,我们需要确定k值。如果我们假设默认的k值为5,并且如果我们的列数少于5,但是行数相同,比如6行4列,我们可以假设列数=k值,这正确吗?即行=6,列=4,则k=col-1 => k=3。
3个回答

7

k=n^(1/2)

式中,n是指实例数量而不是特征数量。参考资料1参考资料2

(说明:该公式为k-近邻算法中用于确定k值的公式。)

3

请查看这个问题:k最近邻算法中的k值

与之前的问题相同。通常,经验法则是特征数的平方根。

k=n^(1/2)

其中n是特征的数量。在您的情况下,10的平方根约为3,因此答案应为3。


我了解到N并不是特征的数量,而是在公式中记录的数量。你能解释一下吗? - Zimano
1
@Zimano:如果我理解正确的话,公式中记录的数量是样本数。它不能是样本数,因为机器学习算法“应该”独立于样本数量。如果您在说像classLables~feature1+feature2等公式中的数量,那么这意味着特征数量。 - discipulus
谢谢 :) 我现在明白了! - Zimano

0

k=sqrt(n)在不同的数据集中并不是最优的结果。有些数据集,它的结果相当糟糕。例如,90年代的一篇论文paper link说k的最佳结果在5-10之间,但sqrt(n)给出了17。其他一些论文提出了有趣的建议,如本地k值或加权k。

显然,选择k并不是一个容易的选择。这并没有一个简单的公式,而是取决于我们的数据集。选择最佳的k的最好方法是计算哪个k对我们的数据集最好。通常,如果我们的数据集变得更大,最优的k值也会增加。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接