{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning\n", "\n", "*Екатерина Лобачева / Илья Щуров / Сергей Сметанин *\n", "\n", "*Совместный бакалавриат НИУ ВШЭ и РЭШ, 2016-17 учебный год*\n", "\n", "[Страница курса](http://math-info.hse.ru/2016-17/Machine_Learning)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Задание основано на [этой практической работе](https://github.com/esokolov/ml-course-hse/blob/master/2016-fall/homeworks-practice/homework-practice-03-ensembles.ipynb)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 1\n", "Выполните следующие шаги:\n", "1. Загрузите датасет [winequality-red.csv](https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv) в датафрейм. Последний столбец (`quality`) — целевая переменная (содержит классы).\n", "1. С помощью [`cross_val_score`](http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_score.html) с `cv=3` (3-fold cross validation) оцените качество ([`accuracy_score`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html) — нужно передать этот объект в качестве параметра `scoring` при вызове `cross_val_score`) следующих классификаторов (соответствующую модель нужно передать функции `cross_val_score` в качестве первого параметра):\n", " * `DecisionTreeClassifier`;\n", " * `BaggingClassifier` со 100 деревьями;\n", " * `BaggingClassifier` со 100 деревьями; каждое дерево обучается только по половине случайно выбранных признаков (см. параметры метода);\n", " * `RandomForestClassifier` со 100 деревьями.\n", " \n", "Значение получается шумное, но в целом у вас должно получиться, что качество возрастает с каждым следующим алгоритмом. Этот пример демонстрирует, что *RandomForest* — это более сложный алгоритм, чем бэггинг и бэггинг со случайно выбранным набором признаков. Дело в том, что в *RandomForest* выбор случайного набора признаков происходит на каждом шаге построения дерева." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Запишите решение здесь" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 2\n", "Продолжим работать с набором данных [winequality-red.csv](https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv). Разделите выборку на обучение и контроль с пропорции 7:3, предварительно перемешав объекты. Переберите значения от 100 до 5000 деревьев с шагом 100, посчитайте accuracy на тестовой выборке для каждого числа деревьев и постройте график зависимости качества от числа деревьев.\n", "\n", "**Рекомендация.**\n", "\n", "Если каждый раз обучать RandomForest с нуля, придётся обучить в общей сумме $100 + 200 + \\ldots + 5000$ деревьев.\n", "Однако, как мы знаем, деревья в случайных лесах строятся независимо и параллельно, поэтому можно обучить всего 5000 деревьев.\n", "\n", "Для этого в при создании объекта класса `RandomForestClassifier` нужно указать в том числе `warm_start=True`. Затем обучить алгоритм с помощью метода `fit()`, использовать метод `predict()` для классификации. После этого с помощью метода `set_params()` изменить параметр `n_estimators`. Если к полученному объекту применить метод `fit`, внутри него будет обучаться только недостающее число деревьев.\n", "\n", "Переобучается ли случайный лес с увеличением числа деревьев?" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Запишите решение здесь" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 3\n", "Решить задачу 3 для градиентного бустинга (`GradientBoostingClassifier`). Описать различия." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Запишите решение здесь" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }