以下のコードでは、best_estimator_
とbest_score_
の間の接続を理解しようとしています。私はそうのようなbest_estimator_
の結果を採点することによってbest_score_
に(少なくとも非常に近い近似値)を取得することができるはずだと思う:sklearnについてGridSearchCVのbest_score_とbest_estimator_
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import log_loss
classifier = GridSearchCV(LogisticRegression(penalty='l1'),
{'C':10**(np.linspace(1,6,num=11))},
scoring='neg_log_loss')
classifier.fit(X_train, y_train)
y_pred = classifier.best_estimator_.predict(X_train)
print(f'{log_loss(y_train,y_pred)}')
print(f'{classifier.best_score_}')
私は、次の出力を得ることが(数が異なる上であまり変化はありません実行):
7.841241697018637
-0.5470694752031108
私はbest_score_
クロスバリデーション反復の平均として計算されることを理解し、しかしこれは確かにも近似(不偏推定量でなければなりません)セット全体にメトリックを計算します? 。私はなぜ彼らが非常に異なっているのか分からないので、私は実装エラーを起こしたと仮定します。
自分でclassifier.best_score_
を計算するにはどうすればよいですか?
もちろん!ありがとう!スコアは今では '0.4930534590910885' ' -0.5471970784999165'ですが、それでもまだ10%オフですが、サンプルサイズと折り返し数によって影響を受けているようですが、 – Dan
@ダンはい、そうです。それでもスコアを正確に一致させるには、classifier.best_params_でLogisticRegressionオブジェクトをインスタンス化し、cross_val_score(logReg、X_train、y_train、scoring = 'neg_log_loss')の結果の平均を取ることができます。しかし、必ずrandom_stateを設定してください。 cross_val_scoreとGridSearchCVは、明示的に設定されていない場合、同じCV戦略を使用します。 –