我是机器学习的初学者。我正在基于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。
答案 0 :(得分:2)
model=ExtraTreesClassifier()
model=RFECV(model,cv=3)
model.fit(features_train,label_train)
这将通过交叉验证自动选择最佳功能,并在分类中找到它们的重要性。
该模型具有属性
n_features_:具有交叉验证的所选要素的数量。
support_:所选功能的掩码。根据索引给出一个True和False数组。考虑的是真的,被忽略的是假的
排名_:功能排名。所考虑的是给予等级1并且休息其他值。
答案 1 :(得分:1)
你说“它们都不重要”,但你从特征重要性看到的分数不是p值。它基本上计算了给定特征在分割数据和规范化数据时的用处,因此所有特征重要性总和为1.
您应该比较每个要素的相对值。考虑使用SelectFromModel
将功能选择作为管道的一部分。 http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html
答案 2 :(得分:1)