【算法】决策树模型 & 集成算法模型GBDT

一、决策树模型

决策树算法是一种归纳分类算法,它通过对训练集的学习,挖掘有用的规则,对新数据集进行预测。它属于有监督、非参数学习算法,对每个输入使用该分类区域的训练数据得到对应的局部模型。决策树模型的基本算法是贪心算法,以自顶向下递归的方式构建决策树。
可以用一下集中方法构建决策树。

1. ID3算法

ID3算法的核心思想是最大化信息熵增益。所谓最大化信息熵增益,即每次进行下一次分裂时,计算出所有类别对应当前特征的熵,选择能够十的信息熵增益最大的那一个特征类别进行下一次的分裂。假设在数据D中有 k个类别,其中第i个类别数据在总数据中占有率为p_i,则熵的计算公式为:
请添加图片描述
由于初始数据可以划分的类别不止一项,于是我们需要对已经划分为D类别的数据再次分类,假设此次的类别为A,则类别A对数据集D划分的条件熵为:
请添加图片描述
二者的差值即信息熵增益:
请添加图片描述
【算法】决策树模型 & 集成算法模型GBDT_第1张图片
【算法】决策树模型 & 集成算法模型GBDT_第2张图片
【算法】决策树模型 & 集成算法模型GBDT_第3张图片
【算法】决策树模型 & 集成算法模型GBDT_第4张图片
【算法】决策树模型 & 集成算法模型GBDT_第5张图片

2. C4.5算法

尽管ID3算法能够帮助决策下次分裂特征,但其本身存在一个问题:一般会优先选择有较多属性值的类别,因为属性值多的类别相对于属性值少的类别有相对较大的信息熵增益。

C4.5算法使用增益率作为选择分支的准则,同时引入分裂信息来惩罚取值较多多的分类。其定义为:
请添加图片描述
请添加图片描述
该公式表述的是,每一个类别i所占比重为权重的熵值和代表当前特征D_i的惩罚值。这样,类别数量越多,特征D在样本内部越不趋近于稳定,越不容易被选为当前的分类节点。
以上述例子为例,
【算法】决策树模型 & 集成算法模型GBDT_第6张图片

3. CART算法

CART假设决策树是二叉树,内部节点特征的取值为“是”和“否”。这样的决策树等价于递归的二分每个特征,将输入空间(即特征空间)划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在给定的输入条件下确定输出的条件概率分布。

CART算法由以下两步组成:

  1. 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大。
  2. 决策树剪枝:通过验证数据集对已生成的树进行剪枝并选择最优子树,这时以损失函数最小最为剪枝的标准。

A. CART树生成

CART决策树的生成是递归的构建二叉决策树的过程。CART决策树既可以用于分类,也可以用于回归。对于分类而言,CART以基尼系数最小化准则进行特征选择,生成二叉决策树。【算法】决策树模型 & 集成算法模型GBDT_第7张图片
【算法】决策树模型 & 集成算法模型GBDT_第8张图片
【算法】决策树模型 & 集成算法模型GBDT_第9张图片

【算法】决策树模型 & 集成算法模型GBDT_第10张图片

【算法】决策树模型 & 集成算法模型GBDT_第11张图片
【算法】决策树模型 & 集成算法模型GBDT_第12张图片
之后在依次计算剩下两种分组的GINI系数增加值。

综上: 虽然在原始数据中只有4个分类,但是在计算GINI系数增加值时,需要计算(3+1+1+3)中分组可能。(即A1和A4有三个分类,即有三种划分情况;A2和A3只有两个分类,即有一种划分情况)。

按照这种计算方式依次计算,每次都选取GINI系数增加最大的划分可能,直至数据没有在划分的可能或者数据已经完全分开。

值得注意的是,当数据是连续型时,我们将数据从小到大排列,去相邻两个取值的均值作为划分点。例如,数据为(60,70,80,90),我们分别取65,75,85作为划分点,并且计算划分之后的GINI增加值。

B. CART树剪枝

剪枝方法的本质是在树模型庞大的叶子结点中,挑选对于模型整体影响过量或不重要的部分,将其乃至之后可能出现的分类整体从模型中删除。删除节点的好处在于:提高了对于同类问题的泛化能力,同时由于剪去了部分中间的树叶节点,提高了训练速度。在树模型中,常见的剪枝方式为预剪枝和后剪枝。

预剪枝就是在生成决策树的同时进行剪枝。正常决策树的生成是只要有信息增益就要进行分支。预剪枝就是设定一个阈值,只有在信息增益大于这个阈值的时候(也即是在分类后的信息混乱程度减小程度大于一定标准的时候)才进行分类。如果在信息增益过小的情况下,即使存在信息增益的现象,也不会对其进行分支。预剪枝的思想比较简单,但在实际应用中,预剪枝的表现并不是很好。所以,目前我们基本都是使用后剪枝方法。

