Ансамбли моделей

Вы можете помочь, добавив навигационные ссылки.

## Ансамблирование моделей

### Идея алгоритма

Обучаем несколько базовых моделей, а затем агрегируем их результаты по какому-либо правилу и выдаем окончательный результат.

Зачем это нужно:

* В совокупности получаем более сложную модель, чем каждая в отдельности
* Уменьшение разбора
* Избежание переобучения/недообучения
* Возможность работы с признаками разной природы (использовать разные алгоритмы)

Для простоты рассмотрим задачу бинарной классификации. Пусть всего

N

{\displaystyle N}

 базовых моделей и каждая предсказывает класс

c
1

{\displaystyle c\_1}

 или

c
2

{\displaystyle c\_2}

. Тогда агрегированный алгоритм может выдавать класс

c
1

{\displaystyle c\_1}

 по следующим правилам:

* AND-правило: если все базовые модели выдали

c
1

{\displaystyle c\_1}
* OR-правило: если хотя бы одна базовая модель выдала

c
1

{\displaystyle c\_1}
* k

{\displaystyle k}

-out-of-

N

{\displaystyle N}

: если хотя бы

k

{\displaystyle k}

 базовых моделей из

N

{\displaystyle N}

 выдали

c
1

{\displaystyle c\_1}
* majority vote: если большинство базовых моделей выдало

c
1

{\displaystyle c\_1}

Почему ансамблирование улучшает результат описано здесь.

### Обобщение с весами

Также, если используются правила

k

{\displaystyle k}

-out-of-

N

{\displaystyle N}

 или majority vote, можно каждой базовой модели присвоить вес, основываясь на качестве предсказания на валидационной выборке.

### Предсказание класса по уровням ранжирования

Пусть теперь рассматривается задачи многоклассовой классификации с

C

{\displaystyle C}

 классами. Пусть каждая

k

{\displaystyle k}

-ая базовая модель выдает некую отранжированную информацию о классе объекта:

c

k

1

≽

c

k

2

≽
⋯
≽

c

k

C

{\displaystyle c\_{k\_{1}}\succcurlyeq c\_{k\_{2}}\succcurlyeq \dots \succcurlyeq c\_{k\_{C}}}

Это означает, что класс

c

k

1

{\displaystyle c\_{k\_{1}}}

 наиболее вероятен для рассматриваемого объекта, а класс

c

k

C

{\displaystyle c\_{k\_{C}}}

 --- наименее вероятен.

Пусть

B

k

(
i
)

{\displaystyle B\_{k}(i)}

 --- сколько классов было отранжировано ниже

i

{\displaystyle i}

-го класса

k

{\displaystyle k}

-ой базовой моделью. Чем

B

k

(
i
)

{\displaystyle B\_{k}(i)}

 выше, тем более вероятен

i

{\displaystyle i}

-ый класс. Поэтому, в качестве совокупного рейтинга построим следующую величину:

g

i

