Как правильно выбрать лучшую модель в GridSearchCV - и склеарн, и карет делают это неправильно - PullRequest
0 голосов
/ 31 октября 2019

Рассмотрим 3 набора данных train / val / test. Sklearns GridSearchCV по умолчанию выбирает лучшую модель с наивысшей оценкой перекрестной проверки. В реальных условиях, когда прогнозы должны быть точными, это ужасный подход к выбору лучшей модели. Причина в том, что это то, как это должно использоваться:

- Набор обучающих элементов для модели, чтобы узнать набор данных

- Набор допустимых значений для проверки того, что модель изучила в наборе поездов иобновите параметры / гиперпараметры, чтобы максимизировать балл валидации.

- Набор тестов - для проверки ваших данных на невидимых данных.

-Наконец использовать модель в режиме реального времени и ЗАПИСАТЬ результаты, чтобы убедиться, что результаты достаточно хороши для принятия решений. Невероятно глупо импульсивно использовать вашу модель в производстве (если решения должны быть критическими), основываясь только на выборе модели с наивысшим баллом проверки. Я нахожу поиск по сетке, чтобы выбрать модели, которые до боли подходят и предсказывают невидимые данные хуже, чем параметры по умолчанию.

Мои подходы:

-Вручную обучите модели и посмотрите на результатыдля каждой модели (в некотором роде, но не очень эффективно). Это очень ручной и трудоемкий процесс, но я получаю значительно лучшие результаты, чем поиск по сетке. Я хочу, чтобы это было полностью автоматизировано.

- Постройте кривую проверки для каждого гиперпараметра, который я хочу выбрать, а затем выберите гиперпараметр, который показывает наименьшую разницу между набором train и val при максимизации обоих (т.е. train = 98%, val = 97%, test = 70% - это действительно плохо, но train = 70%, val = 70% и test = 69% - это здорово).

Как я уже сказал, я хочу лучшего (автоматизированный) метод выбора лучшей модели.

Какой ответ я ищу:

Я хочу максимизировать оценку в наборе поездов и проверок, сохраняя при этом наименьшее расстояние до оценки набора тестов. Рассмотрим следующий пример из алгоритма поиска по сетке: Есть две модели:

Model A: train score = 99%, val score = 98%, test set = 80%

Model B: train score = 80%, val score = 79%, test set = 78%

Модель B - гораздо более надежная модель, и я бы выбрал модель B вместо модели A в любое время. Это меньше наряд, и прогнозы последовательны. Мы знаем, чего ожидать. Тем не менее, при поиске по сетке будет выбрана модель A, так как оценка val выше. Я считаю, что это общая проблема, и я не нашел никакого решения в Интернете. Люди, как правило, настолько сосредоточены на том, что они изучают в школе, и на самом деле не думают о последствиях выбора модели наряда. Я вижу избыточные посты о том, как использовать пакеты sklearn и carets gridsearch и чтобы они выбирали модель для вас, но не о том, как на самом деле выбрать лучшую модель.

Мой подход до сих пор был очень ручным. Я хочу автоматизированный способ сделать это.

В настоящее время я делаю следующее:

gs = GridSearchCV(model, params, cv=3).fit(X_train, y_train) # X_train and y_train consists of validation sets too if you do it this way, since GridSearchCV already creates a cv set.
final_model = gs.best_estimator_
train_predictions = final_model.predict(X_train)
val_predictions = final_model.predict(X_val)
test_predictions = final_model.predict(X_test)

print('Train Score:', accuracy_score(train_predictions, y_train)) # .99
print('Val Score:', accuracy_score(val_predictions, y_val)) # .98
print('Test Score:', accuracy_score(test_predictions, y_test)) # .8

Если я увижу что-то подобное выше, я исключу эту модель и попробую разные гиперпараметры, пока яполучить последовательные результаты. Подбирая вручную разные модели и просматривая все 3 из этих результатов, кривые валидации и т. Д., Я могу решить, какая модель лучше. Я не хочу делать это вручную. Я хочу, чтобы этот процесс был автоматизирован. Алгоритм поиска по сетке каждый раз возвращает модели наложения. Я с нетерпением жду некоторых ответов.

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