后剪枝就是在决策树构造完成后进行剪枝。剪枝的过程是对拥有相同父节点的一组节点进行检查,如果将其合并,熵增小于某一阈值,那么这一组节点可以合并一个节点。如果将其合并后熵增大于这个阈值,那么说明将其分枝是合理的。后剪枝就是删除一些子树,然后用其叶节点代替。这个叶节点代表的子集不一定都是“纯”的。那么,这个叶子节点所标识的类别通过大多数原则确定。大多数原则就是指这个叶节点所代表的子集中大多数的类别来表示这个叶节点。

CART的剪枝主题剋氛围两部分,即子树序列的生成以及交叉验证。

  1. 子树序列的生成:找到一个中间节点,并将后续的所有子节点与叶子结点退回到这个中间节点,这样当前的中间节点就成为一个新的叶子结点,当前新的模型就是原始树模型的一个新的子树模型。而由所有叶子结点由下至上的生成所有子树模型即原始树模型的子树序列。
  2. 交叉验证:依赖所有子树模型的表面误差增益率(即误差的增加速率),选取多个节点组成的子树与交叉验证集合进行验证,选取误差最小的子树作为最优树的结果输出。

【算法】决策树模型 & 集成算法模型GBDT_第13张图片
α表示当前节点剪枝后,对整体模型误差的影响。设α从0增加至正无穷,记做α(i),若α(i)>α(t),则当前节点t可剪枝。
【算法】决策树模型 & 集成算法模型GBDT_第14张图片
【算法】决策树模型 & 集成算法模型GBDT_第15张图片

二、集成算法模型GBDT

梯度提升决策树(Gradient Boosting Decision Tree, GBDT)是一种Boosting算法,Boosting算法的核心思想是:利用前一轮迭代的误差更新训练集的权重,矫正前一轮迭代被错误分类的样本,下一轮迭代会将重心放在上一轮分错的样本上。

GBDT可以看作是由M棵树组成的加法模型,即:
请添加图片描述
虽然GBDT也是一个加法模型,却是通过不断迭代拟合样本真实值与当前分类器的残差来逼近真实值,即
F m ( x ) = F m − 1 ( x ) + α m h m ( x ) F_m(x) =F_{m-1}(x) + \alpha _mh_m(x) Fm(x)=Fm1(x)+αmhm(x)
根据机器学习的思想, h m ( x ) h_m(x) hm(x)优化目标是缩小 F m − 1 ( x ) + a m h m F_{m-1}(x) + a_mh_m Fm1(x)+amhm y i y_i yi之间的差距,即
h m ( x i ) = a r g m i n h ∑ i = 1 n L ( y i , F m − 1 ( x i ) + h ( x i ) ) h_m(x_i)=\underset{h}{argmin}\sum_{i=1}^{n}L(y_i, F_{m-1}(x_i)+h(x_i)) hm(xi)=hargmini=1nL(yi,Fm1(xi)+h(xi))

GBDT算法主要过程如下:

  1. 建立第一个决策树,预测值为 f 0 ( x ) f_0(x) f0(x),初始值为0
  2. 通过选择分裂特征和分裂点,将数据集分为左右两个子节点。计算左右两个节点内数据集 N L N_L NL N R N_R NR的均值,并将其作为预测值 y i y_i yi(我理解的不一定是两个,要是三层的话,可能是四五个,然后分别计算均值作为预测值)
  3. 计算残差: r m , i = y i , − f m − 1 ( x i ) + h ( x i ) , i = 1 , 2 , 3 , . . . , N r_{m,i}=y_i,-f_{m-1}(x_i)+h(x_i), i=1,2,3,...,N rm,i=yi,fm1(xi)+h(xi),i=1,2,3,...,N
  4. 计算损失误差,当误差小于阈值时完成迭代
  5. 从而得到一棵回归树,残差将作为下一步迭代的目标值
  6. 迭代更新预测结果。

在分类树中,一般通过信息熵增益或者信息熵增益率等属性来选择分裂特征和分裂点。在回归树中,一般选择分类增益最大即分类后误差最小的点作为当前的分裂点。

参考资料

  1. 智能搜索和推荐系统 原理、算法与应用 机械工业出版社 刘宇/赵宏宇/刘书斌/孙明珠 著
  2. 分类算法 – 决策树ID3算法
  3. 分类算法 – 决策树C4.5算法
  4. 分类算法 – 决策数CART算法
  5. 决策树的剪枝:REP/PEP/CCP算法

你可能感兴趣的:(算法,决策树,算法,机器学习)