`k=1` 可以成为 K 个邻居分类的好选择吗?

数据挖掘 优化 准确性 超参数调整 k-nn
2022-02-23 10:56:04

sklearn.KNeighborsClassifier()在 Kaggle 的叶子分类样本(99 个物种,每个 10 个样本)上运行,使用默认的 kNN 参数和网格搜索优化(使用sklearn.model_selection.GridSearchCV),我发现k=1.

虽然这是一个技术上有效的选择k,但我觉得使用单个邻居意味着模型无法找到邻居之间的强关系。

我是对的,还是k=1有时是一个不错的选择,对于哪种问题?

请注意,使用neg_log_lossasscoring参数会导致最佳k=5邻居数。我仍然在努力理解这是如何改进的,因为那时的准确性更小。

更新:我能够使用“1NN”和“1-NN”关键字找到更多信息,这表明在某些情况下这确实是一个不错的选择。

1个回答

让 k = 1 本质上并不是不合理的。这只是意味着所有新的观察都将被预测为您在训练集中拥有的第一个最近邻的类标签。预测的类概率应该只是 1 或 0,因为估计器将采用 1/1 或 0/1 的形式。这也更清楚地说明了为什么 log loss 可能不支持 ak = 1 模型;在模型偏爱错误类别标签的情况下,预测的概率将过于极端。考虑真实标签为0的情况,即yi=0. 如果您的训练集中最近的邻居是类别标签 1,那么您的模型将错误地预测Pr[Y=1|X]=1.因此,(1yi)ln(1Pr[Y=1|X])将是无穷大。另一方面,如果真正的标签是 1,即yi=1,并且与该观察结果最近的邻居最终是标签 0,现在Pr[Y=1|X]=0我们有yiln(Pr[Y=1|X])无穷也。因此,对于所有观察结果,对数损失将为 0(您的模型预测正确)或 -infinity;显然非常极端。

但是,我只想首先讨论使用准确性作为评分指标的有效性。准确度根本不是一个正确的评分规则,并且经常导致不理想的虚假模型问题是由于您用于对“1”或“0”进行分类的阈值的任意性质,并且预测概率为 51% 的“1”的正确分类与“”的正确分类不同1",预测概率为 90%(例如)。

Logloss 是一种适当的评分规则,当预测概率接近真实的总体概率时,它会被最小化。准确度显然受您选择使用的阈值的影响,如果您选择正确的阈值来最大化模型拟合对数损失的准确度(假设您只是使用非常任意的 50% 截止)。选择的阈值应取决于您的模型的使用环境以及个人对风险的信念;特别是做出错误预测的成本。

如果您绝对被迫将对象分类为 1 或 0,那么我建议将阈值调整为模型验证过程的一部分,然后评估保留测试集的准确性(使用验证中找到的阈值)。有关此主题的更多讨论,请参见此处的此线程。