{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Майнор по Анализу Данных, Группа ИАД-2\n", "## Домашнее задание №2: Классификация текстовых данных" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**Общая информация**\n", "\n", "**Срок сдачи:** 19 апреля 2017, 23:59 \n", "\n", "При отправлении ДЗ на почту `hse.minor.dm+2@gmail.com` указывайте фамилию в названии файла, а тему письма оформляйте в следующем виде:\n", "** [ИАД-2] *{Фамилия}* *{Имя}* ДЗ*{Номер}* **\n", "\n", "Сопровождайте ваш код изображеними, комментариями и выводами. \n", "Иммейте ввиду, что на некоторые задачи нет единственного верного и полного ответа. Чем больше информации вы сможете извлечь, аргументированных выводов сформулировать, тем лучше.\n", "\n", "Используйте данный Ipython Notebook при оформлении домашнего задания.\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Чтобы узнать свой вариант, введите Вашу фамилию на русском языке в соответвующее поле ниже и запустите ячейку:

" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ваш вариант - 2\n" ] } ], "source": [ "surname = u\"Иванов\" #Ваша фамилия\n", "\n", "variant = (hash(surname.lower()) % 2 + 1)\n", "print \"Ваш вариант - \", variant" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Варианты

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Набор SMS сообщений (sms) - спам/не спам - источник - файл c данными: data/SMSSpamCollection\n", "\n", "* Набор рецензий на фильмы (reviews) - positive/negative - источник - файл c данными: data/reviews.tsv\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Задача 1\n", "#### Классификация текстовых сообщений (2 балла)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
    \n", "
  1. Загрузите исходные данные
  2. \n", "
  3. Разбейте загруженные данные на обучающее (train) и тестовое подможества (test)
  4. \n", "
  5. Переведите текстовые данные в векторный вид. Для этого воcпользуйтесь средствами sklearn для конвертации текста в векторы TF-IDF (настроить на обучающем подмножестве, n-gram=1, слова в нижний регистр)
  6. \n", "
  7. Постройте на обучающем подмножестве следующие модели классификации:\n", "
      \n", "
    • K-ближайших соседей ($n=5$)
    • \n", "
    • Логистическая регрессия ($C=1$)
    • \n", "
    • Мультиномиальный наивный Байес ($\\alpha=1$)
    • \n", "
    \n", "
  8. \n", "
  9. Определите качество классификации (по доле правильных классификаций) на тестовом подмножестве
  10. \n", "
  11. Определите с помощью timeit время обучения и предсказания (на тестовом подмножестве)
  12. \n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "random_state = 123 # для всех объектов/методов/моделей" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Параметры логистической регрессии\n", "penalty=\"l2\", fit_intercept=True, max_iter=100, C=1, solver=\"lbfgs\", random_state=12345" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Ваш код" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Задача 2.\n", "#### Применение k-folds (3 балла)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Повторите решение задачи 1, но с ипользованием k-folds (k=4) для разделения исходных данных, обучения и тестирования.

" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "random_state = 123 # для всех объектов/методов/моделей" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Ваш код" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Задача 3.\n", "#### Выбор модели (5 баллов)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

1. Используя данные из задачи 1, разбейте обучающее подмножество (train) с использованием k-folds (k=4)
\n", "2. Обучите и протестируйте на разбитом обучающем подмножестве классификаторы со следующими параметрами:

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

K-ближайших соседей

" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ns = np.arange(1, 150, 20) # количество соседей" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Логистическая регрессия

" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cs = np.logspace(-2, 10, 8, base=10) # параметр регуляризации" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Мультиномиальный наивный Байес

" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "alphas = np.logspace(-4, 1, 8, base=10) # сглаживающий параметр" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

3. Постройте графики (параметры модели)-(доля правильных классификаций) при обучении и валидации
\n", "4. Выберите лучшую модель для каждого метода, используя значение качества классификации (использовать долю правильных классификаций)
\n", "5. Выбранные модели обучите на обучающем подмножестве (train) и протестируйте на тестовом (test). Определите время обучения и предсказания (см. задачу 1 п. 6)
\n", "6. Повторите шаги 2-4 для n-gram=2
\n", "7. Выведите итоговые данные по всем методам для лучших моделей (метод, n-gram, значение параметра модели, время обучения, время предсказания, доля правильных классификаций)
\n", "8. Сделайте выводы по полученным результатам (преимущества и недостатки методов)\n", "

" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "random_state = 123 # для всех объектов/методов/моделей" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Ваш код" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Задача 4. (опционально)\n", "#### Исследование влияния количества признаков FeatureHasher на качество классификации (5 баллов к сумме по всем ДЗ) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Как будет меняться качество классификации для обозначенных ранее методов при использовании FeatureHasher (или HashingVectorizer) из пакета sklearn перед TF-IDF преобразованием, если

" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n_features = np.logspace(1, 5, 5, base=10) # количество признаков\n", "non_negative=True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Можно воспользоваться GridSearchCV

" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [conda root]", "language": "python", "name": "conda-root-py" }, "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.12" }, "nav_menu": {}, "toc": { "navigate_menu": true, "number_sections": false, "sideBar": true, "threshold": 6, "toc_cell": false, "toc_section_display": "block", "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 2 }