2017-05-01 7 views
0

필자는 20 개의 클래스와 약 90 개의 기능을 가진 다중 클래스 분류 문제가 있습니다. scikit-learn python 패키지 (ver 0.18.1)에서 RandomForestClassifier를 사용하고 있습니다. 내가 보는 것은 다음과 같습니다.sklearn : 왜 그 나무에서 직접 계산 된 점수와 다른 하나의 나무 (즉)로 구성된 임의의 숲에 대한 점수입니까?

> 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_를 그렸고, 그것들은 동일합니다. 이것은 정확히 제가 예상 한 것입니다. 그러나 점수는 매우 다릅니다.

답변

0

그냥 알아 냈습니다. DecisionTree를 만듭니다. rf1.estimators_ [0]은 클래스를 0에서 19까지 고려하지만 rf1 분류자는 원래 입력에서와 같이 클래스를 1에서 20까지 고려합니다. DecisionTree 분류 자의 출력에 하나를 더하면 출력은 예상대로 동일합니다.