Дата выдачи: 31.05.2016
Срок сдачи: 19.06.2016 09:00MSK
В рамках курса "Интеллектуальный анализ данных" помимо выполнения контрольных и практических заданий вам также нужно выполнить проект. За каждый модуль ставится отдельная оценка. В этом модуле вы продолжите работу с данными, которую начали в прошлом модуле, построив модели для предсказания.
Пустые ячейки оставлены там, где нужно написать код либо ответить на вопросы.
Каждая из задач имеет определенную «стоимость» (указана в скобках около задачи). Максимально допустимая оценка за работу — 10 баллов. Помимо кода вам также требуется написать развернутые ответы на вопросы.
Сдавать задание после указанного срока сдачи нельзя. При выставлении неполного балла за задание в связи с наличием ошибок на усмотрение проверяющего предусмотрена возможность исправить задание на указанных в ответном письме условиях.
Задание выполняется САМОСТОЯТЕЛЬНО. «Похожие» решения считаются плагиатом и все задействованные студенты (в том числе те, у кого списали) не могут получить за него больше 0 баллов. Если вы нашли решение какого-то из заданий в открытом источнике, необходимо прислать ссылку на этот источник (скорее всего вы будете не единственным, кто это нашел, поэтому чтобы исключить подозрение в плагиате, необходима ссылка на источник).
Если вы будете решать задание на виртуальной машине, учтите, что его могут видеть все. К тому же недоступность виртуальной машины не является уважительной причиной для продления дедлайна.
Обратите внимание, что на устном зачете в конце семестра некотоые вопросы могут быть связаны с проектом.
В данном проекте вам будет предложено рассмотреть некоторые интересные закономерности в данных. Если вы обнаружите что-то интересное (например, в последнем пункте), либо у вас есть идеи как можно работать с данным датасетом — присылайте, это будет поощряться дополнительными баллами. Кроме того, вы можете выступить со своим личным исследованием на семинаре, это также не останется незамеченным.
Для сдачи задания переименуйте получившийся файл *.ipynb в соответствии со следующим форматом: Username_(group)_Project.ipynb, где Username — ваша фамилия на латинице, group — название группы (например, Kozlova_IAD-11_Project.ipynb). Далее отправьте этот файл на используемую в Вашей группе почту курса (hse.minor.dm@gmail.com) c темой письма [ИАД-NN] - Проект - Фамилия Имя Отчество.
Если вы не помните, с каким именно датасетом работали, то можете воспользоваться функцией get_dataset_name, на вход ей передав ваш адрес электронной почты.
def get_dataset_name(email):
return 'student-mat.csv' if sum(ord(c) for c in email) % 2 else 'student-por.csv'
Выполните код ниже, передав на вход строку с адресом электронной почты:
get_dataset_name('')
Датасеты имеют следующий набор признаков:
Признаки ниже связаны с курсом (математика/португальский)
import numpy as np
import pandas as pd
import scipy as sp
import pylab as plt
%matplotlib inline
Для начала загрузите данные. Обратите внимание, чтобы данные были загружены верно (был указан верный разделитель, а так же корректно отображались названия столбцов). Чтобы это проверить, а также посмотреть, что представляют из себя данные, можно вывести первые несколько строк загруженного датасета на экран.
Разделите признаки и целевую зависимость в две отдельные переменные X и y.
Как можно видеть (и как показали эксперименты ранее) в данных есть числовые признаки (например, age), а так же категориальные (guardian). Для начала поработает только с числовыми признаками.
Создайте две новых матрицы с признаками: в первой будут только числовые признаки, во второй — все остальные. Для этого удобно воспользоваться методом датафрейма select_dtypes.
Теперь будем строить модели для предсказания, используя пока только числовые признаки. Вам нужно будет рассмотреть следующие модели:
Для следующих моделей вам нужно подобрать оптимальные гиперпараметры с помощью 5-fold кросс-валидации:
Вы можете перебрать несколько (3-5) значений соответствующего параметра. Скорее всего вам удобно будет воспользоваться:
классом KFold чтобы создать объект для кросс-валидации
классом GridSearchCV имеющим параметры:
после создания объекта вам нужно вызвать метод fit, после чего у обученного объекта посмотреть поле best_params_, где будут сохранены оптимальные в данном случае параметры. Пример использования.
(4 балла) Подберите оптимальные значения гиперпараметров для указанных выше моделей.
(2 балла) Теперь измерьте качество на кросс-валидации для каждой модели с оптимальными параметрами. Для этого удобно воспользоваться функцией cross_val_score, имеющую параметры, аналогичные GridSearchCV.
(1 балл) Вернемся к отложенной матрице категориальных признаков. Так как алгоритмы не умеют работать со строковыми данными, преобразуйте их с помощью функции get_dummies в числовую матрицу, где значение каждого признака будет закодировано как бинарное. Сколько признаков теперь получилось?
Объедините две матрицы: с числовыми признаками и закодированными категориальными в полную матрицу признаков. Для этого удобно воспользоваться функцией concat, указав первым аргументов массив датафреймов, а также axis=1.
(1 балл) Обучите модели с оптимальными параметрами из предыдущего пункта и измерьте качество на полной матрице признаков с помощью функции cross_val_score.
(2 балла) Ответьте на следующие вопросы:
(1 дополнительный балл) Обучите случайный лес на полной матрице признаков и найдите топ3 наиболее важных признаков. Можно ли дать интерпретацию почему эти признаки оказались наиболее информативными в рамках данной задачи?