Шестаков А.В. Майнор по анализу данных 2016
<hr> Общая информация
Срок сдачи: 20 мая 2016, 23:59 <br> Штраф за опоздание: -0.5 за каждый день
При отправлении ДЗ на почту указывайте фамилию в названии файла, а тему письма оформляйте в следующем виде:<br> ** [Майнор ИАД 2016] {Фамилия} {Имя} ДЗ{Номер} **<br>
Векторизуйте ваш код! Если в решениях будут присутствовать ненужные циклы - оценка за задачу будет равна 0!
Сопровождайте ваш код изображеними, комментариями и выводами. <br> Иммейте ввиду, что на некоторые задачи нет единственного верного и полного ответа. Чем больше информации вы сможете извлечь, аргументированных выводов сформулировать, тем лучше.
Используйте данный Ipython Notebook при оформлении домашнего задания. <hr>
Пусть на некоторых данных была построена линейная регрессия вида $\hat{y} = \beta_0 + \beta_1x_1$. Какой\какие из графиков ниже может соответствовать графику зависимости значений ошибки $(y - \hat{y})$ от значений признака $x_1$. Обоснуйте ваш ответ
## Your explanation here
Загрузите данные о лесных пожарах в некоторых областях парка Montesinho в Португалии.
Описание данных следующее:
Описание индексов FFMC, DMC, CD, ISI приводится здесь
Ваша задача - по данным признакам 1-12 предсказать признак 13, площадь области, которая подвергнется пожару.
Загрузите данные в Notebook. Постройте гистрограмму площади пожара area
. Что можно сказать о том, как распределены значения? Рассмотрите различные преобразования, например log(area+1)
или sqrt(area)
и выберите то, которое будет лучше использовать для предсказания. Ответ обоснуйте.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')
%matplotlib inline
df = pd.read_csv('forestfires.csv', index_col=None)
df['log_area'] = np.log(df.area.values+1)
df['log_area'].hist()
Разделите ваши данные случайным образом на обучающую и тестовую выборки в пропорции 70/30 соответственно.
Проверьте, что все признаки в обеих выборках распределены "примерно одинаково".
Можете использовать метод train_test_split
из sklearn
На выходе должны быть 2 DataFrame - data_train, data_test.
from sklearn.cross_validation import train_test_split
# Your code here
Выполните преобразование признаков, а именно:
area
выполнять не надо.month
и day
в числовое представление.X
и Y
? Если да - выполните его.На выходе вы должны получить матрицы X_train и X_test с преобразованными признаками, а так же векторы ответов y_train и y_test.
from sklearn.preprocessing import StandardScaler
from sklearn.feature_extraction import DictVectorizer
# Your code here
Обучите простую линейную регрессию LinearRegression
на обучающей выборке. Выберите такое подмножество признаков из X_train, чтобы избежать мультиколлинеарности.
# Your code here
Выведите полученные коэффициенты $\beta_i$ (в том числе коэффициент при свободном члене $\beta_0$, если вы его расчитывали)
# Your code here
Расчитайте предсказания для контролькой выборки.
# Your code here
Рассмотрим регуляризацию линейной регрессии - Lasso Regression
. С помощью K-fold
(K=5
) кросс-валидации оцените лучший коэффициент регуляризации $\lambda$ из множества $\{0.1, 0.2, 0.3, 0.5, 0.7, 1\}$.
Качество измеряется по средней абсолютной ошибке.
# Your code here
Рассмотрите данные с помощью pandas.describe() и pandas.head(). Выведите те признаки, которые на ваш взгляд имеет смысл использовать при построении модели. Обоснуйте ваш выбор.
## Your thoughts here
Оставьте выбранные вами признаки, все остальные - удалите из таблицы
## Your code here
Загрузите данные и преобразуйте признак Sex
из строкового в числовой. В нем только 2 возможных значения. Для этого можно использовать функцию DataFrame.replace() в pandas
или самое обычное присваивание на соответствующих строках. На выходе вы должны получить вектор столбец из $0$ и $1$.
## Your code here
Преобразуйте категориальный признак Embarked
с помощью DictVectorizer
или One-hot encoding
. Имеет ли смысл таким же образом кодировать признак Pclass
? . На выходе вы должны получить матрицу X_cat
.
## Your code here
Нормализуйте количественные признаки Age
и Fare
с помощью StandartScaler
или вручную. Вы должны получить матрицу X_real
.
## 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
## Your code here
Разделите ваши даннные на обучающую и контрольную выборку в пропорции 70/30 соответственно.
Обучите логистическую регрессию с параметром penalty='l2'
и C=1
.
Для контрольной и обучающей выборке:
## Your code here
С помощью K-fold
(K=5
) кросс-валидации оцените лучший коэффициент регуляризации $C$ из множества $\{0.1, 0.2, 0.3, 0.5, 0.7, 1\}$. Критерий качества - AUC.
## Your code here