决策时主要用于做分类任务,通过变形也可以做回归任务(叫做回归树)。它是一颗数据结构中的树的概念,它的非叶节点对应属性,叶节点对应预测结果。在我之前关于西瓜书第一章绪论部分的笔记中就提到过,所有的模型都是对现实世界某一个函数的逼近。决策树也不例外。

训练样例是由特征属性和类标组成,而分类任务则是根据这些特征属性来对类标进行预测,与回归任务预测变量是连续值不同,分类任务主要用于预测离散值。神经网络对用户相当于黑匣子,用户输入信息到神经网络中然后就得到神经网络的输出信息,里面的过程对用户隐藏。而决策树是真真实实看得到的。

对于二分类任务(类标只有两个取值,可以理解为一个正一个反)的决策树,可以转换为一个析取表达式,如下图二分类决策树以及它所对应的析取表达式:

决策树回归模型预测数值原因 决策树用于回归_决策树回归模型预测数值原因

决策树适应的问题有如下特征:

1.需要样例是属性-值对,即比如温度:凉爽。

2.目标函数即模型需要逼近的函数,它的输出值必须是离散的。

3.有些问题可以使用析取表示。

4.训练数据可以包含错误信息(即噪声,在我的关于西瓜书第二章的笔记中有提到)。

5.训练数据可以包含一些缺失属性值的样例。

 

建立决策树,当然最根本的做法就是利用某种算法根据训练样例来构建一颗决策树。下面介绍最简单也最基本的ID3算法。

在介绍ID3算法前,需要知道什么是熵和信息增益。

对于不同随机试验,每个随机试验得到的各种结果占总试验的比例是不同的,比如在一个随机试验中只有一个结果,此结果发生的概率就为1,而另一个随机试验它的结果分散以至于每个结果所占比例很小。这就是随机试验的不肯定性,对于只有一个结果发生的随机试验它不存在不肯定性,因为每次试验的结果都是肯定的,就像太阳总从东边升起西边落下。而对于实验结果分散的随机试验它的不肯定性就大。熵就是这个不肯定性程度的度量。

熵的计算公式:

                                                      

决策树回归模型预测数值原因 决策树用于回归_数据集_02

(其中Ai表示各个试验结果,log的底无关紧要,我们需要的只是相对大小关系,而不是绝对的数值)

熵具有如下性质:

1.当且仅当P(Ai) i=1,2,...n 中任意一个为1,则熵为0,也就是上诉所说的随机试验只有一个结果。

2.对于有n个结果的随机试验,等概率试验有最大熵,值为logn。每个结果都等概率发生,不肯定性就很大,每个结果都可能发生,所以熵很大。

在二分类任务中,数据集的纯度是指在数据集中的类标是不是都是一个值,如果都是一个值,那么纯度高。它和熵的描述刚刚相反,熵描述了一次随机试验中的结果的不肯定性,若结果越统一,则熵越小,对于结果数据集纯度越大。所以这里引入熵来刻画任意样例集的纯度。例如下图二分类任务中刻画S数据集的纯度公式:

                                           

决策树回归模型预测数值原因 决策树用于回归_决策树回归模型预测数值原因_03

下面介绍期望熵的概念。假设数据集S中属性A的所有不同值的集合为Values(A),SV是S中属性A的值为v的样本子集,在选择属性A作为根节点后,即用属性A的值划分数据集S,每一个分支对应一个SV,样本集SV的熵为E(SV)。选择属性A为根节点导致的期望熵定义为每个子集SV的熵的加权和,权值为属于SV的样本占原始样本S的比例,即期望熵为:

                                                         

决策树回归模型预测数值原因 决策树用于回归_决策树_04

我们肯定希望决策树能够在很低的层数就有很高的性能,也能够想象决策树越复杂它的泛化性能越低,因为它此时很可能过拟合(过拟合在我的关于西瓜书第二章的笔记中有提到)。很明显期望熵最小的属性作为根节点,在目前看来他会使决策树结构最简单(整体可能不是最优,暂且不考虑),因为期望熵越低说明各个分支分得的样例集纯度更高,而我们构建决策树的终点要么是属性都包含在路径中就结束或者遇到了一个分支纯度为1则结束得到结果,期望熵越低可以想象各个分支按同样的方法会很快得到纯度为1的分支,即决策树层数低结构简单。

