我想知道 kNN 是否会产生最好的分类结果?由于它不是基于模型的,它不会丢失任何细节并比较每个训练样本以给出预测。因此测试性能应该很好。
我知道测试非常缓慢并且容易受到噪音的影响。但是,除此之外,还有什么理由说明 kNN 不应该为分类提供最佳性能?
我想知道 kNN 是否会产生最好的分类结果?由于它不是基于模型的,它不会丢失任何细节并比较每个训练样本以给出预测。因此测试性能应该很好。
我知道测试非常缓慢并且容易受到噪音的影响。但是,除此之外,还有什么理由说明 kNN 不应该为分类提供最佳性能?
没有最好的分类器,它总是取决于上下文,手头有什么样的数据/问题。正如您所提到的,当您有大量观察时,kNN 会很慢,因为它不会预先对数据进行泛化,它会在每次需要预测时扫描历史数据库。
使用 kNN,您需要仔细考虑距离度量。例如,如果一个要素以 1000 公里为单位测量,另一个要素以 0.001 克为单位,则第一个要素将主导距离测量。您可以根据领域知识对特征进行规范化,或赋予某些重要性权重。
此外,在一个非常高维的空间中,到所有邻居的距离或多或少都相同,最近和远邻居的概念变得模糊。
你指的是所谓的偏见。
由于 kNN 不是基于模型的,它具有低偏差,但这也意味着它可以具有高方差。这称为偏差-方差权衡。
基本上,不能保证仅仅因为它具有低 Bias 就具有良好的“测试性能”。恰恰相反,它很容易过度拟合数据并且测试性能非常低。
Hastie、Tibrishiani 和 Friedman 写了一本非常棒的书,名为The Elements of Statistical Learning,简要讨论了这个主题。它(合法)可在此处免费在线获得。在第 37 页,他们讨论了 kNN 上下文中的 Bias-Variance 权衡,因此它应该对您特别有用。
你知道吗?如果未知,则所有赌注都关闭。
你如何定义“最佳”?在统计意义上,最好意味着使用平方误差损失函数来最小化风险。如果不是这种情况,即使是这种情况,您将如何比较方法?
正如inzl 所述,没有最好的分类器。如果您知道您的数据采用球形形式,您可能想尝试基于 k-means 的方法,并且仅在这种情况下,基于 k-means 的方法在统计上会更有效(更不用说 k-means 在计算上更有效) )。
还应该注意的是,对于大型数据集,即使对于中等维度,kNN 也会分崩离析,这就是我们使用近似最近邻(一个活跃的研究领域)的原因。
给定无限数据,保证 k-NN 在理想条件下接近贝叶斯错误率。您可能没有无限数据,并且您的 k 可能不够大(它必须接近无穷大)。
在实践中,没有理由 k-NN 应该是给定有限数据的最佳分类器!