Мини-проект: обучите модель и сделайте прогноз
В этой задаче проверяется не текст вашей программы, а качество прогнозов обученной модели. Формат похож на соревнования по машинному обучению: вы получаете обучающую выборку с ответами и тестовую выборку без ответов.
Скачайте три файла:
train.csv — обучающая выборка;
test.csv — заказы, для которых нужно предсказать время;
sample_submission.csv — образец файла, который нужно загрузить в ответ.
Признаки:
km — расстояние в километрах;
traffic_lights — число светофоров;
couriers — число доступных курьеров.
Целевая переменная minutes есть только в train.csv.
Модель
Обучите линейную регрессию:
prediction = w1 · km + w2 · traffic_lights + w3 · couriers + b
Для обучения используйте градиентный спуск и MSE. Готовые реализации линейной регрессии и готовые оптимизаторы из библиотек машинного обучения использовать не нужно: цель задания — самостоятельно собрать обучение модели из тех шагов, которые были разобраны в теории.
Что нужно сделать
- Прочитайте
train.csv.
- Подготовьте признаки. Так как они имеют разные масштабы, удобно стандартизировать их. Средние и стандартные отклонения вычисляйте только по train.
- Задайте начальные значения параметров модели.
- Обучите модель градиентным спуском:
- получайте прогнозы;
- вычисляйте промахи и MSE;
- вычисляйте градиенты по всем параметрам;
- обновляйте параметры против градиента;
- повторяйте, пока не получите достаточно хорошую модель.
- Самостоятельно выберите скорость обучения
lr и число шагов. При необходимости экспериментируйте и следите, уменьшается ли MSE на обучающей выборке.
- Прочитайте
test.csv. Если использовали стандартизацию, примените к test те же средние и стандартные отклонения, которые были найдены по train. Не пересчитывайте их по test.
- Не меняя уже обученные веса, получите прогноз для каждой строки
test.csv.
- Сохраните прогнозы в файл
submission.csv в том же формате, что и sample_submission.csv.
Как именно организовать программу — решаете вы. Можно использовать отдельные переменные w1, w2, w3, можно список весов, можно разбить решение на функции. Проверяющая система видит только итоговый файл с прогнозами.
Формат ответа
Загрузите CSV-файл ровно с двумя столбцами:
id,prediction
В нём должна быть одна строка для каждого id из test.csv. Порядок строк не важен.
Проверяющая система знает настоящие времена доставки для тестовой выборки и вычисляет:
MSE = среднее((prediction − minutes)²)
Решение засчитывается, если MSE ≤ 10.0.
Главная идея: train.csv используется для обучения параметров модели, а test.csv — только для применения уже обученной модели. Правильных ответов для test вы не видите.