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

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

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

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

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

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

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

<hr>

1. Теория веротяностей. Распределения

В SciPy более 80 видов непрерывных и более 12 дискретных распределений, более 70 статистических функций

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

%matplotlib inline

Задача 1. Сгенерируйте три распределения: гауссовское с мат. ожиданием 1 и дисперсией 4, хи-квадрат с $k = 3$ и дискртеное пуассоновское с $\lambda = 10$.

При генерации используйте 500 точек. Посчитайте для каждого из них обчный набор статистик: среднее, минимум, максимум, дисперсию, кривизну и смещенность.

In [ ]:
## Your code here

Задача 2. Найрисуйте функцию (cdf) и плотность (pdf) распределений. На графиках pdf отметьте среднее значение и медиану.

In [ ]:
## Your code here

Задача 3. Выведите описательные статистики распределений с помощью scipy.stats.describe.

In [ ]:
## Your code here

2. Теория вероятностей. Корреляция и метод максимального правдоподобия

Корреляции с помощью ивестных вам пакетов можно посчитать несколькими способами: pandas.DataFrame.corr и numpy.correlate, numpy.corrcoef и scipy.stats.pearsonr для корреляционного коэффициента Пирсона, scipy.stats.spearmanr для корреляционного коэффициента Спирмена.

Объясните разницу между коэффициентами корреляции Спирмена и Пирсона.

In [ ]:
## Your explanation here

В данных из файла beauty.csv для каждого опрошенного имеется следующая информация: заработная плата за час работы, опыт работы, образование, внешняя привлекательность (в баллах от 1 до 5), бинарные признаки: пол, семейное положение, состояние здоровья (хорошее/плохое), членство в профсоюзе, цвет кожи (белый/чёрный), занятость в сфере обслуживания (да/нет).

Задание 1. Найдите 3 пары признаков с наибольшей корреляцией. Поясните на конктретных примерах, что означают полученные коэффициенты корреляции.

In [ ]:
## Your code here

Задание 2. На семинаре мы рассмотрели различные распрелеления случайных величин (дискретные и непрерывные).

Изобразите гистограммы каждого из признаков.
Определите возможный закон распределения каждого из них и оцените его параметры. Если готовой функции в scipy.stats для распределения нет, то оцените эти параметры сами по методу максимального правдоподобия.

In [ ]:
## Your code here

3. Метод наивного Байеса

Пояснения по выполнению этого задания будут рассказаны на семинаре 1 марта

Обучение методом наивного Байеса основывается на достаточно сильном предположении, что все признаки попарно независимы. По формуле Байеса $$P(y|x_1,\dots,x_n)=\frac{P(y)P(x_1,\dots,x_n|y)}{P(x_1,\dots,x_n)}.$$ В предположении, что признаки независимы получаем, что $$P(y|x_1,\dots,x_n)=\frac{P(y)\prod_{i=1}^n P(x_i|y)}{P(x_1,\dots,x_n)}$$ Т.к. $$P(x_1,\dots,x_n)$$ задается условиями задачи, принцип максимального правдоподобия для наивного Байеса запишется следующим образом: $$\hat y = \arg\max_y P(y)\prod_{i=1}^n P(x_i|y).$$

Библиотека sklearn поддерживает несколько реализаций наивного Байеса: sklearn.naive_bayes.GaussianNB, sklearn.naive_bayes.MultinomialNB и др.

In [ ]:
from sklearn.cross_validation import train_test_split
from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer

Задание 1. Выберите 2 категории новостных сообщений из 20newsgroups. Случайным образом, в пропорции 70/30, разделите наборы текстов на обучающую и контрольную выборки. В результате выполнения данного задания у вас должно получится 5 переменных: text_all, text_train, text_test, y_train, y_test.

In [ ]:
# Список новостных заголовков
['alt.atheism',
 'comp.graphics',
 'comp.os.ms-windows.misc',
 'comp.sys.ibm.pc.hardware',
 'comp.sys.mac.hardware',
 'comp.windows.x',
 'misc.forsale',
 'rec.autos',
 'rec.motorcycles',
 'rec.sport.baseball',
 'rec.sport.hockey',
 'sci.crypt',
 'sci.electronics',
 'sci.med',
 'sci.space',
 'soc.religion.christian',
 'talk.politics.guns',
 'talk.politics.mideast',
 'talk.politics.misc',
 'talk.religion.misc']
In [ ]:
## Your code here

Задание 2. На переменной text постройте конвертер из текстов в частотную матрицу с помощью метода CountVectorizer(analyzer='word', stop_words='english', lowercase=True), а затем используйте его на выборках train и test. В результате вы должны получить 2 матрицы: X_train и X_test.

In [ ]:
## Your code here

Задание 3. По матрице X_train найдите 50 самых частотных слов. Соответствия столбцов и слов можно понять по методу CountVectorizer.get_feature_names().

In [ ]:
## Your code here

Задание 4. Обучите наивный байесовский классификатор MultinomialNB с параметром слгаживания alpha=1 на выборке train. Примените его к данным из тестовой выборке и оцените точность совпадения меток.

In [ ]:
## Your code here

Задание 5. Обучите наивный байесовский классификатор MultinomialNB с параметром слгаживания alpha=0 на выборке train. Примените его к данным из тестовой выборки и оцените точность совпадения меток. Поменяются ли результаты? Объясните почему?

Учитывайте не только метки, но и вероятности, которые выдает классификатор

In [ ]:
## Your code here