XGBoost算法分析与案例调参实例
开源学习地址:在这里插入代码片datawhale
1.XGBoost算法
XGBoost是一种优化的分布式梯度提升库,在Gradient Boosting框架下实现。XGBoost利用了核外计算并能使数据科学家在一个主机上处理数亿的样本数据,最终将这些技术进行结合,做一个端到端的系统以最少的集群系统来扩展到更大的数据集上。
XGBoost的子模型为决策树,通过Gradient Tree Boosting来实现多棵CART树的学习。具体模型公式推导参考开源学习地址。
XGBoost算法的关键在于生成决策树,决策树的生成需要考虑最优特征和最优切分点,XGBoost中提高三种算法进行节点分裂,生成决策树。
- 精确贪心分类算法
- 启发式算法,在节点分裂时只选择当前最优的分裂策略,而非全局最优的分裂策略。
- 近似算法:用直方图进行近似,对某一特征按分位数(如百分位)分桶,计算所有候选特征及候选切分点中对应桶的特征统计收益最大的作为最优特征及最优切分点。
- 近似算法全局策略:在树构建的初始阶段对每一个特征确定一个候选切分点的集合,并在该树每一层的节点分裂中均采用此集合计算收益,整个过程候选切分点集合不变。需要更细的分桶才能达到本地策略的精确度,在选取候选切分点集合时比本地策略更简单。
- 近似算法本地策略:在每一次节点分裂时均重新确定候选切分点。
2.sklearn中的XGBoost库
2.1 调参
参数调优的一般步骤:
- 确定学习率和参数初始值
- max_depth和min_child_weight参数调优
- gamma参数调优
- subsample和 colsample_bytree参数调优
- 正则化参数alpha调优
- 降低学习速率和使用更多的决策树
2.2 数据接口
# 1.LibSVM文本格式文件
dtrain = xgb.DMatrix('train.svm.txt')
dtest = xgb.DMatrix('test.svm.buffer')
# 2.CSV文件(不能含类别文本变量,如果存在文本变量请做特征处理如one-hot)
dtrain = xgb.DMatrix('train.csv?format=csv&label_column=0')
dtest = xgb.DMatrix('test.csv?format=csv&label_column=0')
# 3.NumPy数组
data = np.random.rand(5, 10) # 5 entities, each contains 10 features
label = np.random.randint(2, size=5) # binary target
dtrain = xgb.DMatrix(data, label=label)
# 4.scipy.sparse数组
csr = scipy.sparse.csr_matrix((dat, (row, col)))
dtrain = xgb.D