首页 > 解决方案 > 如何为 KNeighborsClassifier 选择权重函数

问题描述

我正在学习 kNN 模型的超参数,并且遇到了“距离”和“均匀”权重函数参数。

我的理解是,在模型经过训练以计算预测(通过权衡邻居的投票)之后,将使用权重函数。所以我的问题如下:

我对仅用于预测(而不是在训练期间)的权重函数的理解是否正确?

似乎使用“距离”总是能提供接近 100% 的训练准确率,这是否意味着使用“距离”函数会导致过度拟合?

什么时候应该使用“距离”而不是“均匀”?

标签: machine-learningscikit-learnknn

解决方案


参数weights的使用位置

您对weights参数的理解是正确的,它只影响预测步骤。它仅用于加权每个最近邻居的投票以确定预测标签。

完全准确地说,KNeighborsClassifier除了将训练数据保存到内存之外,实际上并没有执行任何训练,因此显然weights参数在这里没有发挥作用。

uniform和之间的区别distance

预计使用weights="distance"确实会更容易过度拟合。这样做的原因是,它可能会过度优先考虑最近的邻居,而如果其他最近的邻居距离较远,则忽略它们。weights="uniform"另一方面(这是默认设置)确保即使一些最近的邻居离得更远一点,它们仍然对预测有同样的影响。

这很好地说明了偏差-方差权衡。实际上,distance通过降低不太相似的数据点的权重来减少偏差,但这样做会增加方差,因为预测更多地依赖于训练样本的各个数据点。uniform相反,它通过确保每个最近的邻居具有相同的贡献来减少方差,从而减少对单个训练数据点的依赖性,但代价是平等考虑最近的邻居,这些最近的邻居最终可能离观察结果仍然很远标签,这会导致更大的回报偏差。

总而言之,distance当您觉得您的模型欠拟合时,您可能想要选择,这可能以许多“平均”预测为特征。


推荐阅读