GridSearchCV
によって返されるスコアと以下のように計算されたR2
メトリックの違いを知りたいのですが。その他の場合、グリッド検索スコアが非常に否定的であり(cross_val_score
にも同じことが当てはまります)、それが何であるかを説明していただければ幸いです。
from sklearn import datasets
from sklearn.model_selection import (cross_val_score, GridSearchCV)
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import accuracy_score, r2_score
from sklearn import tree
diabetes = datasets.load_diabetes()
X = diabetes.data[:150]
y = diabetes.target[:150]
X = pd.DataFrame(X)
parameters = {'splitter':('best','random'),
'max_depth':np.arange(1,10),
'min_samples_split':np.arange(2,10),
'min_samples_leaf':np.arange(1,5)}
regressor = GridSearchCV(DecisionTreeRegressor(), parameters, scoring = 'r2', cv = 5)
regressor.fit(X, y)
print('Best score: ', regressor.best_score_)
best = regressor.best_estimator_
print('R2: ', r2_score(y_pred = best.predict(X), y_true = y))
質問 コメントで@Davideによってリンクされているので、正の_R2
_スコアが得られる理由がわかります-モデルのパフォーマンスは、一定の予測よりも優れています。同時に、他の状況では、モデルのパフォーマンスが悪い場合、負の値を取得する可能性があります。
値が異なる理由は、_regressor.best_score_
_が5分割の特定の折り畳みで評価されるのに対し、r2_score(y_pred = best.predict(X), y_true = y)
は同じモデルを評価するためです(_regressor.best_estimator_
_)ただし、完全なサンプル(その推定量のトレーニングに使用された(5-1)倍のサブセットを含む)
_regressor.best_score_
_は、最適なパラメーターの組み合わせの除外されたテストフォールドのr2スコアの平均です。
あなたの例では、cv = 5なので、データはトレインとテストフォールドに5回分割されます。モデルは電車に取り付けられ、テストで採点されます。これらの5つのテストスコアを平均してスコアを取得します。 ドキュメント を参照してください:
"best_score_:best_estimatorの平均相互検証スコア"
上記のプロセスは、すべてのパラメーターの組み合わせに対して繰り返されます。そして、そこからの最高の平均スコアが_best_score_
_に割り当てられます。
あなたは 私の他の答えで GridSearchCVの完全な動作を見ることができます
最適なパラメーターを見つけた後、モデルは完全なデータでトレーニングされます。
r2_score(y_pred = best.predict(X), y_true = y)
モデルがトレーニングされているのと同じデータ上にあるため、ほとんどの場合、より高くなります。