决策树算法汇总

来源:互联网 发布:php safe mode 编辑:程序博客网 时间:2024/06/10 16:11

针对最近学习的决策树模型的CART算法,做一个学习总结。

1、CART、ID3和C4.5

a) 以上三者都属于决策树模型
   决策树:一种基本的分类和回归的算法,以树形结构基于特征对实例进行分类的过程。   决策树优点:1)、决策树模型可读性好,有助于人工分析;2)、效率高,只需一次构建就能反复使用。   比较:决策树与朴素贝叶斯(NBC)是最为广泛使用的两种分类模型,朴素贝叶斯算法的基本假设是特征条件独立假设,而这在实际过程中往往不成立,因此对其正确性分类有影响,在属性个数比较多或属性之间相关性较大时,朴素贝叶斯的分类效率比不上决策树;而在属性相关度较小时,NBC模型性能最好。   应用:
b)决策树模型:
   递归的选择最优的特征,并根据该特征对训练数据进行分割,使得对各个子数据有一个最好的分类。这一过程对于着特征空间的划分,也对应决策树的构建。   决策树算法的重要三点:特征选择   决策树的生成   决策树的修剪   特征选择的过程:   1)ID3:信息增益  g(D,A) = H(D)-H(D|A)   信息增益最高的特征就是最好的选择;   2)C4.5:信息增益比;   3)CART:用于分类时使用基尼系数(Gini index)最小选择最优特征,同时决定该特征的最优二值切分点;用于回归时用平方误差最小准则。   决策树的生成:递归生成决策树  结束条件:程序遍历完所有可能的划分数据集的属性,或者每个分支下面的所有实例都属于同一个类,则终止循环。针对第一种如果遍历完所有的属性还没划分完,一般采用多数表决的方式划分。
c)比较:
   CART和ID3:1)ID3的决策树在实行的过程中,如果一旦按照某种特征进行切分之后,该特征在之后的算法过程中将不会再起作用,也即人们认为的该算法切分过于迅速,而CART的每一个结点的选择和分类都基于所有的特征进行选择,符合条件的进入左子树(右子树),不符合条件的进入右子树(左子树)。   2)ID3不能直接处理连续型特征,只有将连续的特征值转化为离散的,才能用到ID3,但是这种离散化往往会破坏数据的内在特征。而使用CART时,则对于特征值大于给定值时划分为左子树,否则为右子树。

2、CART回归树、线性回归和模型树

a)都能用于回归
   线性回归(局部线性回归除外)基于所有的样本进行数据拟合,但是当数据具有众多特征且特征之间的关系十分复杂时,利用全局模型的想法较难实现,而且实际问题中很多问题是非线性的(例如:分段函数),不可能使用全局线性模型来拟合任何数据。   CART回归树在数据建模时,把叶子节点简单的设置为常数值(平均值);而模型树则是将叶子节点设置为分段线性函数,分段线性函数是指模型由多个线性片段组成。
b)CART回归树实现:
   回归树假设叶子节点的值为常数(算法中均值)。   如何度量数据一致性(也就是如何评判切分结果):计算数据的均值,然后计算每条数据到均值的差值,用总方差度量;当然也可以用平方误差。
c)比较:
   1)模型树的可解释性强于回归树,而且模型树的预测精准度也要高于回归树。   2)回归效果:模型树 > CART回归树> 标准线性回归

3、CART算法:

   CART算法假设决策树为二叉树,内部节点特征的取值为‘是’和‘否’,左分支是取值为‘是’的分支,右分支是取值为‘否’的分支,这样的决策树等价于递归的二分每个特征。
a)回归树
   1)特征选择:平方误差(或总方差)最小准则    算法伪代码:    对每个特征:       对每个特征值(可能取值):           将数据集切分为两部分           计算切分误差(这里用到的是总方差)           如果当前误差小于当前最小误差,那么将当前误差设定为最佳切分并更新最小误差返回最佳切分的特征和阈值   2)决策树生成:递归生成   伪代码:   找到最佳的待切分特征:      如果该节点不在能分,将该节点存为叶子节点      执行二次切分      在左子树递归调用函数      在右子树递归调用函数   3)决策树剪枝:   CART算法构建出来的树会倾向于对数据过拟合。一颗过拟合的树常常十分复杂,剪枝技术的出现就是为了解决这个问题。两种剪枝方法分别是预剪枝(在树的构建中就进行剪枝)和后剪枝(当树构建完毕再剪枝),预剪枝更有效但是需要用户自己定义参数。
预剪枝
   预剪枝时,在树的构建过程中,算法定义了tolN和tolS两个参数用于控制制函数的停止时机。其中tolS是容许的误差下降值,tolN是切分的最小样本数。下图是参数调节过程中的剪枝效果:

这里写图片描述 这里写图片描述
图1 相同tolS时,tolN越大切分越粗糙
这里写图片描述 这里写图片描述
图2 相同tolN时,tolS越大切分越粗糙

参数分析
   模型树参数改变的结果也与上图改变趋势相同,参数分析也与回归树相同。   预剪枝参数分析:tolN越大时(tolS不变),最小切分样本数变大,也即原本可以完成分割的样本现在不能分割,因此切分也越粗糙;   tolS越大时(tolN不变),则容许的误差下降值越大,即只会出现总方差改变较大的分割,如果总方差改变较小,则不会分割,也即分割的效果越不好。
后剪枝
    预剪枝的缺陷:树构建算法对输入的参数tolN和tolS非常敏感,当样本(误差)的数量级上升时,需要不停的修改停止条件,因此出现后剪枝,也即满足条件情况下合并叶节点。    伪代码:    基于已有的树切分测试数据         如果存在任一子树是一棵树,则在该子集递归剪枝过程         计算将当前两个叶节点合并后的误差         计算不合并的误差         如果合并会降低误差,就将叶节点合并   后剪枝时需要将数据集分为测试集和训练集,首先指定参数构建较大的树,使其足够复杂。接下来从上而下的找到叶节点,用测试集来判断将这些叶节点合并是否能降低测试误差。但是从实际情况可以看到,后剪枝的效果不如预剪枝,一般为了寻求最佳模型可以同时使用两种剪枝技术。
b)分类树
  分类树用基尼系数选择最优特征,使用决策树中最基本的二类分类器即可。
0 0
原创粉丝点击