Обучение, проверка и предсказание
Модель обучают ради ответов на новых данных: на письмах, которые придут завтра, на квартирах, которые ещё не продали. Правильных ответов для них пока нет, и проверить по ним модель нельзя. Поэтому качество модели проверяют заранее, на примерах с известной целью, которые модель не видела.
Пять шагов
Работа над моделью почти всегда идёт в одном порядке:
- Собрать таблицу примеров и разделить её на признаки
Xи цельy. - Отложить часть строк, обычно от пятой до четверти. Это тестовая выборка (test set), остальные строки — обучающая выборка (training set).
- Обучить модель только на обучающей выборке.
- Получить ответы модели на тестовой выборке и сравнить их с известной целью.
- Если качество устраивает, предсказывать цель для новых объектов.
Тестовые строки модель при обучении не видит. Для неё они такие же новые, как завтрашние письма, но правильные ответы для них известны. Поэтому оценка на них показывает, чего ждать от модели дальше.
fit и predict
В библиотеке scikit-learn у каждой модели, которая предсказывает цель, одни и те же два метода. Метод fit(X_train, y_train) обучает модель. Он подбирает параметры по строкам с известной целью и сохраняет их внутри модели. Метод predict(X_new) применяет сохранённые параметры к новым строкам и возвращает предсказанную цель.
Цель методу predict не нужна: её он и выдаёт. Сам predict ничего не выучивает, сколько бы раз его ни вызывали. Модель меняется только при новом вызове fit.
Частая ошибка
Качество проверяют на тех же строках, на которых модель училась. Вот крайний случай — модель, которая запоминает примеры:
memory = {30: 3.1, 45: 4.4, 60: 6.2, 80: 7.9}
def predict(area):
return memory.get(area, 0.0) # ✗
print(predict(45)) # 4.4
print(predict(50)) # 0.0На всех четырёх примерах такая модель не ошибается ни разу. Но для квартиры площадью 50 м², которой среди примеров нет, она отвечает 0.0.
Это переобучение (overfitting): модель выучила примеры вместо закономерности. Оценка на обучающих строках не отличит её от хорошей модели. Оценка на тестовой выборке отличит сразу.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.