(
x
# )

∑

k

B

k

(
i
,
x
)

{\displaystyle g\_{i}(x)=\sum \limits \_{k}B\_{k}(i,x)}

Тогда результирующее предсказание на объекте

x

{\displaystyle x}

:

y
^

(
x
# )

argmax

i
∈
[
1
,
…
,
C
]

g

i

(
x
)

{\displaystyle {\hat {y}}(x)={\underset {i\in [1,\dots ,C]}{\operatorname {argmax} }}~~g\_{i}(x)}

### Предсказание класса по вероятностям

Опять рассмотрим задачу многоклассовой классификации с

C

{\displaystyle C}

 классами. Пусть каждая

k

{\displaystyle k}

-ая базовая модель выдает вектор вероятностей из принадлежностей к каждому классу:

[

p

k

(

c

1

)
,

p

k

(

c

2

)
,
…
,

p

k

(

c

C

)
]

{\displaystyle [p^{k}(c\_{1}),p^{k}(c\_{2}),\dots ,p^{k}(c\_{C})]}

Тогда

y
^

(
x
# )

c

i

{\displaystyle {\hat {y}}(x)=c\_{i}}

, где

# i

argmax

i
∈
[
1
,
…
,
C
]

F
(

p

1

(

c

i

)
,

p

2

(

c

i

)
,
…
,

p

N

(

c

i

)
)

{\displaystyle i={\underset {i\in [1,\dots ,C]}{\operatorname {argmax} }}~~F(p^{1}(c\_{i}),p^{2}(c\_{i}),\dots ,p^{N}(c\_{i}))}

F

{\displaystyle F}

 --- среднее арифметическое или медиана.

## Стэкинг моделей

Рассмотрим задачу регрессии. Пусть всего

K

{\displaystyle K}

 базовых моделей каждая модель --- это

f
k

(
x
)

{\displaystyle f\_k(x)}

 алгоритмов регрессии. Результирующую модель строим следующим образом:

f
(
x

# k
1

K

w

k

f

k

(
x
)

{\displaystyle f(x)=\sum \limits \_{k=1}^{K}w\_{k}f\_{k}(x)}

Можно находить веса следующим образом:

w
^

=

argmin
w

∑

# i
1

N

L

(

y

i

,

∑

# k
1

K

w

k

f

k

(

x

i

)
)

{\displaystyle {\hat {w}}={\underset {w}{\operatorname {argmin} }}~\sum \limits \_{i=1}^{N}{\mathcal {L}}(y\_{i},\sum \limits \_{k=1}^{K}w\_{k}f\_{k}(x\_{i}))}

Но такой способ приведет к переобучению. Поэтому будем находить веса при помощи кросс-валидации, а именно: разобьем выборке на

M

{\displaystyle M}

 частей. Пусть

f
o
l
d
(
i
)

{\displaystyle fold(i)}

 --- та часть, которая содержит

i

{\displaystyle i}

-ый объект, а

f

k

−
f
o
l
d
(
i
)

{\displaystyle f\_{k}^{-fold(i)}}

 --- алгоритм, обученный на всех фолдах, кроме

f
o
l
d
(
i
)

{\displaystyle fold(i)}

. Тогда:

w
^

=

argmin
w

∑

# i
1

N

L

(

y

i

,

∑

# k
1

K

w

k

f

k

−
f
o
l
d
(
i
)

(

x

i

)
)

{\displaystyle {\hat {w}}={\underset {w}{\operatorname {argmin} }}~\sum \limits \_{i=1}^{N}{\mathcal {L}}(y\_{i},\sum \limits \_{k=1}^{K}w\_{k}f\_{k}^{-fold(i)}(x\_{i}))}

Для уменьшения переобучения можно добавить условия на неотрицательность весов или добавить к функционалу регуляризатор

λ

∑

# k
1

K

(

w

k

−

1
K

)

2

{\displaystyle \lambda \sum \limits \_{k=1}^{K}(w\_{k}-{\dfrac {1}{K}})^{2}}

## Обобщенный стэкинг

Предполагаем, что

f
(
x
# )

A

θ

(

f

1

(
x
)
,
…
,

f

K

(
x
)
)

{\displaystyle f(x)=A\_{\theta }(f\_{1}(x),\dots ,f\_{K}(x))}

,где

θ

{\displaystyle \theta}

 --- вектор параметров:

θ
^

=

argmin
θ

∑

# i
1

N

L

(

y

i

,

A

θ

(

f

1

−
f
o
l
d
(
i
)

(
x
)
,
…
,

f

K

−
f
o
l
d
(
i
)

(
x
)
)
)

{\displaystyle {\hat {\theta }}={\underset {\theta }{\operatorname {argmin} }}~\sum \limits \_{i=1}^{N}{\mathcal {L}}(y\_{i},A\_{\theta }(f\_{1}^{-fold(i)}(x),\dots ,f\_{K}^{-fold(i)}(x)))}

f
i

(
x
)

{\displaystyle f\_i (x)}

:

* Номер класса
* Вектор вероятностей классов
* Любой изначальный или сгенерированный признак

## Бэггинг (Bagging)

Генерируем

K

{\displaystyle K}

 выборок фиксированного размера

M

{\displaystyle M}

, выбирая с возвращением из

N

{\displaystyle N}

 имеющихся объектов. Доказывается, что каждый объект попадает в выборку с вероятностью

1
−

e

−
1

{\displaystyle 1-e^{-1}}

, если

# M
N

{\displaystyle M=N}

.

Настраиваем

K

{\displaystyle K}

 базовых моделей на этих выборках и агрегируем результат.

**Плюсы:**

* Уменьшает переобучение, если базовые модели были переобучены (например, решающие деревья)

**Минусы:**

* Время обучения увеличивается в

K

{\displaystyle K}

 раз

## Метод случайных подпространств (Random subspace method)

Разбиваем без возвращения признаки случайных образом (причем, не обязательно, чтобы было одинаковое количество признаков)

* Можно объединять два вышеприведенных подхода, то есть, фактически, выбирать подматрицы матрицы

X

{\displaystyle \mathbb{X}}

.

## Случайный лес (Random Forest)

*Базовые алгоритмы* --- решающие деревья. Пусть всего

B

{\displaystyle B}

 базовых алгоритмов и размер подвыборки признаков ---

m

{\displaystyle m}

. Тогда, алгоритм построения случайного леса следующий:

* Генерируем при помощи бэггинга

B

{\displaystyle B}

 выборок
* Обучаем каждое решающее дерево на своей выборке, причем в **каждом узле признаки рассматриваются из случайно выбранного подмножества размера

m

{\displaystyle m}

 из всех признаков.**

Агрегирование результата в случае классификации производится при помощи голосования большинства, а в случае регрессии --- среднее арифметическое.

**Плюсы:**

* Можно осуществить параллельную реализацию
* Не переобучается с ростом

B

{\displaystyle B}

**Минусы:**

* Менее интерпретируемый, чем решающее дерево
* Деревья не исправляют ошибки друг друга

Для обучения должны использоваться глубокие деревья, иначе бэггинг над простыми моделями даст простую модель.

## Extra Random Trees

В каждом узле дерева генерируется случайно

m

{\displaystyle m}

 пар (признак, порог).

**Плюсы:**

* Упрощение модели Random Forest
* Более быстрые, чем Random Forest
* Не переобучается с ростом

B

{\displaystyle B}

**Минусы:**

* Bias выше, чем у Random Forest, а variance --- меньше.

Для обучения должны использоваться глубокие деревья

## Ссылки

слайды Китова

семинары Соколова по бэггингу

семинары Соколова по Random Forest