决策树的生产,基本方法有ID3、C4.5、CART。基于基础决策树学习器,可进一步构建提升树。
ID3
ID3算法的核心在于在决策树各个结点上应用信息增益进行特征选择。从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的分裂特征,由该特征的不同取值分割成子结点。并不断递归地在各结点上进行,直到所有特征的信息增益均小于给定阈值,或没有特征可用为止。
ID3相当于用极大似然法进行概率模型的选择。
训练集(存在类),特征集(非空),阈值
-
从根结点开始,计算所有特征对D的信息增益,其中
的经验熵
经验条件熵
选择信息增益最大的特征 -
如果的信息增益小于阈值,那么不进行结点分割。取结点数据中实例最多的类为结点类标记。
-
否则,对的每个取值,将分割为若干个结点,将中实例最多的类作为子结点的类标记。
-
对第个子结点,以为训练集,为特征集,递归地执行上述操作。
C4.5
对于C4.5算法,其使用信息增益比来选择特征。其中为数据集关于特征的值的熵。
CART
CART算法既可以用于分类也可以用于回归。其假设决策树是二叉树,并递归地二分每个特征。每次遍历所有特征以及特征上的值,选择最小化目标准则的特征与分割点。
对于回归树用最小化平方误差的准则,对于分类树则采取最小化基尼系数的准则。
提升树
提升树则是以分类树和回归树为基本学习器的提升方法。最基本的提升树模型可以表示为决策树的加法模型。
其中表示各个决策树。这里用表示第棵树的权重。对于分类和回归问题,不同之处在于经验误差函数(平方误差、指数损失函数等)。
其基本步骤为:
-
构建初始树。
-
增加第棵树,最小化经验风险
-
新的提升树。
这里因为训练集等权重,故各树也是等权重。一般的AdaBoost算法还要考虑样本数据的权重,计算各子学习器的权重。
例如,对于采用平方误差的回归提升树,最小化经验风险
令表示之前的数与目标输出之间的残差。这意味着新树用来拟合残差。
对于无法直接求解来最小化经验误差的复杂误差函数,可采用梯度提升进行优化。残差用一阶导数来反映
这种计算方式就是GBDT算法。
XGBoost
XGBoost所使用的基础学习器是CART模型。相比GBDT只是用一阶导数,XGBoost对损失函数的改写增加了二阶泰勒展开。
残差就变为
此外完整的XGBoost方法还在损失函数中直接集成了正则项。(实际上上述所有方法都可以在损失函数后加入表示树结构复杂度的正则项,用于剪枝)
其定义的正则化项为
其中表示树叶子结点个数,表示叶子结点的输出值向量,和是相应的超参数。
LightGBM
XGBoost基于CART模型,计算过程中会遍历特征及特征值,这需要对特征值进行预排序。逐个数据样本来计算划分收益,这样的算法能够精确的找到最佳划分值,但是代价比较大同时也没有较好的推广性。
而LightGBM在基础学习器的构建上,是基于直方图的决策树算法。其将这些特征上精确的连续值划分到一系列离散的桶中,简化了数据表示,特减少了内存的使用。同时直方图也带来了一定的正则化效果,提高了可推广性。
基于直方图,LightBGM在构建树的过程上采用按叶生长 leaf-wise 的方法,每次选择能最大化分裂增益的叶子结点,将其分裂为两个叶子结点。这不同于上述算法的按层生长 level-wise 方法。
LightBGM采用GOSS(Gradient-based One-Side Sampling 单边梯度采样)方法对数据采样,排除大部分小梯度的样本,尽量用梯度大的实例。具体到算法上:
- 指定大梯度数据采样率,小梯度数据采样率
- 对当前模型下的数据梯度进行排序,排序后的数据集记为
- 采样全部个大梯度数据
抽取个其余小梯度数据 - 和共同构成下一棵树的训练集
- 中数据的权重放大倍
这样做主要还是为了提升学习速度,用小部分小梯度数据参与计算,来代替原本所有的小梯度数据(权重放大)。
LightBGM还采取EFB(Exclusive Feature Bundling 独立特征绑定)的方法来降低维度。将相互独立的特征合并为一个,减少了特征维度的同时又不丢失信息。对于不完全互斥的特征,采用冲突比率的指标衡量这种不互斥程度,当这个值较小时,也可以将对应的特征绑定在一起。
LightGBM是结合使用GOSS和EFB的GBDT算法。
网友评论