{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Майнор по Анализу Данных, Группа ИАД-4\n", "## 05/10/2017 Бустинг" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Table of Contents\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import os\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "\n", "plt.style.use('ggplot')\n", "plt.rcParams['figure.figsize'] = (8, 8)\n", "\n", "# Для кириллицы на графиках\n", "font = {'family': 'Verdana',\n", " 'weight': 'normal'}\n", "plt.rc('font', **font)\n", "\n", "try:\n", " from ipywidgets import interact, IntSlider, fixed, FloatSlider\n", "except ImportError:\n", " print u'Так надо'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Алгоритм Ada-boost" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Повторяем теорию" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Boosting, в отличие от bagging'а - это последовательный способ построения композиции базовых моделей.\n", "\n", "Мы постоянно работаем с одним и тем же набором данных, **но** на каждом шаге строим новую базовую модель, которая учитывает ошибки предыдущей модели.
\n",
"\n",
"Введем следующие обозначения:\n",
"* $t_k$ - базовый классификатор, полученный на шаге $k$\n",
"* $\\alpha_k$ - вес базового классификатора, полученного на шаге $k$\n",
"* $w_k(i)$ - веса объектов на шаге $k$\n",
"* $x_i$ - $i$-й объект, $i = 1, \\dots, N$\n",
"* $y_i=\\{-1, 1\\}$ - метки класса для $i$-го объекта \n",
"\n",
"Конечное предсказание получается из взвешенной комбинации предсказания базовых моделей:\n",
"$$ T(x^*) = sign(\\sum\\limits^{K}_{k=1}\\alpha_kt_k(x^*)) $$\n",
"\n",
"Наша цель - минимизировать количество ошибок на всей выборке ..\n",
"\n",
"$$ E_T = \\frac{1}{N}\\sum\\limits_{i=1}^N [T(x_i) \\neq y_i] $$\n",
"\n",
".. которые мы мажорируем экспонентой =)\n",
"\n",
"$$ E_T = \\frac{1}{N}\\sum\\limits_{i=1}^N [T(x_i) \\neq y_i] \\leq \\frac{1}{N}\\sum\\limits_{i=1}^N e^{(-y_i\\sum_k\\alpha_kt_k(x_i))} $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Если мы посчитаем ошибки $E_1, E_2, E_3,...$ на каждом шаге, то это даст нам правило для обновления весов объектов. (Упражнение)