web-dev-qa-db-ja.com

scikit予測にGridSearchCV出力を使用する方法は?

次のコードでは:

# Load dataset
iris = datasets.load_iris()
X, y = iris.data, iris.target

rf_feature_imp = RandomForestClassifier(100)
feat_selection = SelectFromModel(rf_feature_imp, threshold=0.5)

clf = RandomForestClassifier(5000)

model = Pipeline([
          ('fs', feat_selection), 
          ('clf', clf), 
        ])

 params = {
    'fs__threshold': [0.5, 0.3, 0.7],
    'fs__estimator__max_features': ['auto', 'sqrt', 'log2'],
    'clf__max_features': ['auto', 'sqrt', 'log2'],
 }

 gs = GridSearchCV(model, params, ...)
 gs.fit(X,y)

予測には何を使用する必要がありますか?

  • gs
  • gs.best_estimator_?または
  • gs.best_estimator_.named_steps['clf']

これら3つの違いは何ですか?

12
user308827

gs.predict(X_test)gs.best_estimator_.predict(X_test)と同等です。いずれかを使用すると、_X_test_がパイプライン全体に渡され、予測が返されます。

ただし、gs.best_estimator_.named_steps['clf'].predict()は、パイプラインの最後のフェーズにすぎません。これを使用するには、特徴選択ステップがすでに実行されている必要があります。これは、以前にgs.best_estimator_.named_steps['fs'].transform()を介してデータを実行したことがある場合にのみ機能します。

予測を生成するための3つの同等の方法を以下に示します。

gsを直接使用します。

_pred = gs.predict(X_test)
_

_best_estimator__を使用します。

_pred = gs.best_estimator_.predict(X_test)
_

パイプラインの各ステップを個別に呼び出します。

_X_test_fs = gs.best_estimator_.named_steps['fs'].transform(X_test)
pred = gs.best_estimator_.named_steps['clf'].predict(X_test_fs)
_
16
David Maust