对于线性回归模型中的特征选择,我可以使用系数估计吗?

机器算法验证 回归 Python p 值 特征选择 scikit-学习
2022-03-04 19:20:07

我正在EDX 学习Analytics Edge课程。该课程在我使用 Python 时使用 R。

在线性回归中,为了改进模型,我们必须找出最显着的特征。

本课程使用 R 中的汇总函数来查看表示特征重要性和 p 值的点。sklearn 中不存在这样的东西。

在此处输入图像描述

所以我使用系数来查看最重要的特征。但我不确定我应该相信系数来选择最重要的特征(即使对于这个问题,它们是一致的)

那么sklearn中linearRegression的系数在确定特征的重要性方面是否可靠?p 值本身在检测显着特征方面是否可靠?

(我知道 statsmodels 并且不想使用)

2个回答

首先,把问题放在一边:显然,如果特征没有被归一化为 0 均值和单位方差,那么很容易构建系数意义很小的情况。一般来说,如果你取一个特征并将其乘以,例如,回归器会将系数除以αα

即使变量全部归一化,大系数也可能意义不大。假设有点相关的隐藏特征,并且是观察到的特征,它们是的略微嘈杂的版本,回归矩阵将不是很好定义,并且您可以获得的大幅系数(也许有相反的迹象)。通常精确地使用正则化来避免这种情况。xyzwxzw

也许sklearn.feature_selection.f_regression与您正在寻找的相似。它总结了每个单独特征的 f 值和 p 值。或者,对于任何回归方案,“黑盒”方法可以是为除之外的所有特征构建模型,并评估其性能(使用交叉验证)。然后,您可以根据性能对功能进行排名。x

特征重要性的定义有点技巧。在上述两种方案中,如果得到的“最重要”特征,并不一定意味着使用,它确实是下一个最重要的(也许它的信息是已经包含在前面的那些中)。xiix1,xi1

在我看来,在使用岭回归而不是简单的线性回归的情况下,您可以根据系数选择特征。我同意,如果任何两个特征高度相关,那么简单的线性回归方法将产生非常大的系数。但是,当你采用岭回归模型时,这个问题就会消失。

事实上,根据系数选择特征是相当直观的。如果我们稍微改变一个特征的值,响应值变化越多,特征就越重要。事实上,这个想法与排列特征重要性几乎相同,被广泛用作黑盒特征重要性分析方法。

例如,在下面的代码片段中,我举一个例子来展示回归模型中特征的系数值及其对应的排列特征重要性。从结果可以看出,特征系数与这些特征的排列特征重要性基本一致。因此,综上所述,使用岭回归模型的系数作为特征重要性的粗略近似是合理的。

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

最后,应该注意的是,上述两种方法都容易受到多重共线性问题的影响。因此,在这种情况下,我们需要先消除高度相关的特征,然后我们可以直接使用模型系数作为特征重要性。