scikit中的功能选择 - 了解大量功能

时间:2017-12-19 06:45:10

标签: python-3.x machine-learning scikit-learn classification data-science

我是机器学习的初学者。我正在基于49个功能进行二进制分类。前7个功能是float64类型。接下来18个特性是多类型的,其余的是二进制类型,即0或1.我使用以下代码执行特征选择

model = ExtraTreesClassifier()
model.fit(x_new, y)
print(model.feature_importances_)

以上的输出是

[  1.20621145e-01   3.71627370e-02   1.82239903e-05   5.40071522e-03
   1.77431957e-02   8.40569119e-02   1.74562937e-01   5.00468692e-02
   7.60565780e-03   1.78975490e-01   4.30178009e-03   7.44005584e-03
   3.46208406e-02   1.67869557e-03   2.94863800e-02   1.97333741e-02
   2.53116233e-02   1.30663822e-02   1.14032351e-02   3.98503442e-02
   3.48701630e-02   1.93366039e-02   5.89310510e-03   3.17052801e-02
   1.47389909e-02   1.54041443e-02   4.94699885e-03   2.27428191e-03
   1.27218776e-03   7.39305898e-04   3.84357333e-03   1.59161363e-04
   1.31479740e-03   0.00000000e+00   5.24038196e-05   9.92543746e-05
   2.27356615e-04   0.00000000e+00   1.29338508e-05   4.98412036e-06
   2.97697346e-06   0.00000000e+00   0.00000000e+00   0.00000000e+00
   0.00000000e+00   1.49018368e-05   0.00000000e+00   0.00000000e+00
   0.00000000e+00]

由于它们都不重要,我尝试了18种多类型特征的子集,以下是输出

[ 0.06456545  0.01254671  0.32220959  0.00552464  0.02017919  0.07311639
  0.00716867  0.06964389  0.04797752  0.06608452  0.02915153  0.02044009
  0.05146265  0.05712569  0.09264365  0.01252251  0.01899865  0.02863864]

包括所有功能会降低分类中每个功能的贡献,但不能消除任何功能。我应该消除得分相对较低的特征吗?上述结果的推论是什么?

在Python 3中使用Scikit-Learn。

3 个答案:

答案 0 :(得分:2)

你可以使用sklearn.feature_selection.RFECV

model=ExtraTreesClassifier()
model=RFECV(model,cv=3)
model.fit(features_train,label_train)

这将通过交叉验证自动选择最佳功能,并在分类中找到它们的重要性。

该模型具有属性

n_features_:具有交叉验证的所选要素的数量。

support_:所选功能的掩码。根据索引给出一个True和False数组。考虑的是真的,被忽略的是假的

排名_:功能排名。所考虑的是给予等级1并且休息其他值。

参考:http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFECV.html#sklearn.feature_selection.RFECV

答案 1 :(得分:1)

你说“它们都不重要”,但你从特征重要性看到的分数不是p值。它基本上计算了给定特征在分割数据和规范化数据时的用处,因此所有特征重要性总和为1.

您应该比较每个要素的相对值。考虑使用SelectFromModel将功能选择作为管道的一部分。 http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html

答案 2 :(得分:1)

在sklearn中,feature_importances_也称为 gini重要性,其测量方法如下:对于基于树的模型中的给定特征,其重要性是样本到达树中该节点的概率。

值从0到1变化。值0表示模型的输出完全不依赖于特征,1表示模型的输出与特征直接关联。

对于要素选择,您可以使用名为SelectFromModel的this函数,您可以使用该函数指定阈值。将选择重要性值高于阈值的功能。

检查this anwser,了解有关如何计算要素重要性的更多详细信息。