Skip to content

Commit

Permalink
校队XGB部分
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhT515 authored Dec 4, 2021
1 parent d4b4731 commit 9a59313
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions AI算法/machine-learning/XGBoost.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

## 3. 简单介绍一下XGBoost​

$XGBoost$是一种集成学习算法,属于3类常用的集成方法($Bagging$,$Boosting$,$Stacking$)中的$Boosting$算法类别。它是一个加法模型,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。
$XGBoost$是大规模、分布式的通用梯度提升(GBDT)库,它在GB框架下实现了GBDT和一些广义线性ML算法。$XGBoost$是一种集成学习算法,属于3类常用的集成方法($Bagging$,$Boosting$,$Stacking$)中的$Boosting$算法类别。它是一个加法模型,每次迭代都学习一棵CART树来拟合之前 t-1 棵树的预测结果与训练样本真实值的残差。

$XGBoost$对$GBDT$进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行、默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。

Expand All @@ -54,6 +54,7 @@ $XGBoost$对$GBDT$进行了一系列优化,比如损失函数进行了二阶

- **不是说每棵树可以并行训练**,$XGBoost$本质上仍然采用$Boosting$思想,每棵树训练前需要等前面的树训练完成才能开始训练。
- **而是特征维度的并行**:在训练之前,每个特征按特征值对样本进行预排序,并存储为`block`结构,在后面查找特征分割点时可以重复使用,而且特征已经被存储为一个个`block`结构,那么在寻找每个特征的最佳分割点时,可以利用多线程对每个`block`并行计算。
- 注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。

## 6. XGBoost​为什么快?

Expand Down Expand Up @@ -188,4 +189,4 @@ $XGBoost$模型的一个优点就是允许特征存在缺失值。对缺失值
2. https://blog.csdn.net/jamexfx/article/details/93780308
3. https://mp.weixin.qq.com/s/a4v9n_hUgxNyKSQ3RgDMLA
4. https://www.cnblogs.com/pinard/p/6140514.html
5. https://www.zhihu.com/question/63560633/answer/569536833
5. https://www.zhihu.com/question/63560633/answer/569536833

0 comments on commit 9a59313

Please sign in to comment.