Skip to content

Commit cf06bee

Browse files
committed
Add chapter on Random Forest and Gradient Boosting
1 parent 08340d7 commit cf06bee

2 files changed

Lines changed: 172 additions & 0 deletions

File tree

src/SUMMARY.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
- [Метрические алгоритмы](./metric-algo.md)
99
- [Линейная регрессия](./linear-regression.md)
1010
- [Логистическая регрессия и деревья](./logistic-regression-and-trees.md)
11+
- [Случайный лес и градиентный бустинг](./random-forest-and-gradient-boosting.md)
1112

1213
# Работаем самостоятельно
1314

1415
- [Свой kNN](./practicum/knn-task.md)
1516
- [Своя линейная регрессия](./practicum/linear-regression-task.md)
1617
- [Своя логистическая регрессия](./practicum/logistic-regression-task.md)
1718

19+
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
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

Comments
 (0)