
用通俗的语言来解释 GBDT 算法是一个有挑战性的事情。尤其是对 GBDT 中先用1号树模型去拟合Y值得到了残差E值然后再用2号树模型去拟合E值最后把1号模型和2号模型相加得到之中的Y值估计值。说起来容易解释起来很有难度。这里尝试使用一个最简单的例子去解释上面所说的 GBDT 算法原理。先给出数据前三个性别、地区、年龄都是特征变量X最后的生活成本是标签变量Y。性别地区年龄生活成本Y男城市老年440男乡村老年320女城市老年220女乡村老年120男城市青年360男乡村青年280女城市青年180女乡村青年80一1号树模型的构建为了解释 GBDT 原理我们限制树模型的深度只能是2层即代码中的超参数 max_depth2。这是因为在我这个简单的示例中如果树模型的深度允许是3层的话一棵1号树模型就搞定了这个问题此时 GBDT模型的结果就是 决策树 模型的结果此时就不用解释 GBDT 了。在树模型的深度只能是2层的限制下咱们手动计算一下1号树模型的结果过程如下GBDT 模型采用的是 最小化残差平方和 squared error的准则来确定分支的。这个例子中就3个特征变量性别、地区、年龄你自己算一下并很容易算出首先采用 “性别”作为分裂因为采用“性别”作分裂的残差平方和是 25600是最小的。采用“地区”作分裂的残差平方和是 85600采用“年龄”作分裂的残差平方和是 100600. PS个人手算可能不对但是不影响“性别”分裂 SE 最小的结论这就是树模型的第一层。因为深度是2层我们需要做出 2 层。同样是根据最小化残差平方和 squared error的准则可以判断出第2层分裂采用 “地区”特征进行。于是我们得到 1 号树模型如下二2号树模型的构建1号模型整完后我们得到的残差E 如下图性别地区年龄生活成本Y1号模型预测值残差值E男城市老年44040040男乡村老年32030020女城市老年22020020女乡村老年12010020男城市青年360400-40男乡村青年280300-20女城市青年180200-20女乡村青年80100-20我们同样是用一个深度为2的树模型去拟合残差值E。同样是采用 最小化残差平方和 squared error的准则来确定分支的。这个例子中就3个特征变量性别、地区、年龄你自己算一下并很容易算出首先采用 “年龄”作为分裂因为采用“年龄”作分裂的残差平方和是 600是最小的。然后采用“性别”或者“地区”作分裂的残差平方和都是 5600 可以计算二者在下一层的分裂是没有差异的。随后第二层我们对老年分支采用选“性别”做分裂对青年分支选用“地区”做分裂。这样做是因为 sklearn 是这样选的于是我们得到 2 号树模型如下三1号模型2号树模型的结果有了 1号模型和2号模型后我们就可以对生活成本Y进行最终的预测它就是两个模型的预测值之和见下表。性别地区年龄生活成本Y1号模型预测值残差值E2号模型残差E预测值生活成本Y的预测值男城市老年4404004030430男乡村老年3203002030330女城市老年2202002020220女乡村老年1201002020120男城市青年360400-40-30370男乡村青年280300-20-20280女城市青年180200-20-30170女乡村青年80100-20-2080四python sklearn的验证代码上面的理论推导可以使用 python 中的 sklearn 验证一下。前期的一堆非重要代码就略去了只把关键的一句如下est GradientBoostingRegressor( n_estimators1, learning_rate1, \ max_depth3, random_state0, losssquared_error ).fit(x, y)PyCharm跑完的结果对比如下当然目前的拟合结果在第0、1、4、6行依然有残差这个可以通过代码中的超参 n_estimators 和 max_depth 的改变进行优化。比如 让 n_estimators1 和 max_depth3你立马就可以得到一个完美的决策树模型。你也可以保持 max_depth2 但让 n_estimators3对残差继续加一个3号模型进行拟合从而进一步让预测值靠近样本值。n_estimators3的算法原理和 n_estimators3 是一样的因此在这里也就不再赘述了。能够理解n_estimators2 的场景已经就可以理解 GBDT 的算法原理了。以上就是对 GBDT 算法原理的手动解释。