使用 LinearRegression() 进行特征选择
Feature selection using LinearRegression()
我正在尝试使用 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_ 值进行特征选择。在这种情况下,我有 2 个问题。
使用特征的coef_值是否正确?或者在 LinearRegression() 中是否有其他更好的特征选择参数?
此外,是否有某种规则来决定合适的阈值(例如,用于特征选择的coef_的最小值)?
简单地根据系数值来决定显然是不合逻辑的。这是因为除非您的数据是系数的归一化值,否则不会指示任何内容。
例如:假设其中一个特征的范围为 (0,1),其系数为 0.5,而另一个特征的范围为 (0,10000),其系数为 0.5。显然,由于生成最终输出的范围更大,后期特征的权重要大得多。
所以,通常建议的是对特征进行归一化。即 $ x' = \frac{x-mean(x)}{std(x)} $。然后根据系数值决定。
注意:要进行预测记得变换特征。
这可能并不总是有效,因为规范化可能会扭曲特征。还有其他启发式方法。您可以在其他地方阅读它们。
另一种方法是通过淘汰,一个一个的淘汰特征,看看它们有多重要。这可以通过检查回归情况下的 p 值或简单的拟合误差(平方和)来完成。
一个建议:似乎您正在使用线性回归来解决分类问题,这在很大程度上也是错误的,因为线性回归假设输出 y 是连续的,而此处 y 是 0 或 1。您可能想改用逻辑回归.
我正在尝试使用 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_ 值进行特征选择。在这种情况下,我有 2 个问题。
使用特征的coef_值是否正确?或者在 LinearRegression() 中是否有其他更好的特征选择参数?
此外,是否有某种规则来决定合适的阈值(例如,用于特征选择的coef_的最小值)?
简单地根据系数值来决定显然是不合逻辑的。这是因为除非您的数据是系数的归一化值,否则不会指示任何内容。
例如:假设其中一个特征的范围为 (0,1),其系数为 0.5,而另一个特征的范围为 (0,10000),其系数为 0.5。显然,由于生成最终输出的范围更大,后期特征的权重要大得多。
所以,通常建议的是对特征进行归一化。即 $ x' = \frac{x-mean(x)}{std(x)} $。然后根据系数值决定。
注意:要进行预测记得变换特征。
这可能并不总是有效,因为规范化可能会扭曲特征。还有其他启发式方法。您可以在其他地方阅读它们。
另一种方法是通过淘汰,一个一个的淘汰特征,看看它们有多重要。这可以通过检查回归情况下的 p 值或简单的拟合误差(平方和)来完成。
一个建议:似乎您正在使用线性回归来解决分类问题,这在很大程度上也是错误的,因为线性回归假设输出 y 是连续的,而此处 y 是 0 或 1。您可能想改用逻辑回归.