feature_importances_在ExtraTreesClassifier中显示为NoneType:TypeError:'NoneType'对象不可迭代

时间:2014-01-26 07:37:37

标签: python-2.7 machine-learning scikit-learn nonetype

我正在尝试为给定的数据集选择重要的特征(或至少了解哪些特征解释了更多的变异性)。为此,我使用ExtraTreesClassifier和GradientBoostingRegressor - 然后使用: -

clf = ExtraTreesClassifier(n_estimators=10,max_features='auto',random_state=0) # stops after 10 estimation passes, right ?
clf.fit(x_train, y_train)
feature_importance=clf.feature_importances_  # does NOT work - returns NoneType for feature_importance

发布此我真的很感兴趣绘制它们(用于直观表示) - 或者甚至是初步的,只需查看重要性的相对顺序和相应的索引

# Both of these do not work as the feature_importance is of NoneType
feature_importance = 100.0 * (feature_importance / feature_importance.max())
indices = numpy.argsort(feature_importance)[::-1]

我发现令人费解的是 - 如果我使用GradientBoostingRegressor如下,我会得到feature_importance及其索引。我做错了什么?

#Works with GradientBoostingRegressor
params = {'n_estimators': 100, 'max_depth': 3, 'learning_rate': 0.1, 'loss': 'lad'}
clf = GradientBoostingRegressor(**params).fit(x_train, y_train)
clf.fit(x_train, y_train)
feature_importance=clf.feature_importances_

其他信息:我有12个独立变量(x_train)和一个标签var(y_train)),有多个值(比如4,5,7)和类型(x_train)是和类型(feature_importance )是

致谢:从这篇文章中借用了一些元素http://www.tonicebrian.com/2012/11/05/training-gradient-boosting-trees-with-python/

1 个答案:

答案 0 :(得分:3)

初始化ExtraTreeClassifier时,有一个选项compute_importances,默认为None。换句话说,您需要将ExtraTreeClassifier初始化为

clf = ExtraTreesClassifier(n_estimators=10,max_features='auto',random_state=0,compute_importances=True)

以便计算特征重要性。

对于GradientBoostedRegressor,没有这样的选项,并且将始终计算特征重要性。