<hr> Общая информация
Срок сдачи: 15 марта 2017, 23:59 <br>
При отправлении ДЗ на почту hse.minor.dm+2@gmail.com
указывайте фамилию в названии файла, а тему письма оформляйте в следующем виде:<br>
** [ИАД-2] {Фамилия} {Имя} ДЗ{Номер} **<br>
Сопровождайте ваш код изображеними, комментариями и выводами. <br> Иммейте ввиду, что на некоторые задачи нет единственного верного и полного ответа. Чем больше информации вы сможете извлечь, аргументированных выводов сформулировать, тем лучше.
Используйте данный Ipython Notebook при оформлении домашнего задания. <hr>
В этом задании мы рассмотрим задачу прогнозирования количества взятых в аренду велосипедов.
Файл bike_sharing.csv содержит данные о 731 дне работы сервиса по аренде велосипедов. Про каждый день известны:
1. (0.25 балла) Откройте файл bike_sharing.csv, запишите в датафрейм df и выведите первые пять строк датафрейма.
2. (1 балл) Постройте график среднего числа арендованных байков (cnt) по каждому месяцу. Не забудьте подписать оси координат. Убедитесь, что в летние месяцы велосипеды в прокат берут чаще.
** 3. (0.5 балла)** Постройте диаграмму рассеяния (scatter plot) с осями cnt и atemp, где точки — это объекты. Какой логичный вывод можно сделать по этому графику?
4. (0.5 балла) Преобразуйте небинарные категориальные признаки с помощью one-hot кодирования. Сделать это можно с помощью функции pd.get_dummies, указав нужные столбцы в параметре columns. Сколько признаков получилось после кодирования? И какой категориальный признак породил больше всего бинарных?
5. (0.25 балла) Удалите столбцы instant, dteday, casual и registered. Предположите, почему мы удаляем эти признаки.
6. (0.5 балла) Далее нашей целевой переменной будет количество арендованных велосипедов (cnt). Поэтому запишите cnt в переменную df_ans и удалите из df. Затем в помощью функции train_test_split из sklearn.model_selection разделите выборку на обучающую и контрольную в отношении 7 к 3, создав переменные X_train, X_test, y_train, y_test.
Замечание 1: установите random_seed, чтобы генератор псевдослучайных чисел работал всегда одинаково.
Замечание 2: если в sklearn.model_selection нет функции train_test_split, обновите scikit-learn.
7. (1 балл) Обучите алгоритм пяти ближайших соседей с евклидовой метрикой и оцените MAE на контрольной выборке.
8. (0.5 балла) Постройте диаграмму рассеяния (scatter plot), по одной оси отметив настоящее число аренд велосипедов, а по другой — предсказанное алгоритмом. Дополнительно на этом графике постройте прямую $y = x$. Чему соотстветствует отклонение от этой прямой?
9. (1 балл) Отмасштабируйте признаки, чтобы они принимали значения на $[0, 1]$.
Это можно сделать собственноручно с помощью операций pandas.
Иначе — можно использовать MinMaxScaler из sklearn.preprocessing — класс с методами fit и transform. Для этого:
На выходе метода transform получится numpy-массив, который нужно будет превратить обратно в датафрейм.
10. (0.5 балла) Вновь обучите алгоритм пяти ближайших соседей с евклидовой метрикой и оцените MAE на контрольной выборке. Почему качество поменялось?
11. (1.25 балла) Используя класс KFold из sklearn.model_selection установите с помощью кросс-валидации на пяти фолдах, какой параметр weights лучше с точки зрения mean absolute error.
12. (2.5 балла) С помощью GridSearchCV из sklearn.model_selection на пяти фолдах выберите лучшее значение $k$ от 1 до 50. Постройте график MAE на кросс-валидации в зависимости от $k$.
Замечание: Передать нужную метрику качества для GridSearchCV можно через параметр scoring, но не всё так просто. Из метрики качества нужно сделать «scorer» c помощью функции sklearn.metrics.make_scorer, не забыв указать нужное значение greater_is_better.
13. (0.25 балла) Посчитайте качество итоговой модели на контрольной выборке.