【问题标题】:How to choose a weight function for KNeighborsClassifier如何为 KNeighborsClassifier 选择权重函数
【发布时间】:2021-05-08 21:58:10
【问题描述】:
我正在学习 kNN 模型的超参数,并且遇到了“距离”和“均匀”权重函数参数。
我的理解是,在模型经过训练以计算预测(通过权衡邻居的投票)之后,将使用权重函数。所以我的问题如下:
我对仅用于预测(而不是在训练期间)的权重函数的理解是否正确?
似乎使用“距离”总是能提供接近 100% 的训练准确率,这是否意味着使用“距离”函数会导致过拟合?
什么时候应该使用“距离”而不是“均匀”?
【问题讨论】:
标签:
machine-learning
scikit-learn
knn
【解决方案1】:
weights 参数的使用位置
您对weights 参数的理解是正确的,它只影响预测步骤。它仅用于加权每个最近邻居的投票以确定预测标签。
确切地说,KNeighborsClassifier 并没有真正执行任何训练,除了将训练数据保存到内存中,因此显然weights 参数在这里不起作用。
uniform 和 distance 之间的区别
预计使用weights="distance" 确实会更容易过度拟合。这样做的原因是,它可能会过度优先考虑最近的邻居,而如果其他最近的邻居距离较远,则忽略它们。另一方面,weights="uniform"(这是默认设置)确保即使一些最近的邻居离得更远一点,它们仍然计入预测。
这很好地说明了偏差-方差权衡。实际上,distance 通过降低不太相似的数据点的权重来减少偏差,但这样做会增加方差,因为预测更多地依赖于训练样本的各个数据点。 uniform 则相反,它通过确保每个最近的邻居具有相同的贡献来减少方差,从而减少对单个训练数据点的依赖性,但代价是平等考虑最近的邻居,最终可能仍然很远观察到标签,这会导致更大的回报偏差。
总之,当您觉得您的模型欠拟合时,您可能想选择distance,这可能表现为许多“平均”预测。