Панов А.А, Шестаков А.В. Майнор по анализу данных 2016
<hr> Общая информация
Срок сдачи: 6 марта 2016, 23:59 <br> Штраф за опоздание: -0.5 за каждый день
При отправлении ДЗ на почту указывайте фамилию в названии файла, а тему письма оформляйте в следующем виде:<br> ** [Майнор ИАД 2016] {Фамилия} {Имя} ДЗ{Номер} **<br>
Сопровождайте ваш код изображеними, комментариями и выводами. <br> Иммейте ввиду, что на некоторые задачи нет единственного верного и полного ответа. Чем больше информации вы сможете извлечь, аргументированных выводов сформулировать, тем лучше.
Используйте данный Ipython Notebook при оформлении домашнего задания. <hr>
В SciPy более 80 видов непрерывных и более 12 дискретных распределений, более 70 статистических функций
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 точек. Посчитайте для каждого из них обчный набор статистик: среднее, минимум, максимум, дисперсию, кривизну и смещенность.
## Your code here
Задача 2. Найрисуйте функцию (cdf) и плотность (pdf) распределений. На графиках pdf отметьте среднее значение и медиану.
## Your code here
Задача 3. Выведите описательные статистики распределений с помощью scipy.stats.describe
.
## Your code here
Корреляции с помощью ивестных вам пакетов можно посчитать несколькими способами: pandas.DataFrame.corr и numpy.correlate, numpy.corrcoef и scipy.stats.pearsonr для корреляционного коэффициента Пирсона, scipy.stats.spearmanr для корреляционного коэффициента Спирмена.
Объясните разницу между коэффициентами корреляции Спирмена и Пирсона.
## Your explanation here
В данных из файла beauty.csv для каждого опрошенного имеется следующая информация: заработная плата за час работы, опыт работы, образование, внешняя привлекательность (в баллах от 1 до 5), бинарные признаки: пол, семейное положение, состояние здоровья (хорошее/плохое), членство в профсоюзе, цвет кожи (белый/чёрный), занятость в сфере обслуживания (да/нет).
Задание 1. Найдите 3 пары признаков с наибольшей корреляцией. Поясните на конктретных примерах, что означают полученные коэффициенты корреляции.
## Your code here
Задание 2. На семинаре мы рассмотрели различные распрелеления случайных величин (дискретные и непрерывные).
Изобразите гистограммы каждого из признаков.
Определите возможный закон распределения каждого из них и оцените его параметры. Если готовой функции в scipy.stats для распределения нет, то оцените эти параметры сами по методу максимального правдоподобия.
## Your code here
Пояснения по выполнению этого задания будут рассказаны на семинаре 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
и др.
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
.
# Список новостных заголовков
['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']
## Your code here
Задание 2. На переменной text
постройте конвертер из текстов в частотную матрицу с помощью метода CountVectorizer(analyzer='word', stop_words='english', lowercase=True)
, а затем используйте его на выборках train
и test
. В результате вы должны получить 2 матрицы: X_train
и X_test
.
## Your code here
Задание 3. По матрице X_train
найдите 50 самых частотных слов. Соответствия столбцов и слов можно понять по методу CountVectorizer.get_feature_names()
.
## Your code here
Задание 4. Обучите наивный байесовский классификатор MultinomialNB с параметром слгаживания alpha=1
на выборке train. Примените его к данным из тестовой выборке и оцените точность совпадения меток.
## Your code here
Задание 5. Обучите наивный байесовский классификатор MultinomialNB с параметром слгаживания alpha=0
на выборке train. Примените его к данным из тестовой выборки и оцените точность совпадения меток. Поменяются ли результаты? Объясните почему?
Учитывайте не только метки, но и вероятности, которые выдает классификатор
## Your code here