使用LinearRegression进行特征选择()

时间:2015-12-10 13:42:32

标签: python machine-learning scikit-learn regression

我正在尝试使用scikit-learn库进行功能选择。 我的数据很简单。行是样本,列是功能。虽然原始的Class标签是X和Y,但我将它们更改为数字以进行线性回归,将X更改为0,将Y更改为1.

G1  G2  G3  ... Gn Class
1.0 4.0 5.0 ... 1.0 0
4.0 5.0 9.0 ... 1.0 0
9.0 6.0 3.0 ... 2.0 1
...

我使用了库sklearn.linear_model.LinearRegression(),并且执行得很好。现在我使用coef_值进行特征选择。在这种情况下,我有两个问题。

使用功能的coef_值是否正确?或者是否有一些其他更好的参数用于LinearRegression()中的特征选择?

另外,是否有某种规则来决定适当的阈值(例如,特征选择的最小值coef_)?

1 个答案:

答案 0 :(得分:4)

根据系数值简单决定显然是不合逻辑的。这是因为除非你的数据是规范化的系数值,否则不表示任何事情。

例如:假设其中一个特征范围为(0,1),其系数为0.5,而另一个范围为(0,10000),其系数为0.5。很明显,后期特征的重量更多是由于产生最终输出的范围更大。

因此,通常建议的是规范化功能。即$ x'= \ frac {x-mean(x)} {std(x)} $。然后根据系数值决定。

注意:要进行预测,请记住转换功能。

这可能并不总是有效,因为规范化可能会扭曲功能。还有其他启发式方法。你可以在其他地方阅读。

另一种方法是消除,逐个消除功能,看看它们有多重要。这可以通过在回归的情况下检查p值或仅仅是拟合误差(平方和)来完成。

一个建议:似乎你正在使用线性回归分类问题,这也是主要的错误,因为线性回归假设输出y是连续的,因为这里的y是0或1.你可能想要使用逻辑回归。