sklearn:为什么随机森林中的得分包含一棵树(so)与直接在该树上计算的得分不同?

时间:2017-05-01 22:15:38

标签: scikit-learn random-forest

我有一个包含20个类和大约90个功能的多类分类问题。我正在使用scikit-learn python包中的RandomForestClassifier(版本0.18.1)。这就是我所看到的:

> rf1 = RandomForestClassifier(max_features=0.5, n_estimators=1)
> rf1.fit(X_train, y_train)
> print rf1.score(X_test, y_test), rf1.score(X_train, y_train)
0.27868852459 0.740046838407

> print rf1.estimators_[0].score(X_test, y_test), rf1.estimators_[0].score(X_train, y_train)
0.0300546448087 0.0140515222482

> rf1
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
        max_depth=None, max_features=0.5, max_leaf_nodes=None,
        min_impurity_split=1e-07, min_samples_leaf=1,
        min_samples_split=2, min_weight_fraction_leaf=0.0,
        n_estimators=1, n_jobs=1, oob_score=False, random_state=None,
        verbose=0, warm_start=False)

> rf1.estimators_
[DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
             max_features=0.5, max_leaf_nodes=None,
             min_impurity_split=1e-07, min_samples_leaf=1,
             min_samples_split=2, min_weight_fraction_leaf=0.0,
             presort=False, random_state=2134571240, splitter='best')]

这些分数如何不同?我的RF分类器中有一棵树! 任何指针都会非常有用。

我为rf1和rf1.estimators_ [0]绘制了feature_importances_,它们是相同的,这正是我所期望的。但分数是如此不同。

1 个答案:

答案 0 :(得分:0)

刚想通了。结果是DecisionTree rf1.estimators_ [0]认为类从0到19,而rf1分类器将类从1到20考虑在内,就像在原始输入中一样。如果我在DecisionTree分类器的输出中添加一个,则输出与预期的相同。