XGBoost — различия между версиями
Ezamyatin (обсуждение | вклад) |
Ezamyatin (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
− | '''XGBoost''' {{---}} одна из самых популярных и эффективных реализаций алгоритма [[Бустинг,_AdaBoost|градиентного бустинга]] на деревьях на 2019-й год. | + | '''XGBoost'''<ref>[https://github.com/dmlc/xgboost GitHub project webpage]</ref>. {{---}} одна из самых популярных и эффективных реализаций алгоритма [[Бустинг,_AdaBoost|градиентного бустинга]] на деревьях на 2019-й год. |
==История== | ==История== | ||
Строка 26: | Строка 26: | ||
1. Изначально дерево содержит единственную вершину | 1. Изначально дерево содержит единственную вершину | ||
− | 2. Пытаемся разбить каждую вершину и считаем ''gain'' | + | 2. Пытаемся разбить каждую вершину и считаем ''gain''<ref>[https://en.wikipedia.org/wiki/Information_gain_in_decision_trees Information gain in decision trees]</ref> |
3. Жадно сплитим вершину | 3. Жадно сплитим вершину | ||
+ | |||
+ | ==Основные параметр== | ||
+ | * ''eta'' {{---}} размер шага. Пердотвращает переобучение. | ||
+ | * ''gamma'' {{---}} минимальный ''loss'' для совершения ''split'a''. | ||
+ | * ''max_depth'' {{---}} максимальная глубина дерева. | ||
+ | * ''lambda''/''alpha'' {{---}} ''L2''/''L1'' регуляризация. | ||
+ | |||
+ | Более полное описание параметров модели тут<ref>[https://xgboost.readthedocs.io/en/latest/parameter.html XGBoost Parameters]</ref> | ||
==Пример использования с помощью библиотеки xgboost== | ==Пример использования с помощью библиотеки xgboost== | ||
Строка 60: | Строка 68: | ||
best_preds = np.asarray([np.argmax(line) for line in preds]) | best_preds = np.asarray([np.argmax(line) for line in preds]) | ||
print precision_score(y_test, best_preds, average='macro') | print precision_score(y_test, best_preds, average='macro') | ||
+ | |||
+ | ==См. также== | ||
+ | *[[:Дерево решений и случайный лес|Дерево решений и случайный лес]] | ||
+ | *[[:Бустинг, AdaBoost|Бустинг, AdaBoost]] | ||
+ | |||
+ | ==Примечания== | ||
+ | <references/> | ||
+ | == Источники информации == | ||
+ | * [https://arxiv.org/abs/1603.02754 Tianqi Chen, Carlos Guestrin. XGBoost: A Scalable Tree Boosting System] | ||
+ | |||
+ | [[Категория: Машинное обучение]] |
Версия 14:06, 10 марта 2019
XGBoost[1]. — одна из самых популярных и эффективных реализаций алгоритма градиентного бустинга на деревьях на 2019-й год.
Содержание
История
XGBoost изначально стартовал как исследовательский проект Tianqi Chen как часть сообщества распределенного глубинного машинного обучения. Первоначально он начинался как терминальное приложение, которое можно было настроить с помощью файла конфигурации libsvm. После победы в Higgs Machine Learning Challenge, он стал хорошо известен в соревновательный кругах по машинному обеспечению. Вскоре после этого были созданы пакеты для Python и R, и теперь у него есть пакеты для многих других языков, таких как Julia, Scala, Java и т. д. Это принесло библиотеке больше разработчиков и сделало ее популярной среди сообщества Kaggle, где она использовалось для большого количества соревнований.
Она вскоре стала использоваться с несколькими другими пакетами, что облегчает ее использование в соответствующих сообществах. Теперь у нее есть интеграция с scikit-learn для пользователей Python, а также с пакетом caret для пользователей R. Она также может быть интегрирована в рамах потока данных, таких как Apache Spark, Apache Hadoop, и Apache Flink с использованием абстрактных Rabit и XGBoost4J. Принцип работы XGBoost также был опубликован Tianqi Chen и Carlos Guestrin.
Основные преимущества
- Возможность добавлять регуляризацию
- Возможность работать с разреженными данными
- Возможность распределенного обучения
- Эффективная реализация
Идея алгоритма
— функция для оптимизации градиентного бустинга.
Дальше с помощью разложения Тейлора до второго члена можем приблизить это следующим выражением:
, где
,
Минимум этого выражения относительно
находится в точкеПроцесс обучение отдельного дерева
1. Изначально дерево содержит единственную вершину
2. Пытаемся разбить каждую вершину и считаем gain[2]
3. Жадно сплитим вершину
Основные параметр
- eta — размер шага. Пердотвращает переобучение.
- gamma — минимальный loss для совершения split'a.
- max_depth — максимальная глубина дерева.
- lambda/alpha — L2/L1 регуляризация.
Более полное описание параметров модели тут[3]
Пример использования с помощью библиотеки xgboost
from sklearn import datasets iris = datasets.load_iris() X = iris.data y = iris.target
from sklearn.cross_validation import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
import xgboost as xgb
dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test)
param = { 'max_depth': 3, # максимальная глубина дерева 'eta': 0.3, # параметр обучения 'silent': 1, 'objective': 'multi:softprob', # функция потерь 'num_class': 3} # число классов num_round = 20 # число итераций
bst = xgb.train(param, dtrain, num_round) preds = bst.predict(dtest)
import numpy as np from sklearn.metrics import precision_score best_preds = np.asarray([np.argmax(line) for line in preds]) print precision_score(y_test, best_preds, average='macro')