次のコードでは:
# 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つの違いは何ですか?
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)
_