Эта статья плохо повышает индекс цитируемости авторов других статей этой вики.
|
Ансамблирование моделей[]
Идея алгоритма[]
Обучаем несколько базовых моделей, а затем агрегируем их результаты по какому-либо правилу и выдаем окончательный результат.
Зачем это нужно:
- В совокупности получаем более сложную модель, чем каждая в отдельности
- Уменьшение разбора
- Избежание переобучения/недообучения
- Возможность работы с признаками разной природы (использовать разные алгоритмы)
Для простоты рассмотрим задачу бинарной классификации. Пусть всего базовых моделей и каждая предсказывает класс или . Тогда агрегированный алгоритм может выдавать класс по следующим правилам:
- AND-правило: если все базовые модели выдали
- OR-правило: если хотя бы одна базовая модель выдала
- -out-of-: если хотя бы базовых моделей из выдали
- majority vote: если большинство базовых моделей выдало
Почему ансамблирование улучшает результат описано здесь.
Обобщение с весами[]
Также, если используются правила -out-of- или majority vote, можно каждой базовой модели присвоить вес, основываясь на качестве предсказания на валидационной выборке.
Предсказание класса по уровням ранжирования[]
Пусть теперь рассматривается задачи многоклассовой классификации с классами. Пусть каждая -ая базовая модель выдает некую отранжированную информацию о классе объекта:
Это означает, что класс наиболее вероятен для рассматриваемого объекта, а класс --- наименее вероятен.
Пусть --- сколько классов было отранжировано ниже -го класса -ой базовой моделью. Чем выше, тем более вероятен -ый класс. Поэтому, в качестве совокупного рейтинга построим следующую величину:
Тогда результирующее предсказание на объекте :
Предсказание класса по вероятностям[]
Опять рассмотрим задачу многоклассовой классификации с классами. Пусть каждая -ая базовая модель выдает вектор вероятностей из принадлежностей к каждому классу:
Тогда , где
--- среднее арифметическое или медиана.
Стэкинг моделей[]
Рассмотрим задачу регрессии. Пусть всего базовых моделей каждая модель --- это алгоритмов регрессии. Результирующую модель строим следующим образом:
Можно находить веса следующим образом:
Но такой способ приведет к переобучению. Поэтому будем находить веса при помощи кросс-валидации, а именно: разобьем выборке на частей. Пусть --- та часть, которая содержит -ый объект, а --- алгоритм, обученный на всех фолдах, кроме . Тогда:
Для уменьшения переобучения можно добавить условия на неотрицательность весов или добавить к функционалу регуляризатор
Обобщенный стэкинг[]
Предполагаем, что
,где --- вектор параметров:
:
- Номер класса
- Вектор вероятностей классов
- Любой изначальный или сгенерированный признак
Бэггинг (Bagging)[]
Генерируем выборок фиксированного размера , выбирая с возвращением из имеющихся объектов. Доказывается, что каждый объект попадает в выборку с вероятностью , если .
Настраиваем базовых моделей на этих выборках и агрегируем результат.
Плюсы:
- Уменьшает переобучение, если базовые модели были переобучены (например, решающие деревья)
Минусы:
- Время обучения увеличивается в раз
Метод случайных подпространств (Random subspace method)[]
Разбиваем без возвращения признаки случайных образом (причем, не обязательно, чтобы было одинаковое количество признаков)
- Можно объединять два вышеприведенных подхода, то есть, фактически, выбирать подматрицы матрицы .
Случайный лес (Random Forest)[]
Базовые алгоритмы --- решающие деревья. Пусть всего базовых алгоритмов и размер подвыборки признаков --- . Тогда, алгоритм построения случайного леса следующий:
- Генерируем при помощи бэггинга выборок
- Обучаем каждое решающее дерево на своей выборке, причем в каждом узле признаки рассматриваются из случайно выбранного подмножества размера из всех признаков.
Агрегирование результата в случае классификации производится при помощи голосования большинства, а в случае регрессии --- среднее арифметическое.
Плюсы:
- Можно осуществить параллельную реализацию
- Не переобучается с ростом
Минусы:
- Менее интерпретируемый, чем решающее дерево
- Деревья не исправляют ошибки друг друга
Для обучения должны использоваться глубокие деревья, иначе бэггинг над простыми моделями даст простую модель.
Extra Random Trees[]
В каждом узле дерева генерируется случайно пар (признак, порог).
Плюсы:
- Упрощение модели Random Forest
- Более быстрые, чем Random Forest
- Не переобучается с ростом
Минусы:
- Bias выше, чем у Random Forest, а variance --- меньше.
Для обучения должны использоваться глубокие деревья