Presentation from Moscow Data Fest #1, September 12.
Moscow Data Fest is a free one-day event that brings together Data Scientists for sessions on both theory and practice.
Link: http://www.meetup.com/Moscow-Data-Fest/
3. Глоссарий
● бэггинг (bagging)
○ усредение нескольких однотипных моделей
● бустинг (boosting)
○ построение цепочки моделей, дополняющих друг друга
● блэндинг (blending)
○ смешивание классификаторов (как правило, линейная смесь или кастомные правила)
● стэкинг (stacking)
○ построение классификатора над других классификаторами
4. Что такое ансамбль?
Обратимся к определению алгоритмической композиции по Ю.И.Журавлёву:
“На пальцах”: исходные объекты отображаются разными способами в
некоторое пространство оценок*, далее оценки агрегируются в ответ.
*оценка != ответ
5. Общие подходы
Основные методы:
● усреднение
● линейные комбинации
● смеси экспертов (сумма взвешивающих функций)
● стэкинг
● кастомные правила
Ансамбль работает, когда его компоненты (отображения, оценки) различны,
в идеале -- исправляют ошибки друг друга.
Откуда берется различность?
6. Источники различности [1]
● предобработка
○ декомпозиция данных
■ по признакам
■ по объектам
○ преобразования признаков
■ log
■ sqrt
■ TF-IDF
■ PCA
■ NMF
■ tSNE
○ комбинации групп и преобразований
● сэмплирование
○ по объектам (bootstrap, undersampling, oversampling)
○ по признакам (RSM)
7. Источники различности [2]
● разные семейства алгоритмов
○ линейные модели
○ факторизационные машины
○ решающие деревья
○ нейросети
○ kNN
○ ...
● алгоритмы одного семейства, но с разными параметрами
○ глубина деревьев
○ количество соседей
○ число скрытых слоев нейронов
○ параметры регуляризации
○ число латентных факторов
○ ...
8. Усреднение (линейная комбинация) [1]
Наиболее простой и очень мощный метод.
Особенно хорошо работает, когда:
● есть случайность в самом алгоритме обучения
● используется сэмплирование
● модели из разных семейств
Вариации:
● взвешенное среднее
● ограничения на коэффициенты (неотрицательность, нормировка)
● усреднение порядков (если в разных шкалах или если l2r-задача)
9. Усреднение (линейная комбинация) [2]
Примеры.
● стандартный метод:
○ DecisionTree + сэмплирование + усреднение ~= RandomForest
● kaggle-avito-prohibited-content:
○ kNN + линейная модель = решение в топ5
● kaggle-malware:
○ xgboost + oversample(a=7) + усредение
● kaggle-tube-pricing:
○ NN + dropoutdropconnect + усреденение
● любой конкурс:
○ xgboost + сэмплирование(subsample, colsample_bytree) + усреднение
Плюсы:
● легко реализовать,
● эффективная
● сложно переобучиться
Минусы:
● довольно простой класс отображений
*hint: коэффициенты смеси можно подбирать по лидерборду
10. Смеси экспертов
● сумма взвешенных оценок алгоритмов
● вес gt
-- функция от положения в признаковом пространстве
● линейная комбинация -- частный случай смеси экспертов (gt
= const)
● как учить функции весов?
○ ограничиться некоторым семейством функций
○ подбирать параметры этого семейства
● важный частный случай -- линейное семейство весовых функций
12. Feature-Weighted Linear Stacking (FWLS) [2]
● был предложен топ2 командой в соревновании Netflix
● легко реализовать, используя готовый алгоритм линейной регрессии
○ достаточно перемножить каждую оценку на каждый “опорный” признак и решить обычную
задачу регрессии
● использовался победителем в Large Scale Hierarchical Text Classification - Kaggle
● легко обобщить:
○ повышать степень полинома:
■ квадраты
■ кубы
■ …
○ факторизовывать взаимодействие
■ как в факторизационных машинах
Плюсы:
● легко реализовать
● интерпретируемость
Минусы:
● довольно простой класс отображений
● не сложно переобучиться
13. Стэкинг (Stacking)
● основная идея
○ пытаемся восстановить отображение F методами машинного обучения.
● можем реализовать нелинейны отображения
○ RF GBDT NN
● один из самых эффективных способов
○ и самый трудоемкий
● легко переобучиться
○ нужно аккуратно работать с данными
○ используем весь арсенал средств регуляризации
Плюсы:
● нелинейность
● эффективность
Минусы:
● трудоемкость
● легко переобучиться
14. Stacking О разделении данных
● не допускайте банальных ошибок
○ обучение и валидация в каждый момент времени не должны пересекаться
● будь данных бесконечно много -- проблем бы не было
○ но их ограниченное количество
○ можно воспользоваться техникой, аналогичной кросс-валидации
● обязательно наличие “честного” hold-out при тестировании идей
○ хотя бы просто разбиение 403030
15. Stacking Out-of-fold(k) prediction
● предполагаем, что уменьшение выборки на Nk ~ не изменит модель
● аналогичен кросс-валидации
● разбиение лучше держать фиксированным для всех моделей
● для предсказания на целевом множестве
○ обучаем базовую модель на всем тренировочном множестве
○ требуется хранить всего 1 модель
16. Stacking Out-of-fold(2)*M
● предполагаем, что уменьшение выборки на Nk ~ не изменит модель
● идейно схож с out-of-bag оценкой в случайном лесе
● разбиение каждый раз генерируется случайно
● для предсказания на целевом множестве
○ усредняем предсказания каждой из двух моделей на каждом из M шагов
○ требуется запоминать 2*M моделей
17. Stacking Out-of-fold (summary)
● Важно понимать, что упомянутые подходы работают, когда выборка
○ достаточно велика
○ i.i.d.
● дефолтный совет
○ использовать OOF(k), 5<k<10
● есть случаи, когда OOF(2)*M работает немного лучше
○ kaggle-otto (решение топ2)
● подробнее можно почитать в дипломе Саши Гущина
18. Stacking Мотивация
● Стэкинг работает особенно хорошо, когда
○ признаки разной природы (вещественные категориальные)
■ kaggle-tradeshift
■ kaggle-crowdflower
○ много целевых переменных (и есть зависимость между ними)
■ kaggle-tradeshift
■ kaggle-wise2014
19. Небольшое сравнение в цифрах
Алгоритм Результат (MAP@10)
SVM 0.980
FM 0.981
2*SVM 0.982
2*FM 0.983
LR(FM, SVM) 0.984
RF(FM, SVM) 0.987
kaggle-avito-prohibited-content
Алгоритм Результат (ROC-AUC)
Vowpal Wabbit A 0.59962
Vowpal Wabbit B 0.59957
Vowpal Wabbit C 0.59954
GLMNet 0.59665
Усреднение 0.60031
Усреднение ранков 0.60187
kaggle-shoppers*
* данные из http://mlwave.com/kaggle-ensembling-guide/
Характерный прирост качества, который дают ансамбли: ~1-3%
25. Что дальше?
● 3 уровня обучения -- вполне реально
● А можно ли сделать 4?
● Будет ли это еще лучше?
● Можно ли заранее оценить “полезность” компонента в смеси?
● Можно ли автоматизировать процедуру построения ансамбля?
26. Выводы
● характерная эффективность ансамбля: +1-3% качества
● линейные комбинации -- просты и эффективны
● двухуровневое обучение -- это не страшно
● проводите “честное” тестирование мета-признаков
○ хотя бы несколькими разбиениями 40/30/30
● помните основное правило валидации
○ обучение и контроль не должны пересекаться
● полноценный стэкинг требует аккуратности
○ дефолтный совет: out-of-fold(5)