在我看来,在使用岭回归而不是简单的线性回归的情况下,您可以根据系数选择特征。我同意,如果任何两个特征高度相关,那么简单的线性回归方法将产生非常大的系数。但是,当你采用岭回归模型时,这个问题就会消失。
事实上,根据系数选择特征是相当直观的。如果我们稍微改变一个特征的值,响应值变化越多,特征就越重要。事实上,这个想法与排列特征重要性几乎相同,被广泛用作黑盒特征重要性分析方法。
例如,在下面的代码片段中,我举一个例子来展示回归模型中特征的系数值及其对应的排列特征重要性。从结果可以看出,特征系数与这些特征的排列特征重要性基本一致。因此,综上所述,使用岭回归模型的系数作为特征重要性的粗略近似是合理的。
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.inspection import permutation_importance
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
diabetes = load_diabetes()
X_train, X_val, y_train, y_val = train_test_split(
diabetes.data, diabetes.target, random_state=0)
model = Ridge(alpha=1e-2).fit(X_train, y_train)
model.score(X_val, y_val)
for i in np.abs(model.coef_).argsort()[::-1][:5]:
print(diabetes.feature_names[i], np.abs(model.coef_[i]))
r = permutation_importance(model, X_val, y_val,
n_repeats=30,
random_state=0)
for i in r.importances_mean.argsort()[::-1]:
if r.importances_mean[i] - 2 * r.importances_std[i] > 0:
print(f"{diabetes.feature_names[i]:<8}"
f"{r.importances_mean[i]:.3f}"
f" +/- {r.importances_std[i]:.3f}")
bmi 592.2534291944405
s5 580.078063710006
bp 297.2581037274451
s1 252.42469967919644
sex 203.43588499880846
s5 0.204 +/- 0.050
bmi 0.176 +/- 0.048
bp 0.088 +/- 0.033
sex 0.056 +/- 0.023
最后,应该注意的是,上述两种方法都容易受到多重共线性问题的影响。因此,在这种情况下,我们需要先消除高度相关的特征,然后我们可以直接使用模型系数作为特征重要性。