http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Ezamyatin&feed=atom&action=history
Участник:Ezamyatin - История изменений
2024-03-28T20:09:12Z
История изменений этой страницы в вики
MediaWiki 1.30.0
http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Ezamyatin&diff=69854&oldid=prev
Ezamyatin: Новая страница: «'''XGBoost''' {{---}} одна из самых популярных и эффективных реализаций алгоритма Бустинг,_AdaBoost|…»
2019-02-09T14:49:59Z
<p>Новая страница: «'''XGBoost''' {{---}} одна из самых популярных и эффективных реализаций алгоритма Бустинг,_AdaBoost|…»</p>
<p><b>Новая страница</b></p><div>'''XGBoost''' {{---}} одна из самых популярных и эффективных реализаций алгоритма [[Бустинг,_AdaBoost|градиентного бустинга]] на деревьях на 2019-й год.<br />
<br />
==Основные преимущества==<br />
* Возможность добавлять [[Регуляризация|регуляризацию]]<br />
* Возможность работать с разреженными данными<br />
* Возможность распределенного обучения<br />
* Эффективная реализация<br />
<br />
==Идея алгоритма==<br />
<tex>\mathcal{L}^{(t)} = \sum_{i=1}^n l(y_i,\hat{y_i}^{(t-1)}+f_t(x_i))+\Omega(f_t)</tex> {{---}} функция для оптимизации градиентного бустинга.<br />
<br />
Дальше с помощью разложения Тейлора до второго члена можем приблизить это следующим выражением:<br />
<br />
<tex>\mathcal{L}^{(t)} = \sum_{i=1}^n l(y_i,\hat{y_i}^{(t-1)}) + g_i f_t(x_i) + 0.5 h_i f_t^2(x_i)) + \Omega(f_t)</tex>, где<br />
<br />
<tex>g_i = \frac {\partial {l(y_i,\hat{y_i}^{t-1})}}{\partial{\hat{y_i}^{t-1}}}</tex>, <tex>h_i = \frac {\partial^2 {l(y_i,\hat{y_i}^{t-1})}}{\partial^2{\hat{y_i}^{t-1}}}</tex><br />
<br />
Минимум этого выражения относительно <tex>f_t(x_i)</tex> находится в точке <tex>f_t(x_i) = \frac{-g_i}{h_i}</tex><br />
<br />
===Процесс обучение отдельного дерева===<br />
1. Изначально дерево содержит единственную вершину<br />
<br />
2. Пытаемся разбить каждую вершину и считаем ''gain''<br />
<br />
3. Жадно сплитим вершину<br />
<br />
==Пример использования с помощью библиотеки xgboost==<br />
<br />
from sklearn import datasets<br />
iris = datasets.load_iris()<br />
X = iris.data<br />
y = iris.target<br />
<br />
from sklearn.cross_validation import train_test_split<br />
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)<br />
<br />
import xgboost as xgb<br />
<br />
dtrain = xgb.DMatrix(X_train, label=y_train)<br />
dtest = xgb.DMatrix(X_test, label=y_test)<br />
<br />
param = {<br />
'max_depth': 3, # максимальная глубина дерева<br />
'eta': 0.3, # параметр обучения <br />
'silent': 1, <br />
'objective': 'multi:softprob', # функция потерь<br />
'num_class': 3} # число классов<br />
num_round = 20 # число итераций<br />
<br />
bst = xgb.train(param, dtrain, num_round)<br />
preds = bst.predict(dtest)<br />
<br />
import numpy as np<br />
from sklearn.metrics import precision_score<br />
best_preds = np.asarray([np.argmax(line) for line in preds])<br />
print precision_score(y_test, best_preds, average='macro')</div>
Ezamyatin