为什么(rf)clf feature_importance重视所有值都相同的特征?

时间:2019-03-27 06:00:25

标签: python machine-learning scikit-learn random-forest feature-selection

我正在比较scikit学习中的随机森林和CART的多分类。

我的两个功能(功能4和功能6)与分类无关,因为所有值都相同。 但是,RandomForestClassifier的feature_importances的输出如下:

  

功能排名:

     
      
  1. 功能3(0.437165)
  2.   
  3. 功能2(0.216415)
  4.   
  5. 功能6(0.102238)
  6.   
  7. 功能5(0.084897)
  8.   
  9. 功能1(0.064624)
  10.   
  11. 功能4(0.059332)
  12.   
  13. 功能0(0.035328)
  14.   

CART feature_importance输出:

  

功能排名:

     
      
  1. 功能3(0.954666)
  2.   
  3. 功能6(0.014117)
  4.   
  5. 功能0(0.011529)
  6.   
  7. 功能1(0.010586)
  8.   
  9. 功能2(0.006785)
  10.   
  11. 功能4(0.002204)
  12.   
  13. 功能5(0.000112)
  14.   

在每一行中,要素4具有相同的值。功能6也是一样。

这是代码

随机森林

importances = rfclf.feature_importances_
std = np.std([tree.feature_importances_ for tree in rfclf.estimators_],
             axis=0)
indices = np.argsort(importances)[::-1]

# Print the feature ranking
print("Feature ranking:")

for f in range(x.shape[1]):
    print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))

购物车

importances = clf.feature_importances_
std = np.std([tree.feature_importances_ for tree in rfclf.estimators_],
             axis=0)
indices = np.argsort(importances)[::-1]

# Print the feature ranking
print("Feature ranking:")

for f in range(x.shape[1]):
    print("%d. feature %d (%f)" % (f + 1, indices[f], importances[indices[f]]))

除了重要性,我会:

  
      
  1. 功能6(0.000000)
  2.   
  3. 功能4(0.000000)
  4.   

当我不使用这两个功能时,我的模型过拟合。

1 个答案:

答案 0 :(得分:0)

您需要为树的深度设置一个限制。我建议在min_samples_leaf = [0.001,0.1]上进行网格搜索-尝试在每片叶子的0.1%到10%之间。

任何形式的特征重要性计算都必须在健壮的模型上进行才能有意义。