2017-05-01 5 views
0

私は、20クラスと約90の機能を持つマルチクラスの分類問題を抱えています。 scikit-learn pythonパッケージ(ver 0.18.1)からRandomForestClassifierを使用しています。ここに私が見るものがあります:sklearn:ランダムなフォレストのスコアは、そのツリーで直接計算されたスコアとは異なる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クラシファイアには1つのツリーがあります! すべてのポインタが非常に役立ちます。

私はrf1とrf1.estimators_ [0]のfeature_importances_をプロットしました。これらは同じものです。これはまさに私が期待しているものです。しかし、得点はとても異なっています。

答えて

0

ちょっと分かりました。 DecisionTreeを出しますrf1.estimators_ [0]はクラスを0から19までとみなしますが、rf1クラシファイアは元の入力と同様にクラスを1から20までと見なします。 DecisionTreeクラシファイアの出力に1を加えると、期待どおりの出力が得られます。

関連する問題