KNN 中的特征选择

数据挖掘 机器学习 特征选择 k-nn
2022-02-10 22:16:49

关于使用 K 最近邻算法,我有一个幼稚的问题:KNN 中的特征选择是否比其他算法更重要?

如果一个特定的特征在神经网络中不能预测,网络就会学会忽略它。但是在 KNN 中,它似乎会使预测变得更糟,对吧?如果我根据体重、年龄和性别来预测身高,如果我现在添加门牌号,我的模型会变得更糟,因为与我相似的门牌号会更接近我。

在一个不太极端的例子中,如果一个特征的预测能力很弱怎么办?与其对我的所有特征进行归一化以使它们具有相同的权重,我难道不想让高预测性特征比预测性较差的特征具有更大的权重吗?

3个回答

我会一一解答你的问题:


KNN 中的特征选择是否比其他算法更重要?

我不认为它对 kNN 比对其他类型的算法更重要。


如果一个特定的特征在神经网络中不能预测,网络就会学会忽略它。但是在 KNN 中,它似乎会使预测变得更糟,对吧?

正确的。神经网络是“更智能”的算法,它们具有可调整以最小化成本函数的内部权重。对于高度预测的变量,不太重要的特征将被归为相对较低的重要性。这不会发生在 kNN 中,其中预测完全基于数据点之间的距离 - 并且无法从中推断出有关变量相对重要性的信息。


在一个不太极端的例子中,如果一个特征的预测能力很弱怎么办?与其对我的所有特征进行归一化以使它们具有相同的权重,我难道不想让高预测性特征比预测性较差的特征具有更大的权重吗?

sklearn允许操纵 kNN 权重。但是这种权重分布对于模型来说不是内生的(例如对于自主学习的神经网络),而是外生的,即在运行您的 kNN 算法之前,您必须指定它们,或者找到一些方法来先验地赋予这些权重。如果你能做到这一点,并且你有很好的方法论理由,那么改变变量的权重可以改进你的模型,但我会小心(你很容易过拟合)。

通常,KNN 的实现将包括应用权重的选项。例如,在包sklearn.neighbors.KNeighborsClassifier中有一个参数 supply weights诀窍将是尝试确定如何在您的情况下设置重量。也就是说,提供权重并不一定会抵消标准化值的需要。

KNN 算法不提供对变量重要性或系数的任何预测。您可以应用另一个模型,如回归(或随机森林)来计算系数。

否则,您可以首先应用一些特征选择指标(如信息增益)并选择信息量最大的特征或应用权重来考虑指标的结果。对于后者,您可以使用加权欧几里德距离来查找实例的最近邻居,或者使用 python 中 scikit learn 库中的加权 KNN 选项。