Интерпретация sklearns 'GridSearchCV лучший результат - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы знать разницу между результатом, возвращаемым 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))

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

regressor.best_score_ - это среднее значение баллов r2 в пропущенных тестовых сгибах для лучшей комбинации параметров.

В вашем примере cv = 5, поэтому данные будут разбиты на поезд и тестовые сгибы 5 раз. Модель будет установлена ​​на поезд и набрана на тестах. Эти 5 результатов теста усредняются, чтобы получить оценку.

Вышеописанный процесс повторяется для всех комбинаций параметров. И лучший средний балл от него присваивается best_score_.

Вы можете посмотреть на мой другой ответ для полной работы GridSearchCV

После нахождения наилучших параметров модель обучается на полных данных.

r2_score(y_pred = best.predict(X), y_true = y)

находится на тех же данных, на которых обучается модель, поэтому в большинстве случаев она будет выше.

0 голосов
/ 08 мая 2018

На вопрос , связанный @Davide в комментариях, есть ответы, почему вы получаете R2 оценку - ваша модель работает лучше, чем постоянный прогноз. В то же время вы можете получить отрицательные значения в другой ситуации, если ваши модели там работают плохо.

причина разницы в значениях заключается в том, что regressor.best_score_ оценивается на конкретном сгибе из 5-кратного разделения, которое вы делаете, тогда как r2_score(y_pred = best.predict(X), y_true = y) оценивает ту же модель (regressor.best_estimator_), но на полной выборке (включая (5-1) -кратное подмножество, которое использовалось для обучения этого оценщика)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...