Date post: | 16-Jan-2017 |
Category: |
Science |
Upload: | moscowdatafest |
View: | 1,172 times |
Download: | 3 times |
Tips, tricks and use-cases of ensembling in practice
Mikhail Trofimov,[email protected],
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 + dropout\dropconnect + усреденение
● любой конкурс:○ xgboost + сэмплирование(subsample, colsample_bytree) + усреднение
Плюсы: ● легко реализовать, ● эффективная● сложно переобучиться
Минусы:● довольно простой класс отображений
*hint: коэффициенты смеси можно подбирать по лидерборду
Смеси экспертов
● сумма взвешенных оценок алгоритмов● вес gt -- функция от положения в признаковом пространстве● линейная комбинация -- частный случай смеси экспертов (gt = const)● как учить функции весов?
○ ограничиться некоторым семейством функций○ подбирать параметры этого семейства
● важный частный случай -- линейное семейство весовых функций
Feature-Weighted Linear Stacking (FWLS) [2]● был предложен топ2 командой в соревновании Netflix● легко реализовать, используя готовый алгоритм линейной регрессии
○ достаточно перемножить каждую оценку на каждый “опорный” признак и решить обычную задачу регрессии
● использовался победителем в Large Scale Hierarchical Text Classification - Kaggle● легко обобщить:
○ повышать степень полинома:■ квадраты■ кубы■ …
○ факторизовывать взаимодействие■ как в факторизационных машинах
Плюсы: ● легко реализовать● интерпретируемость
Минусы:● довольно простой класс отображений● не сложно переобучиться
Стэкинг (Stacking)
● основная идея○ пытаемся восстановить отображение F методами машинного обучения.
● можем реализовать нелинейны отображения○ RF \ GBDT \ NN
● один из самых эффективных способов○ и самый трудоемкий
● легко переобучиться○ нужно аккуратно работать с данными○ используем весь арсенал средств регуляризации
Плюсы: ● нелинейность● эффективность
Минусы:● трудоемкость● легко переобучиться
Stacking \ О разделении данных● не допускайте банальных ошибок
○ обучение и валидация в каждый момент времени не должны пересекаться
● будь данных бесконечно много -- проблем бы не было○ но их ограниченное количество○ можно воспользоваться техникой, аналогичной кросс-валидации
● обязательно наличие “честного” hold-out при тестировании идей○ хотя бы просто разбиение 40\30\30
Stacking \ Out-of-fold(k) prediction
● предполагаем, что уменьшение выборки на N\k ~ не изменит модель● аналогичен кросс-валидации● разбиение лучше держать фиксированным для всех моделей● для предсказания на целевом множестве
○ обучаем базовую модель на всем тренировочном множестве○ требуется хранить всего 1 модель
Stacking \ Out-of-fold(2)*M
● предполагаем, что уменьшение выборки на N\k ~ не изменит модель● идейно схож с 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)
Спасибо за внимание!