我正在比较scikit学习中的随机森林和CART的多分类。
我的两个功能(功能4和功能6)与分类无关,因为所有值都相同。 但是,RandomForestClassifier的feature_importances的输出如下:
功能排名:
- 功能3(0.437165)
- 功能2(0.216415)
- 功能6(0.102238)
- 功能5(0.084897)
- 功能1(0.064624)
- 功能4(0.059332)
- 功能0(0.035328)
CART feature_importance输出:
功能排名:
- 功能3(0.954666)
- 功能6(0.014117)
- 功能0(0.011529)
- 功能1(0.010586)
- 功能2(0.006785)
- 功能4(0.002204)
- 功能5(0.000112)
在每一行中,要素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]]))
除了重要性,我会:
- 功能6(0.000000)
- 功能4(0.000000)
当我不使用这两个功能时,我的模型过拟合。
答案 0 :(得分:0)
您需要为树的深度设置一个限制。我建议在min_samples_leaf = [0.001,0.1]上进行网格搜索-尝试在每片叶子的0.1%到10%之间。
任何形式的特征重要性计算都必须在健壮的模型上进行才能有意义。