{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Домашняя работа №3\n", "Панов А.А, Шестаков А.В. Майнор по анализу данных 2016" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Общая информация**\n", "\n", "**Срок сдачи:** 6 марта 2016, 23:59 \n", "**Штраф за опоздание:** -0.5 за каждый день\n", "\n", "При отправлении ДЗ на почту указывайте фамилию в названии файла, а тему письма оформляйте в следующем виде:\n", "** [Майнор ИАД 2016] *{Фамилия}* *{Имя}* ДЗ*{Номер}* **\n", "\n", "\n", "Сопровождайте ваш код изображеними, комментариями и выводами. \n", "Иммейте ввиду, что на некоторые задачи нет единственного верного и полного ответа. Чем больше информации вы сможете извлечь, аргументированных выводов сформулировать, тем лучше.\n", "\n", "Используйте данный Ipython Notebook при оформлении домашнего задания.\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Теория веротяностей. Распределения" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В SciPy более 80 видов непрерывных и более 12 дискретных распределений, более 70 статистических функций" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy as sp\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задача 1.** Сгенерируйте три распределения: гауссовское с мат. ожиданием 1 и дисперсией 4, хи-квадрат с $k = 3$ и дискртеное пуассоновское с $\\lambda = 10$.
\n", "\n", "При генерации используйте 500 точек. Посчитайте для каждого из них обчный набор статистик: среднее, минимум, максимум, дисперсию, кривизну и смещенность." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задача 2.** Найрисуйте функцию (cdf) и плотность (pdf) распределений. На графиках pdf отметьте среднее значение и медиану." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задача 3.** Выведите описательные статистики распределений с помощью `scipy.stats.describe`. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Теория вероятностей. Корреляция и метод максимального правдоподобия" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Корреляции с помощью ивестных вам пакетов можно посчитать несколькими способами: pandas.DataFrame.corr и numpy.correlate, numpy.corrcoef и scipy.stats.pearsonr для корреляционного коэффициента Пирсона, scipy.stats.spearmanr для корреляционного коэффициента Спирмена." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Объясните [разницу](http://support.minitab.com/en-us/minitab-express/1/help-and-how-to/modeling-statistics/regression/supporting-topics/basics/a-comparison-of-the-pearson-and-spearman-correlation-methods/) между коэффициентами корреляции Спирмена и Пирсона." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your explanation here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В данных из файла [beauty.csv](https://www.dropbox.com/s/mtrv3yvwwj3v4hw/beauty.csv?dl=0) для каждого опрошенного имеется следующая информация: заработная плата за час работы, опыт работы, образование, внешняя привлекательность (в баллах от 1 до 5), бинарные признаки: пол, семейное положение, состояние здоровья (хорошее/плохое), членство в профсоюзе, цвет кожи (белый/чёрный), занятость в сфере обслуживания (да/нет)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задание 1.** Найдите 3 пары признаков с наибольшей корреляцией. Поясните на конктретных примерах, что означают полученные коэффициенты корреляции." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задание 2.** На семинаре мы рассмотрели различные распрелеления случайных величин (дискретные и непрерывные). \n", "\n", "Изобразите гистограммы каждого из признаков.
\n", "Определите возможный закон распределения каждого из них и оцените его параметры. Если готовой функции в scipy.stats для распределения нет, то оцените эти параметры сами по методу максимального правдоподобия." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Метод наивного Байеса" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Пояснения по выполнению этого задания будут рассказаны на семинаре 1 марта" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Обучение методом наивного Байеса основывается на достаточно сильном предположении, что все признаки попарно независимы. По формуле Байеса $$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)}$$\n", "Т.к. $$P(x_1,\\dots,x_n)$$ задается условиями задачи, принцип максимального правдоподобия для наивного Байеса запишется следующим образом: $$\\hat y = \\arg\\max_y P(y)\\prod_{i=1}^n P(x_i|y).$$\n", "\n", "\n", "Библиотека `sklearn` поддерживает несколько реализаций наивного Байеса: `sklearn.naive_bayes.GaussianNB`, `sklearn.naive_bayes.MultinomialNB` и др." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.cross_validation import train_test_split\n", "from sklearn.datasets import fetch_20newsgroups\n", "from sklearn.naive_bayes import MultinomialNB\n", "from sklearn.feature_extraction.text import CountVectorizer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задание 1.** Выберите 2 категории новостных сообщений из `20newsgroups`. Случайным образом, в пропорции 70/30, разделите наборы текстов на обучающую и контрольную выборки. В результате выполнения данного задания у вас должно получится 5 переменных: `text_all`, `text_train`, `text_test`, `y_train`, `y_test`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Список новостных заголовков\n", "['alt.atheism',\n", " 'comp.graphics',\n", " 'comp.os.ms-windows.misc',\n", " 'comp.sys.ibm.pc.hardware',\n", " 'comp.sys.mac.hardware',\n", " 'comp.windows.x',\n", " 'misc.forsale',\n", " 'rec.autos',\n", " 'rec.motorcycles',\n", " 'rec.sport.baseball',\n", " 'rec.sport.hockey',\n", " 'sci.crypt',\n", " 'sci.electronics',\n", " 'sci.med',\n", " 'sci.space',\n", " 'soc.religion.christian',\n", " 'talk.politics.guns',\n", " 'talk.politics.mideast',\n", " 'talk.politics.misc',\n", " 'talk.religion.misc']" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задание 2.** На переменной `text` постройте конвертер из текстов в частотную матрицу с помощью метода `CountVectorizer(analyzer='word', stop_words='english', lowercase=True)`, а затем используйте его на выборках `train` и `test`. В результате вы должны получить 2 матрицы: `X_train` и `X_test`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задание 3.** По матрице `X_train` найдите 50 самых частотных слов. Соответствия столбцов и слов можно понять по методу `CountVectorizer.get_feature_names()`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задание 4.** Обучите наивный байесовский классификатор MultinomialNB с параметром слгаживания `alpha=1` на выборке train. Примените его к данным из тестовой выборке и оцените точность совпадения меток." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Задание 5.** Обучите наивный байесовский классификатор MultinomialNB с параметром слгаживания `alpha=0` на выборке train. Примените его к данным из тестовой выборки и оцените точность совпадения меток. Поменяются ли результаты? Объясните почему?\n", "\n", "Учитывайте не только метки, но и вероятности, которые выдает классификатор" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "## Your code here" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }