SlideShare a Scribd company logo
1 of 27
Download to read offline
Tips, tricks and use-cases of
ensembling in practice
Mikhail Trofimov,
mikhail.trofimov@phystech.edu,
DataFest#1,
12.09.15
О себе
Глоссарий
● бэггинг (bagging)
○ усредение нескольких однотипных моделей
● бустинг (boosting)
○ построение цепочки моделей, дополняющих друг друга
● блэндинг (blending)
○ смешивание классификаторов (как правило, линейная смесь или кастомные правила)
● стэкинг (stacking)
○ построение классификатора над других классификаторами
Что такое ансамбль?
Обратимся к определению алгоритмической композиции по Ю.И.Журавлёву:
“На пальцах”: исходные объекты отображаются разными способами в
некоторое пространство оценок*, далее оценки агрегируются в ответ.
*оценка != ответ
Общие подходы
Основные методы:
● усреднение
● линейные комбинации
● смеси экспертов (сумма взвешивающих функций)
● стэкинг
● кастомные правила
Ансамбль работает, когда его компоненты (отображения, оценки) различны,
в идеале -- исправляют ошибки друг друга.
Откуда берется различность?
Источники различности [1]
● предобработка
○ декомпозиция данных
■ по признакам
■ по объектам
○ преобразования признаков
■ log
■ sqrt
■ TF-IDF
■ PCA
■ NMF
■ tSNE
○ комбинации групп и преобразований
● сэмплирование
○ по объектам (bootstrap, undersampling, oversampling)
○ по признакам (RSM)
Источники различности [2]
● разные семейства алгоритмов
○ линейные модели
○ факторизационные машины
○ решающие деревья
○ нейросети
○ kNN
○ ...
● алгоритмы одного семейства, но с разными параметрами
○ глубина деревьев
○ количество соседей
○ число скрытых слоев  нейронов
○ параметры регуляризации
○ число латентных факторов
○ ...
Усреднение (линейная комбинация) [1]
Наиболее простой и очень мощный метод.
Особенно хорошо работает, когда:
● есть случайность в самом алгоритме обучения
● используется сэмплирование
● модели из разных семейств
Вариации:
● взвешенное среднее
● ограничения на коэффициенты (неотрицательность, нормировка)
● усреднение порядков (если в разных шкалах или если l2r-задача)
Усреднение (линейная комбинация) [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: коэффициенты смеси можно подбирать по лидерборду
Смеси экспертов
● сумма взвешенных оценок алгоритмов
● вес gt
-- функция от положения в признаковом пространстве
● линейная комбинация -- частный случай смеси экспертов (gt
= const)
● как учить функции весов?
○ ограничиться некоторым семейством функций
○ подбирать параметры этого семейства
● важный частный случай -- линейное семейство весовых функций
Feature-Weighted Linear Stacking (FWLS) [1]
Feature-Weighted Linear Stacking (FWLS) [2]
● был предложен топ2 командой в соревновании Netflix
● легко реализовать, используя готовый алгоритм линейной регрессии
○ достаточно перемножить каждую оценку на каждый “опорный” признак и решить обычную
задачу регрессии
● использовался победителем в Large Scale Hierarchical Text Classification - Kaggle
● легко обобщить:
○ повышать степень полинома:
■ квадраты
■ кубы
■ …
○ факторизовывать взаимодействие
■ как в факторизационных машинах
Плюсы:
● легко реализовать
● интерпретируемость
Минусы:
● довольно простой класс отображений
● не сложно переобучиться
Стэкинг (Stacking)
● основная идея
○ пытаемся восстановить отображение F методами машинного обучения.
● можем реализовать нелинейны отображения
○ RF  GBDT  NN
● один из самых эффективных способов
○ и самый трудоемкий
● легко переобучиться
○ нужно аккуратно работать с данными
○ используем весь арсенал средств регуляризации
Плюсы:
● нелинейность
● эффективность
Минусы:
● трудоемкость
● легко переобучиться
Stacking  О разделении данных
● не допускайте банальных ошибок
○ обучение и валидация в каждый момент времени не должны пересекаться
● будь данных бесконечно много -- проблем бы не было
○ но их ограниченное количество
○ можно воспользоваться техникой, аналогичной кросс-валидации
● обязательно наличие “честного” hold-out при тестировании идей
○ хотя бы просто разбиение 403030
Stacking  Out-of-fold(k) prediction
● предполагаем, что уменьшение выборки на Nk ~ не изменит модель
● аналогичен кросс-валидации
● разбиение лучше держать фиксированным для всех моделей
● для предсказания на целевом множестве
○ обучаем базовую модель на всем тренировочном множестве
○ требуется хранить всего 1 модель
Stacking  Out-of-fold(2)*M
● предполагаем, что уменьшение выборки на Nk ~ не изменит модель
● идейно схож с out-of-bag оценкой в случайном лесе
● разбиение каждый раз генерируется случайно
● для предсказания на целевом множестве
○ усредняем предсказания каждой из двух моделей на каждом из M шагов
○ требуется запоминать 2*M моделей
Stacking  Out-of-fold (summary)
● Важно понимать, что упомянутые подходы работают, когда выборка
○ достаточно велика
○ i.i.d.
● дефолтный совет
○ использовать OOF(k), 5<k<10
● есть случаи, когда OOF(2)*M работает немного лучше
○ kaggle-otto (решение топ2)
● подробнее можно почитать в дипломе Саши Гущина
Stacking  Мотивация
● Стэкинг работает особенно хорошо, когда
○ признаки разной природы (вещественные  категориальные)
■ kaggle-tradeshift
■ kaggle-crowdflower
○ много целевых переменных (и есть зависимость между ними)
■ kaggle-tradeshift
■ kaggle-wise2014
Небольшое сравнение в цифрах
Алгоритм Результат (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%
Примеры -- CrowdFlower (top1)
Примеры -- CrowdFlower (top3)
Примеры -- Otto (top1)
Примеры -- Otto (top5)
2 уровня обучения -- это хорошо, но…
Что дальше?
● 3 уровня обучения -- вполне реально
● А можно ли сделать 4?
● Будет ли это еще лучше?
● Можно ли заранее оценить “полезность” компонента в смеси?
● Можно ли автоматизировать процедуру построения ансамбля?
Выводы
● характерная эффективность ансамбля: +1-3% качества
● линейные комбинации -- просты и эффективны
● двухуровневое обучение -- это не страшно
● проводите “честное” тестирование мета-признаков
○ хотя бы несколькими разбиениями 40/30/30
● помните основное правило валидации
○ обучение и контроль не должны пересекаться
● полноценный стэкинг требует аккуратности
○ дефолтный совет: out-of-fold(5)
Спасибо за внимание!

More Related Content

Viewers also liked

Make Sense Out of Data with Feature Engineering
Make Sense Out of Data with Feature EngineeringMake Sense Out of Data with Feature Engineering
Make Sense Out of Data with Feature EngineeringDataRobot
 
Featurizing log data before XGBoost
Featurizing log data before XGBoostFeaturizing log data before XGBoost
Featurizing log data before XGBoostDataRobot
 
Аппаратная реализация нейросетевых технологий в технических средствах охраны ...
Аппаратная реализация нейросетевых технологий в технических средствах охраны ...Аппаратная реализация нейросетевых технологий в технических средствах охраны ...
Аппаратная реализация нейросетевых технологий в технических средствах охраны ...motivnt
 
Lessons from 2MM machine learning models
Lessons from 2MM machine learning modelsLessons from 2MM machine learning models
Lessons from 2MM machine learning modelsExtract Data Conference
 
Kaggle Winning Solution Xgboost algorithm -- Let us learn from its author
Kaggle Winning Solution Xgboost algorithm -- Let us learn from its authorKaggle Winning Solution Xgboost algorithm -- Let us learn from its author
Kaggle Winning Solution Xgboost algorithm -- Let us learn from its authorVivian S. Zhang
 
Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
How i became a data scientist
How i became a data scientistHow i became a data scientist
How i became a data scientistOwen Zhang
 
10 R Packages to Win Kaggle Competitions
10 R Packages to Win Kaggle Competitions10 R Packages to Win Kaggle Competitions
10 R Packages to Win Kaggle CompetitionsDataRobot
 

Viewers also liked (8)

Make Sense Out of Data with Feature Engineering
Make Sense Out of Data with Feature EngineeringMake Sense Out of Data with Feature Engineering
Make Sense Out of Data with Feature Engineering
 
Featurizing log data before XGBoost
Featurizing log data before XGBoostFeaturizing log data before XGBoost
Featurizing log data before XGBoost
 
Аппаратная реализация нейросетевых технологий в технических средствах охраны ...
Аппаратная реализация нейросетевых технологий в технических средствах охраны ...Аппаратная реализация нейросетевых технологий в технических средствах охраны ...
Аппаратная реализация нейросетевых технологий в технических средствах охраны ...
 
Lessons from 2MM machine learning models
Lessons from 2MM machine learning modelsLessons from 2MM machine learning models
Lessons from 2MM machine learning models
 
Kaggle Winning Solution Xgboost algorithm -- Let us learn from its author
Kaggle Winning Solution Xgboost algorithm -- Let us learn from its authorKaggle Winning Solution Xgboost algorithm -- Let us learn from its author
Kaggle Winning Solution Xgboost algorithm -- Let us learn from its author
 
Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
How i became a data scientist
How i became a data scientistHow i became a data scientist
How i became a data scientist
 
10 R Packages to Win Kaggle Competitions
10 R Packages to Win Kaggle Competitions10 R Packages to Win Kaggle Competitions
10 R Packages to Win Kaggle Competitions
 

More from MoscowDataFest

DF1 - R - Natekin - Improving Daily Analysis with data.table
DF1 - R - Natekin - Improving Daily Analysis with data.tableDF1 - R - Natekin - Improving Daily Analysis with data.table
DF1 - R - Natekin - Improving Daily Analysis with data.tableMoscowDataFest
 
DF1 - Py - Kalaidin - Introduction to Word Embeddings with Python
DF1 - Py - Kalaidin - Introduction to Word Embeddings with PythonDF1 - Py - Kalaidin - Introduction to Word Embeddings with Python
DF1 - Py - Kalaidin - Introduction to Word Embeddings with PythonMoscowDataFest
 
DF1 - Py - Ovcharenko - Theano Tutorial
DF1 - Py - Ovcharenko - Theano TutorialDF1 - Py - Ovcharenko - Theano Tutorial
DF1 - Py - Ovcharenko - Theano TutorialMoscowDataFest
 
DF1 - ML - Petukhov - Azure Ml Machine Learning as a Service
DF1 - ML - Petukhov - Azure Ml Machine Learning as a ServiceDF1 - ML - Petukhov - Azure Ml Machine Learning as a Service
DF1 - ML - Petukhov - Azure Ml Machine Learning as a ServiceMoscowDataFest
 
DF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text Collections
DF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text CollectionsDF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text Collections
DF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text CollectionsMoscowDataFest
 
DF1 - DL - Lempitsky - Compact and Very Compact Image Descriptors
DF1 - DL - Lempitsky - Compact and Very Compact Image DescriptorsDF1 - DL - Lempitsky - Compact and Very Compact Image Descriptors
DF1 - DL - Lempitsky - Compact and Very Compact Image DescriptorsMoscowDataFest
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkMoscowDataFest
 
DF1 - BD - Degtiarev - Practical Aspects of Big Data in Pharmaceutical
DF1 - BD - Degtiarev - Practical Aspects of Big Data in PharmaceuticalDF1 - BD - Degtiarev - Practical Aspects of Big Data in Pharmaceutical
DF1 - BD - Degtiarev - Practical Aspects of Big Data in PharmaceuticalMoscowDataFest
 

More from MoscowDataFest (8)

DF1 - R - Natekin - Improving Daily Analysis with data.table
DF1 - R - Natekin - Improving Daily Analysis with data.tableDF1 - R - Natekin - Improving Daily Analysis with data.table
DF1 - R - Natekin - Improving Daily Analysis with data.table
 
DF1 - Py - Kalaidin - Introduction to Word Embeddings with Python
DF1 - Py - Kalaidin - Introduction to Word Embeddings with PythonDF1 - Py - Kalaidin - Introduction to Word Embeddings with Python
DF1 - Py - Kalaidin - Introduction to Word Embeddings with Python
 
DF1 - Py - Ovcharenko - Theano Tutorial
DF1 - Py - Ovcharenko - Theano TutorialDF1 - Py - Ovcharenko - Theano Tutorial
DF1 - Py - Ovcharenko - Theano Tutorial
 
DF1 - ML - Petukhov - Azure Ml Machine Learning as a Service
DF1 - ML - Petukhov - Azure Ml Machine Learning as a ServiceDF1 - ML - Petukhov - Azure Ml Machine Learning as a Service
DF1 - ML - Petukhov - Azure Ml Machine Learning as a Service
 
DF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text Collections
DF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text CollectionsDF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text Collections
DF1 - ML - Vorontsov - BigARTM Topic Modelling of Large Text Collections
 
DF1 - DL - Lempitsky - Compact and Very Compact Image Descriptors
DF1 - DL - Lempitsky - Compact and Very Compact Image DescriptorsDF1 - DL - Lempitsky - Compact and Very Compact Image Descriptors
DF1 - DL - Lempitsky - Compact and Very Compact Image Descriptors
 
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache SparkDF1 - BD - Baranov - Mining Large Datasets with Apache Spark
DF1 - BD - Baranov - Mining Large Datasets with Apache Spark
 
DF1 - BD - Degtiarev - Practical Aspects of Big Data in Pharmaceutical
DF1 - BD - Degtiarev - Practical Aspects of Big Data in PharmaceuticalDF1 - BD - Degtiarev - Practical Aspects of Big Data in Pharmaceutical
DF1 - BD - Degtiarev - Practical Aspects of Big Data in Pharmaceutical
 

DF1 - DMC - Trophimov - Tips Tricks and Use-cases of Ensembling in Practice

  • 1. Tips, tricks and use-cases of ensembling in practice Mikhail Trofimov, mikhail.trofimov@phystech.edu, DataFest#1, 12.09.15
  • 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%
  • 24. 2 уровня обучения -- это хорошо, но…
  • 25. Что дальше? ● 3 уровня обучения -- вполне реально ● А можно ли сделать 4? ● Будет ли это еще лучше? ● Можно ли заранее оценить “полезность” компонента в смеси? ● Можно ли автоматизировать процедуру построения ансамбля?
  • 26. Выводы ● характерная эффективность ансамбля: +1-3% качества ● линейные комбинации -- просты и эффективны ● двухуровневое обучение -- это не страшно ● проводите “честное” тестирование мета-признаков ○ хотя бы несколькими разбиениями 40/30/30 ● помните основное правило валидации ○ обучение и контроль не должны пересекаться ● полноценный стэкинг требует аккуратности ○ дефолтный совет: out-of-fold(5)