|
| 1 | +# Глава 4. Деревья. Случайный лес. Градиентный бустинг |
| 2 | + |
| 3 | +## Введение |
| 4 | +В данной главе рассматриваются методы анализа больших массивов данных, основанные на деревьях решений и их ансамблях. Мы изучим регрессионные деревья, проблему смещения и разброса (bias-variance), а также методы объединения моделей: бэггинг (Bagging), случайный лес (Random Forest) и бустинг (Boosting), включая градиентный бустинг. |
| 5 | + |
| 6 | +## 1. Деревья решений |
| 7 | + |
| 8 | +### Регрессия |
| 9 | +При построении деревьев для задач регрессии используется критерий качества разбиения. Обозначения из лекции: |
| 10 | +* $G_{x_i, t_j} = L_Q H_L + R_Q H_R$ |
| 11 | +* **MSE (Среднеквадратичная ошибка):** $H_R = \frac{1}{N} \sum_{i}^{N} (y_m - y_i)^2$, где $y_m$ — среднее значение. |
| 12 | +* **MAE (Средняя абсолютная ошибка):** $H_R = \frac{1}{N} \sum_{i}^{N} \|y_m - y_i\|$, где $y_m$ — медиана. |
| 13 | + |
| 14 | +### Оптимизация |
| 15 | +Сложность алгоритмов построения деревьев оценивается следующим образом: |
| 16 | +* **Сложность подготовки:** $O(N \cdot \log N \cdot d)$, где $d$ — количество признаков, $N$ — количество объектов. Необходимо отсортировать все признаки перед тем, как считать ошибку на разных разбиениях. |
| 17 | +* **Сложность ошибки:** $O(N)$. |
| 18 | +* **Сложность нахождения оптимального разбиения:** $O(N^2 d)$. |
| 19 | + |
| 20 | +Существуют методы оптимизации пересчета ошибок. Например, переход от суммы квадратов отклонений для $N$ объектов к сумме для $N-1$ объектов может быть выполнен за $O(1)$ для одного пересчёта при использовании определенных формул преобразования сумм. Также применяются эвристические оптимизации, например, рассмотрение случайного набора признаков в каждой вершине. |
| 21 | + |
| 22 | +## 2. Смещение и Разброс (Bias-Variance) |
| 23 | + |
| 24 | +### Decomposition of Error |
| 25 | +Рассмотрим модель зависимости истинных значений от функции: |
| 26 | +$$y = f(x) + \varepsilon$$ |
| 27 | +где: |
| 28 | +* $y$ — истинные значения; |
| 29 | +* $f(x)$ — закон природы; |
| 30 | +* $\varepsilon$ — ошибка измерения ($\varepsilon \in N(0, \sigma^2)$, математическое ожидание $M\varepsilon = 0$). |
| 31 | + |
| 32 | +Таким образом, $y \in N(f(x), \sigma^2)$, математическое ожидание $My = f(x)$. |
| 33 | + |
| 34 | +Рассмотрим семейство функций-регрессоров $b = b(x)$, приближенных к $f(x)$. В конкретной точке множество регрессоров даст множество значений. У $b(x)$ есть математическое ожидание и дисперсия. |
| 35 | + |
| 36 | +Разложение среднеквадратичной ошибки (MSE): |
| 37 | +$$MSE = M(y - b)^2 = M(y^2) + M(b^2) - 2M(by)$$ |
| 38 | + |
| 39 | +Используя свойства дисперсии $Var(x) = Dx = M(x - Mx)^2 = Mx^2 - M[x]^2$: |
| 40 | +1. $My^2 = Dy + M[y]^2 = \sigma^2 + f^2$ |
| 41 | +2. $Mb^2 = Db + M[b]^2$ |
| 42 | +3. $Mby = M(f + \varepsilon)b = Mfb + M\varepsilon b = fMb + M\varepsilon Mb = fMb$ |
| 43 | + |
| 44 | +Подставляя в формулу MSE: |
| 45 | +$$MSE = \sigma^2 + f^2 + Db + Mb^2 - 2fMb = (f - Mb)^2 + Db + \sigma^2$$ |
| 46 | + |
| 47 | +Где: |
| 48 | +* $(f - M[b]) = \text{bias}$ (смещение); |
| 49 | +* $Db = \text{variance}$ (разброс); |
| 50 | +* $\sigma^2$ — неустранимая ошибка. |
| 51 | + |
| 52 | +Итоговая формула decomposition: |
| 53 | +$$MSE = \text{bias}^2 + \text{variance} + \sigma^2$$ |
| 54 | + |
| 55 | +### Влияние сложности модели |
| 56 | +* Сложные модели склонны иметь большое значение **variance** из-за переобучения. |
| 57 | +* Простые модели склонны иметь большое значение **bias**. |
| 58 | + |
| 59 | +## 3. Ансамбли моделей |
| 60 | + |
| 61 | +### Мудрость толпы |
| 62 | +На ярмарке проводилась лотерея: нужно было угадать вес быка по внешнему виду. |
| 63 | +* Участвовало 800 человек. |
| 64 | +* Реальный вес быка: 1198 фунтов. |
| 65 | +* Ни один человек не угадал точный вес. |
| 66 | +* Среднее арифметическое их предсказаний: 1197 фунтов. |
| 67 | + |
| 68 | +**Почему так?** Каждый, основываясь на своём «независимом» опыте, ошибался в большую или меньшую сторону, но «в среднем» одинаково. |
| 69 | + |
| 70 | +### Бэггинг (Bagging) |
| 71 | +Идея заключается в усреднении предсказаний нескольких классификаторов или регрессоров. Чтобы дать моделям разный «опыт», их обучают на разных данных. Используется метод **Bootstrap**: элемент из общей выборки берётся случайным образом, при этом один и тот же элемент может быть взят несколько раз. |
| 72 | + |
| 73 | +Пусть $b_1(x), ..., b_n(x)$ — модели регрессии, $f(x)$ — функция истинных значений. Квадратичная ошибка $i$-й модели: $\varepsilon_i^2(x) = (b_i(x) - f(x))^2$. |
| 74 | +Если усреднить ошибку всех моделей, получим $\frac{1}{n} M_x [\sum \varepsilon_i^2(x)]$. |
| 75 | + |
| 76 | +Предположим, что ошибки несмещены ($M_x \varepsilon_i(x) = 0$) и некоррелированы ($M_x \varepsilon_i(x)\varepsilon_j(x) = 0$ при $i \neq j$). |
| 77 | +Построим новую модель: |
| 78 | +$$a(x) = \frac{1}{n} \sum_{i}^{n} b_i(x)$$ |
| 79 | + |
| 80 | +Тогда среднеквадратичная ошибка новой модели: |
| 81 | +$$M_x \left( \frac{1}{n} \sum_{i}^{n} b_i(x) - f(x) \right)^2 = M_x \left( \frac{1}{n} \sum_{i}^{n} \varepsilon_i(x) \right)^2 = \frac{1}{n^2} M_x \sum_{i}^{n} \varepsilon_i^2(x)$$ |
| 82 | + |
| 83 | +**Вывод:** Бэггинг снижает variance в ошибке (снижает эффект переобучения) примерно в $n$ раз (при условии некоррелированности). Модели «в среднем» ошибаются одинаково, но в разные стороны. В меньшее число моделей попадают выбросы. |
| 84 | + |
| 85 | +### Случайный лес (Random Forest) |
| 86 | +Метод развивает идею бэггинга для деревьев: |
| 87 | +1. Обучаем деревья на разных подвыборках. |
| 88 | +2. Чтобы повысить некоррелированность деревьев, при построении узла дерева ищем наилучшее разбиение не по всем признакам, а лишь по части. |
| 89 | + |
| 90 | +**Гиперпараметры:** количество деревьев + гиперпараметры дерева. |
| 91 | +* В регрессии выбираем среднее. |
| 92 | +* В классификации выбираем большинство. |
| 93 | + |
| 94 | +**Преимущества:** |
| 95 | +* Высокая точность. |
| 96 | +* Менее чувствителен к выбросам. |
| 97 | +* Менее склонен к переобучению. |
| 98 | +* Хорошо параллелится. |
| 99 | +* Хорошо работает с дефолтными параметрами. |
| 100 | + |
| 101 | +**Недостатки:** |
| 102 | +* Сложно интерпретировать. |
| 103 | +* Плохо работает с разреженными признаками. |
| 104 | +* Не экстраполируется. |
| 105 | +* Требует много памяти. |
| 106 | + |
| 107 | +## 4. Бустинг |
| 108 | + |
| 109 | +### AdaBoost и случайные пни |
| 110 | +В бустинге элементы, на которых модель ошиблась, будут иметь больший вес на следующих шагах. Часто используются «пни» — деревья глубиной 1. |
| 111 | + |
| 112 | +### Градиентный бустинг: Пример |
| 113 | +**Задача:** Предсказать цену товара по возрасту (в днях). |
| 114 | +Допустим, есть только один признак. |
| 115 | + |
| 116 | +**Шаг 1:** Начальное приближение — среднее по выборке. |
| 117 | +Цены: 700, 800, 600, 400, 300. |
| 118 | +Среднее: $(700+800+600+400+300) / 5 = 560$. |
| 119 | + |
| 120 | +Считаем остатки (цена - приближение): |
| 121 | + |
| 122 | +| Возраст (дней) | Цена | Приближение | Остаток | |
| 123 | +| :--- | :--- | :--- | :--- | |
| 124 | +| 25 | 700 | 560 | 140 | |
| 125 | +| 50 | 800 | 560 | 240 | |
| 126 | +| 75 | 600 | 560 | 40 | |
| 127 | +| 80 | 400 | 560 | -160 | |
| 128 | +| 100 | 300 | 560 | -260 | |
| 129 | + |
| 130 | +**Шаг 2:** Строим регрессионное дерево, которое предсказывает остатки. |
| 131 | +Разбиение по признаку Возраст >= 80: |
| 132 | +* Ветка 1 (Age < 80): Остатки 140, 240, 40. Среднее: 140. |
| 133 | +* Ветка 2 (Age >= 80): Остатки -160, -260. Среднее: -210. |
| 134 | + |
| 135 | +**Шаг 3:** Прибавляем предсказание дерева к приближению (можно с коэффициентом, в примере без него). |
| 136 | + |
| 137 | +| Возраст | Цена | Приближение №1 | Остаток №1 | Выход дерева №1 | Приближение №2 | Остаток №2 | |
| 138 | +| :--- | :--- | :--- | :--- | :--- | :--- | :--- | |
| 139 | +| 25 | 700 | 560 | 140 | 140 | 700 | 0 | |
| 140 | +| 50 | 800 | 560 | 240 | 140 | 700 | 100 | |
| 141 | +| 75 | 600 | 560 | 40 | 140 | 700 | -100 | |
| 142 | +| 80 | 400 | 560 | -160 | -210 | 350 | 50 | |
| 143 | +| 100 | 300 | 560 | -260 | -210 | 350 | -50 | |
| 144 | + |
| 145 | +Далее процесс продолжается: строим деревья дальше, изменяем приближение, считаем новые остатки. |
| 146 | + |
| 147 | +### Градиентный бустинг: Формализация |
| 148 | +На $t$-м шаге модель представляет собой сумму функций: |
| 149 | +$$f(x) = \sum_{i=0}^{t-1} f_i(x)$$ |
| 150 | + |
| 151 | +Параметры нового шага находятся через минимизацию функции потерь $L$: |
| 152 | +$$\rho_t, \theta_t = \arg\min_{\rho, \theta} M_{x,y} [L(y, f(x) + \rho h(x, \theta))]$$ |
| 153 | +где $f_t(x) = \rho_t h(x, \theta_t)$. |
| 154 | + |
| 155 | +Остаток на $i$-м элементе (градиент): |
| 156 | +$$r_{i,t} = - \left[ \frac{\nabla L(y_i, f(x_i))}{\nabla f(x_i)} \right]$$ |
| 157 | +Мы хотим уменьшить этот остаток новой функцией. |
| 158 | + |
| 159 | +1. Параметры дерева: $\theta_t = \arg\min_{\theta} \sum_{i}^{n} (r_{i,t} - h(x_i, \theta))^2$ |
| 160 | +2. Параметры «линейной регрессии» (шаг): $\rho_t = \arg\min_{\rho} \sum_{i}^{n} L(y_i, f(x_i) + \rho h(x_i, \theta_t))$ |
| 161 | + |
| 162 | +**Случай MSE:** |
| 163 | +Для среднеквадратичной ошибки остаток равен разнице между истинным значением и предсказанием: |
| 164 | +$$r_{i,t} = - \frac{\nabla L}{\nabla f} = -2(y_i - y_i) \rightarrow \text{разница между истинным значением и предсказанием}$$ |
| 165 | + |
| 166 | +### Сравнение Градиентного бустинга и Бэггинга |
| 167 | +* **Точность:** Градиентный бустинг точнее, чем Bagging и Random Forest. |
| 168 | +* **Переобучение:** Бустинг любит переобучаться. Нужна тестовая выборка. Если переобучить дерево в начале цепочки, остальные деревья не смогут исправить это переобучение. Поэтому гиперпараметры деревьев выбирают так, чтобы они были достаточно «глупые». |
| 169 | +* **Параллелизм:** Деревья строятся последовательно. Параллелизм возможен только на уровне построения одного дерева (в отличие от Random Forest). |
| 170 | +* **Линейные модели:** С логистической регрессией работает нормально. |
0 commit comments