原文来自: Dask Examples
XGBoost可以通过Dask来并行化训练。
XGBoost提供了一个强大的预测框架,在Kaggle竞赛和工业界都表现不错,它具有很好的性能和易解释性。(例如,很容易从XGBoost模型中找到重要的特征。)
1.准备Dask
启动Dask client,可以通过Dashboard来查看各种性能指标。
from dask.distributed import Client
client = Client(n_workers=4, threads_per_worker=1)
client
2.创建数据
首先创建一组合成数据。(20个特征,10万条)
#没有安装dask-ml的执行安装命令!pip install dask-ml
from dask_ml.datasets import make_classification
X, y = make_classification(n_samples=100000, n_features=20,
chunks=1000, n_informative=4,
random_state=0)
X
Dask-XGBoost可以使用Dask arrays和Dask dataframes数据,具体创建方法请参见相关文档。
3.分割训练/测试集
from dask_ml.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15)
4.训练Dask-XGBoost
import dask
import xgboost
import dask_xgboost
dask-xgboost是对xgboost的一个包装,使用Dask来设置XGBoost,提供数据并在后台使用Dask提供的worker来训练XGBoost。
params = {'objective': 'binary:logistic',
'max_depth': 4, 'eta': 0.01, 'subsample': 0.5,
'min_child_weight': 0.5}
bst = dask_xgboost.train(client, params, X_train, y_train, num_boost_round=10)
5.结果可视化
上面获得的bst是一个xgboost.Booster对象。
bst
可以使用XGBoost中的一些函数。
6.绘制特征重要性
%matplotlib inline
import matplotlib.pyplot as plt
ax = xgboost.plot_importance(bst, height=0.8, max_num_features=9)
ax.grid(False, axis="y")
ax.set_title('Estimated feature importance')
plt.show()
绘制ROC曲线
用ROC曲线来度量分类器的好坏,下面给出ROC曲线的绘制方法。
y_hat = dask_xgboost.predict(client, bst, X_test).persist()
y_hat
from sklearn.metrics import roc_curve
y_test, y_hat = dask.compute(y_test, y_hat)
fpr, tpr, _ = roc_curve(y_test, y_hat)
from sklearn.metrics import auc
fig, ax = plt.subplots(figsize=(5, 5))
ax.plot(fpr, tpr, lw=3,
label='ROC Curve (area = {:.2f})'.format(auc(fpr, tpr)))
ax.plot([0, 1], [0, 1], 'k--', lw=2)
ax.set(
xlim=(0, 1),
ylim=(0, 1),
title="ROC Curve",
xlabel="False Positive Rate",
ylabel="True Positive Rate",
)
ax.legend();
plt.show()
ROC曲线,通过曲线左上方的面积来判断分类器的表现。曲线越往上弯曲越好,虚线表示的是随机分类器。
AUC面积,这里的AUC=0.77,表示分类器预测概率。