我正在尝试使用scikit-learn库进行特征选择。我的数据很简单。行是样本,列是特征。虽然原始类别标签是X和Y,但我为了线性回归将它们转换为数值,X变为0,Y变为1。
G1 G2 G3 ... Gn Class1.0 4.0 5.0 ... 1.0 04.0 5.0 9.0 ... 1.0 09.0 6.0 3.0 ... 2.0 1...
我使用了sklearn.linear_model.LinearRegression()库,效果很好。现在我正在使用coef_值进行特征选择。在这种情况下,我有两个问题。
使用特征的coef_值是否正确?还是在LinearRegression()中还有其他更好的参数用于特征选择?
此外,是否有某种规则来决定适当的阈值(例如,特征选择的coef_的最小值)?
回答:
仅仅根据系数值来决定是完全不合逻辑的。这是因为除非你的数据是标准化的,否则系数值并不能说明任何问题。
例如:假设一个特征的范围在(0,1)之间,其系数为0.5,而另一个特征的范围在(0,10000)之间,其系数也是0.5。显然,后一个特征由于范围更大,在生成最终输出时的权重更大。
因此,通常建议对特征进行标准化。即$x’ = \frac{x-mean(x)}{std(x)}$,然后根据系数值来决定。
注意:在进行预测时,记得要对特征进行转换。
这种方法可能并不总是有效,因为标准化可能会扭曲特征。还有其他启发式方法。你可以在其他地方阅读这些方法。
另一种方法是通过消除法,一次消除一个特征,看看它们有多重要。这可以通过检查回归中的p值或简单的拟合误差(平方和)来完成。
建议:看起来你正在使用线性回归来解决分类问题,这在原则上是错误的,因为线性回归假设输出y是连续的,而这里y是0或1。你可能应该使用逻辑回归来代替。