Домашняя работа №4

Шестаков А.В. Майнор по анализу данных 2016

<hr> Общая информация

Срок сдачи: 20 мая 2016, 23:59 <br> Штраф за опоздание: -0.5 за каждый день

При отправлении ДЗ на почту указывайте фамилию в названии файла, а тему письма оформляйте в следующем виде:<br> [Майнор ИАД 2016] {Фамилия} {Имя} ДЗ{Номер} <br>

Векторизуйте ваш код! Если в решениях будут присутствовать ненужные циклы - оценка за задачу будет равна 0!

Сопровождайте ваш код изображеними, комментариями и выводами. <br> Иммейте ввиду, что на некоторые задачи нет единственного верного и полного ответа. Чем больше информации вы сможете извлечь, аргументированных выводов сформулировать, тем лучше.

Используйте данный Ipython Notebook при оформлении домашнего задания.

<hr>

Линейная регрессия

Задача 1 (1 балл)

Пусть на некоторых данных была построена линейная регрессия вида $\hat{y} = \beta_0 + \beta_1x_1$. Какой\какие из графиков ниже может соответствовать графику зависимости значений ошибки $(y - \hat{y})$ от значений признака $x_1$. Обоснуйте ваш ответ

In [ ]:
## Your explanation here

Задача 2.1 (1 балл)

Загрузите данные о лесных пожарах в некоторых областях парка Montesinho в Португалии.

Описание данных следующее:

  1. X - x-axis spatial coordinate within the Montesinho park map: 1 to 9
  2. Y - y-axis spatial coordinate within the Montesinho park map: 2 to 9
  3. month - month of the year: 'jan' to 'dec'
  4. day - day of the week: 'mon' to 'sun'
  5. FFMC - FFMC index from the FWI system: 18.7 to 96.20
  6. DMC - DMC index from the FWI system: 1.1 to 291.3
  7. DC - DC index from the FWI system: 7.9 to 860.6
  8. ISI - ISI index from the FWI system: 0.0 to 56.10
  9. temp - temperature in Celsius degrees: 2.2 to 33.30
  10. RH - relative humidity in %: 15.0 to 100
  11. wind - wind speed in km/h: 0.40 to 9.40
  12. rain - outside rain in mm/m2 : 0.0 to 6.4
  13. area - the burned area of the forest (in ha): 0.00 to 1090.84

Описание индексов FFMC, DMC, CD, ISI приводится здесь

Ваша задача - по данным признакам 1-12 предсказать признак 13, площадь области, которая подвергнется пожару.

Загрузите данные в Notebook. Постройте гистрограмму площади пожара area. Что можно сказать о том, как распределены значения? Рассмотрите различные преобразования, например log(area+1) или sqrt(area) и выберите то, которое будет лучше использовать для предсказания. Ответ обоснуйте.

In [ ]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.style.use('ggplot')

%matplotlib inline
In [ ]:
df = pd.read_csv('forestfires.csv', index_col=None)
In [ ]:
df['log_area'] = np.log(df.area.values+1)
In [ ]:
df['log_area'].hist()

Задача 2.2 (0.5 балла)

Разделите ваши данные случайным образом на обучающую и тестовую выборки в пропорции 70/30 соответственно.
Проверьте, что все признаки в обеих выборках распределены "примерно одинаково".
Можете использовать метод train_test_split из sklearn

На выходе должны быть 2 DataFrame - data_train, data_test.

In [ ]:
from sklearn.cross_validation import train_test_split
In [ ]:
# Your code here

Задача 2.3 (1.5 балла)

Выполните преобразование признаков, а именно:

  • Нормализацию вещественных признаков с помощью z-score (x - x.mean())/x.std(). Нормализацию зависимой переменной area выполнять не надо.
  • Преобразование номинальных признаков month и day в числовое представление.
  • Имеет ли смысл преобразование для признаков X и Y? Если да - выполните его.

На выходе вы должны получить матрицы X_train и X_test с преобразованными признаками, а так же векторы ответов y_train и y_test.

