【发布时间】:2016-03-16 04:19:27
【问题描述】:
我正在尝试使用 scikit-learn 库进行特征选择。 我的数据很简单。行是样本,列是特征。虽然原始的类标签是 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_ 的最小值)?
【问题讨论】:
-
你可能想谷歌
lasso:) -
@cel 据我所知,lasso 是使用 L1 惩罚的模型。但是,虽然我使用了 lasso,但在确定合适的阈值时也会出现同样的问题。我可能会选择 Top-N 排名特征,但我想找到一些边界线(某个值)进行决策。
-
L1 惩罚的优点是,它更喜欢 0 值系数。它通过将不重要特征的系数设置为 0 来为您执行特征选择。您只需将正则化参数设置得足够高,直到您对特征数量与准确性的权衡感到满意。那么你将不需要任何阈值,因为系数已经是 0。
-
@Robin Spiess 谢谢你的建议。事实上,我之前使用过 LassoRegression()。但是,由于数据集中的特征数量很大(约50,000),仍然有很多特征coef_>0,有时甚至会出现“收敛警告”,所以我想找到一个更严格的阈值。
-
我不知道任何正式的阈值规则。我要做的是尝试多个阈值并使用生成的功能集进行交叉验证。基本上:将所有 feature_coeffs thresh 设置为 0,然后仅使用在数据子集上仍然具有非零系数的特征重新训练模型并测试结果对其余数据进行建模。调整阈值,直到您对结果满意为止。
标签: python machine-learning scikit-learn regression