web-dev-qa-db-ja.com

GridSearchCV(Random Forest Classifier Scikit)でBest Estimatorを取得する方法

GridSearch CVを実行して、scikitの分類子のパラメーターを最適化します。完了したら、どのパラメータが最良として選択されたかを知りたいです。

そうするたびにAttributeError: 'RandomForestClassifier' object has no attribute 'best_estimator_'を取得しますが、その理由はわかりません。これは documentation の正当な属性のようです。

from sklearn.grid_search import GridSearchCV

X = data[usable_columns]
y = data[target]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

rfc = RandomForestClassifier(n_jobs=-1,max_features= 'sqrt' ,n_estimators=50, oob_score = True) 

param_grid = {
    'n_estimators': [200, 700],
    'max_features': ['auto', 'sqrt', 'log2']
}

CV_rfc = GridSearchCV(estimator=rfc, param_grid=param_grid, cv= 5)

print '\n',CV_rfc.best_estimator_

利回り:

`AttributeError: 'GridSearchCV' object has no attribute 'best_estimator_'
34
sapo_cosmico

最適なパラメーターの組み合わせを取得するには、データを適合させる必要があります。

from sklearn.grid_search import GridSearchCV
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
# Build a classification task using 3 informative features
X, y = make_classification(n_samples=1000,
                           n_features=10,
                           n_informative=3,
                           n_redundant=0,
                           n_repeated=0,
                           n_classes=2,
                           random_state=0,
                           shuffle=False)


rfc = RandomForestClassifier(n_jobs=-1,max_features= 'sqrt' ,n_estimators=50, oob_score = True) 

param_grid = { 
    'n_estimators': [200, 700],
    'max_features': ['auto', 'sqrt', 'log2']
}

CV_rfc = GridSearchCV(estimator=rfc, param_grid=param_grid, cv= 5)
CV_rfc.fit(X, y)
print CV_rfc.best_params_
63
Ryan

明確にするためにもう1つポイントを追加します。

ドキュメントには次のように書かれています:

best_estimator_:推定器または辞書:

検索によって選択された推定量、つまり、除外されたデータで最高のスコア(または指定されている場合は最小の損失)を与えた推定量。

さまざまなパラメータでグリッド検索が呼び出されると、指定されたスコア関数に基づいて最高スコアを持つものが選択されます。最高の推定量は、最高のスコアをもたらしたパラメーターの情報を提供します。

したがって、これはデータをフィッティングした後にのみ呼び出すことができます。

1
rohithnama