In [ ]:
from sklearn.preprocessing import StandardScaler
from sklearn.feature_extraction import DictVectorizer
In [ ]:
# Your code here

Задача 2.4 (1 балл)

Обучите простую линейную регрессию LinearRegression на обучающей выборке. Выберите такое подмножество признаков из X_train, чтобы избежать мультиколлинеарности.

In [ ]:
# Your code here

Выведите полученные коэффициенты $\beta_i$ (в том числе коэффициент при свободном члене $\beta_0$, если вы его расчитывали)

In [ ]:
# Your code here

Расчитайте предсказания для контролькой выборки.

  • Найдите среднюю абсолютную ошибку модели на контрольной выборке
  • Постройте график зависимости ошибок $|(\text{area}) - (\text{predicted_area})|$ и значений признака $\text{area}$, где $\text{area}$ и $\text{predicted_area}$ - значения в исходной шкале, а не преобзованной после задания 2.1
  • Какие значения модель предсказывает лучше?
In [ ]:
# Your code here

Задача 2.5 (1 балл)

Рассмотрим регуляризацию линейной регрессии - Lasso Regression. С помощью K-fold (K=5) кросс-валидации оцените лучший коэффициент регуляризации $\lambda$ из множества $\{0.1, 0.2, 0.3, 0.5, 0.7, 1\}$.

Качество измеряется по средней абсолютной ошибке.

In [ ]:
# Your code here

Классификация: логистическая регрессия

Задание 3.1 (0.5 балла)

Рассмотрим данные выживаемости пассажиров Титаника!

Это довольно-таки изученные набор данных. Подробнее про него можно почитать вот тут.

Ваша задача - построить модель, которая бы предсказывала, кто выжил во время крушения коробля. Столбец с целевой переменной называется Survived.

Рассмотрите данные с помощью pandas.describe() и pandas.head(). Выведите те признаки, которые на ваш взгляд имеет смысл использовать при построении модели. Обоснуйте ваш выбор.

In [ ]:
## Your thoughts here

Оставьте выбранные вами признаки, все остальные - удалите из таблицы

In [ ]:
## Your code here

Задание 3.2 (1.5 балла)

Загрузите данные и преобразуйте признак Sex из строкового в числовой. В нем только 2 возможных значения. Для этого можно использовать функцию DataFrame.replace() в pandas или самое обычное присваивание на соответствующих строках. На выходе вы должны получить вектор столбец из $0$ и $1$.

In [ ]:
## Your code here

Преобразуйте категориальный признак Embarked с помощью DictVectorizer или One-hot encoding. Имеет ли смысл таким же образом кодировать признак Pclass? . На выходе вы должны получить матрицу X_cat.

In [ ]:
## Your code here

Нормализуйте количественные признаки Age и Fare с помощью StandartScaler или вручную. Вы должны получить матрицу X_real.

In [ ]:
## Your code here

Матрица X_cat будет sparse-матрицой (разреженной). Преобразуте её в полную матрицу с помощью команд X_cat = X_cat.toarray() или X_cat = X_cat.todence()

Используйте функцию np.concatinate(..) или np.c[..] чтобы сцепить матрицы X_binary, X_cat и X_real

В результате вы должны получить матрицу с преобразованными призанками X и вектор ответов y

In [ ]:
## Your code here

Задание 3.3 (1 балл)

Разделите ваши даннные на обучающую и контрольную выборку в пропорции 70/30 соответственно.

Обучите логистическую регрессию с параметром penalty='l2' и C=1.

Для контрольной и обучающей выборке:

  • Посчитайте матрицу сопряженности
  • Посчитайте меры accuracy, precision, recall и f1_score
  • Постройте ROC-кривые и посчитайте AUC
In [ ]:
## Your code here

Задание 3.4 (1 балл)

С помощью K-fold (K=5) кросс-валидации оцените лучший коэффициент регуляризации $C$ из множества $\{0.1, 0.2, 0.3, 0.5, 0.7, 1\}$. Критерий качества - AUC.

In [ ]:
## Your code here