ID3中并没有直接使用期望熵而是用了信息增益。属性的信息增益的计算公式:

决策树回归模型预测数值原因 决策树用于回归_数据集_05

即等于数据集S的熵减去属性的期望熵。信息增益越大说明期望熵越小,属性划分数据集更明显。

现在再来看ID3算法的思想就容易多了:

–自顶向下构造决策树

–从“哪一个属性将在树的根节点被测试”开始

–使用统计测试来确定每一个实例属性单独分类训练样例的能力(即使用信息增益)

ID3算法过程:

–分类能力最好的属性被选作树的根节点

–根节点的每个可能值产生一个分支

–训练样例排列到适当的分支

–重复上面的过程

lD3的搜索策略:

–优先选择较短的树

–选择那些信息增益高的属性离根节点较近的树

除了ID3算法,还有在ID3基础上衍生出来的C4.5算法。不管何种算法,他们从顶端向下不断构造树是确定的,至于是使用增益法选择属性作为根节点还是使用其他方法在不同算法中有不同的方法。

对ID3算法的改进思想是使用后修剪法。它允许树过度拟合数据即层数高,然后对这个树进行修剪。思想是从下到上不断剪去叶节点,将数据集的1/3作为测试集,2/3作为训练集,用训练集训练,用测试集测试剪枝后的精度是否提高,如果明细提高则说明剪枝成功,因为我们的目的不是使模型在训练集中表现很好而是泛化能力强。步骤是:1)删除以此结点为根的子树;2)使它成为叶子结点;3) 把和该结点关联的训练样例的最常见分类赋给它。

在ID3算法中对于连续值的属性,可以划分区间来分支。

信息增益度量存在一个内在偏置,它偏袒具有较多值的属性。简单的讲,太多的可能值必然把训练样例分割成非常小的空间,因此,相对训练样例,它会有非常高的信息增益,这样它会很矮但是很宽,比如将数据集中的每个数据项的ID(从1到n)学得了,这样它几乎没有泛化性能。可以通过增益比率代替信息增益来解决这个问题。

公式:

                                  

决策树回归模型预测数值原因 决策树用于回归_信息增益_06

   

对于处理缺少属性值的有很多种方法,可以在数据集中相同类别中选择此属性出现次数最多的属性值等等。

 

组合学习:将不同的模型组合起来做出决策,而不是靠单个的模型做出决策。

主要的方法有:

一、装袋方法(bagging):ID3是一个不稳定的过程,训练数据的稍许变化易导致在某个节点不同的属性被选择。而装袋可以解决这个问题。它的步骤如下:

                                                                     

决策树回归模型预测数值原因 决策树用于回归_决策树_07

l装袋法将随机概念引入学习算法的输入中,产生不同的合成分类器,经常带来极好的效果。随意性越大产生的学习器越具有差异性,差异性可看做互补性,而另一方面却更少利用数据信息,可能造成单个模型的正确率下降,但整体可能更优。

二、提升(boosting):装袋法每个模型都是独立进行的。而提升法它的思路是着眼于前一个模型不能解决的问题,但这样可能导致过拟合。

三、堆栈法:堆栈法不是用于组合同种类型的模型,而是应用于由不同学习算法所建的模型。例:有一个决策树分类器,一个神经网络分类器,一个支持向量机分类器。用三个模型来共同预测结果。

 

随机森林:因为错误的数据即噪声等和ID3算法局部最优解的限制,我们经常在选择属性时,将信息增益最大的k个属性进行随机选择作为根节点,这样可以在一定程度避免局部最优解的限制,这个就是建树中的随机化节点。而袋装法+随机化节点法就构成了构建随机森林的方法。

最后说一下任何算法都有它的适用范围,决策树有它的适用范围,神经网络有它的适用范围,没有一个算法是绝对好的,都是针对具体问题而已。