Выделяют три группы параметров:
1. Общие параметры:
2. Параметры базового алгоритма:
2.1. Дерево решений:
2.2. Линейная модель:
3. Параметры задачи обучения:
Параметры в xgboost.train:
Посмотрим на время обучения классификаторов XGBooster и GradientBoostingClassifier. Для этого будем генерировать выборку из 1000 объектов и 50 признаков с помощью sklearn.datasets.make_classification и замерять время обучения.
import time
import xgboost as xgb
from sklearn.datasets import make_classification
from sklearn.ensemble import GradientBoostingClassifier
from tqdm import tqdm_notebook
xgb_params1 = {
"booster": "gbtree",
"max_depth": 3,
"eta": 0.1,
"silent": 1,
"objective": "binary:logistic",
"nthread": 1,
}
xgb_params2 = {
"booster": "gbtree",
"max_depth": 3,
"eta": 0.1,
"silent": 1,
"objective": "binary:logistic",
"nthread": 4,
}
sklearn_params = {"n_estimators": 100, "max_depth": 3}
xgb_time1 = list()
xgb_time2 = list()
sklearn_time = list()
n_runs = 50
for i in tqdm_notebook(range(n_runs)):
# Generating dataset
X, y = make_classification(n_samples=1000, n_features=50, n_informative=20)
# Training XGBooster (nthread=1)
t = time.time()
bst = xgb.train(xgb_params1, xgb.DMatrix(X, label=y), num_boost_round=100)
elapsed = time.time() - t
xgb_time1.append(elapsed)
# Training XGBooster (nthread=4)
t = time.time()
bst = xgb.train(xgb_params2, xgb.DMatrix(X, label=y), num_boost_round=100)
elapsed = time.time() - t
xgb_time2.append(elapsed)
# Training GradientBoostingClassifier
t = time.time()
clf = GradientBoostingClassifier(**sklearn_params).fit(X, y)
elapsed = time.time() - t
sklearn_time.append(elapsed)
%matplotlib inline
import matplotlib.pyplot as plt
xgb_mean1 = sum(xgb_time1) / n_runs
xgb_mean2 = sum(xgb_time2) / n_runs
sklearn_mean = sum(sklearn_time) / n_runs
plt.figure(figsize=(12, 8))
plt.plot(xgb_time1, label="XGBooster (nthread = 1)", lw=2)
plt.plot(xgb_time2, label="XGBooster (nthread = 4)", lw=2)
plt.plot(sklearn_time, label="GradientBoostingClassifier", lw=2)
plt.legend(loc="best")
plt.text(
1,
(xgb_mean1 + sklearn_mean) / 2,
"XGBoost (nthread = 1) mean time = %.2f" % xgb_mean1
+ "\n\nXGBoost (nthread = 4) mean time = %.2f" % xgb_mean2
+ "\n\nScikit-learn mean time = %.2f" % sklearn_mean,
fontsize=15,
)
plt.xlabel("Iteration number")
plt.ylabel("Running time, sec")
plt.title("XGBoost vs. GradientBoostingClassifier comparison")
plt.show()
Основные преимущества XGBoost по сравнению с sklearn.ensembles.GradientBoostingClassifier: