一、决策树模型与学习:

1、决策树模型:

  • 决策树:决策树由节点有向边组成,节点有两种类型:一种是内部节点,其表示一个特征或属性,一种是叶节点表示一个类别。

2、决策树与条件概率分布:

  • 决策树可以表示为:给定特征条件下类的条件概率分布;这一条件概率分布定义在特征空间的一个划分上;这个划分将特征空间划分为互不相交的单元,并且在每个单元上定义一个类的概率分布这个类的概率分布其实质就是在这个单元中的样本属于某一类的概率,可以理解为一个长度为类个数的列表,列表中的元素就是该单元中的样本属于某一类的概率,这个概率一般是通过统计训练样本得到;每个单元的类的概率分布就构成了决策树所表示的条件概率分布
  • 决策树中的每条路径对应于划分中的一个单元。即决策树的每个叶节点对应于一个单元
  • 假设XX为表示特征向量的随机变量,YY表示类的随机变量,条件概率分布可以表示为P(YX)P(Y|X)XX取值为给定划分下单元的集合(实质上XX的取值应该是某个样本,但样本一定是落在某个单元中的,而每个单元类的概率分布是一样的,所以可以理解为XX的取值为某个划分单元)YY取值为类的集合。
  • 各叶结点(单元)往往偏向某一个类, 即属于概率较大的某一类。 决策树分类时将该叶结点(单元)的实例强行分到条件概率大的那一类中去。
  • 上面的描述可能有点抽象小面用一个列子来解释一下:
    《统计学习方法》:第五章:决策树
    图1是一个划分,图2是一个概率分布,图3是决策树,他们的对应关系我用红色数字标出来了;从图2我们可以看出:单元1全是+1的样本,单元2全是-1的样本,单元3全是-1的样本数多于+1的样本数,单元4全是+1的样本数多于-1的样本数。

3、决策树的学习:

  • 假设训练集为:D={(x1,y1),(x2,y2),,(xN,yN)}D=\{(x_1,y_1 ),(x_2,y_2 ),…,(x_N,y_N )\}其中xi=(xi1,xi2,,xin),y={1,2,,K}x_i=(x_i^1,x_i^2,…,x_i^n ),y=\{1,2,…,K\}
  • 决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练集不相矛盾的决策树可能有多个,我们需要的是一个于训练集矛盾较小同时又有很好的泛化能力的决策树。
  • 总统思路:
    • 决策树学习的算法通常是一个递归地选择最优特征的过程,并根据该最优特征对训练数据进行分割,使得分割得到的子集数据集有一个最好的分类。这一过程对应着对特征空间的划分,也对应着决策树的构建。
  • 过程:
    • 开始,构建根结点,将所有训练数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。
    • 然后递归向下处理子集:
      • 如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;
      • 如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此递归地进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。
    • 最后每个子集都被分到叶结点上,即都有了明确的类。这就生成了一棵决策树
  • 剪枝:
    • 以上方法生成的决策树可能会发生过拟合的现象。
    • 这时我们需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。
    • 具体说就是:去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。
  • 决策树学习算法主要包含:特征选择决策树的生成决策树的剪枝
  • 决策树学习常用的算法有:ID3、C45与CART

二、特征选择:

  • 在上面决策树的学习过程中需要选择一个最优的特征;那么什么是最优特征?怎样选择最优特征?
  • 最优特征指的是对训练数据具有分类能力的特征。如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。经验上扔掉这样的特征对决策树学习的精度影响不大。
  • 通常选择最优特征的准则信息增益信息增益比

1、信息增益:

  • 熵(entropy):

    • 在信息论与概率统计中, 是表示随机变量不确定性的度量.
    • XX是一个取有限个值的离散随机变量,其概率分布为:P(X=xi)=pi;i=12nP(X=x_i )=p_i; i=1,2,,n则随机变量XX定义为:H(X)=inpilogpiH(X)=-∑_i^np_i log⁡p_i 其中规定0log0=00log0=0loglog的底可以是22ee对应的熵的单位是比特(bit)纳特(nat)
    • 熵越大随机变量的不确定性就越大。
    • 当随机变量只取两个值:1,0时,即XX的分布为:P(X=1)=pP(X=0)=1p0p1P(X=1)=p,P(X=0)=1-p,0≤p≤1熵的公式如下:H(p)=plog2p(1p)log2(1p)H(p)=-plog_2 p-(1-p) log_2⁡(1-p)变化图如下:
      《统计学习方法》:第五章:决策树
    • p=0p=0p=1p=1H(p)=0H(p)=0,随机变量完全没有不确定性.当p=0.5p=0.5时,H(p)=1H(p)=1,熵取值最大,随机变量不确定性最大.
  • 条件熵(conditional entropy):

    • 设有随机变量(Xy)(X,y),其联合概率分布为:P(X=xi,Y=yj)=Piji=1,2,,nj=1,2,,mP(X=x_i,Y=y_j )=P_{ij},i=1,2,…,n;j=1,2,…,m
    • 条件熵H(YX)H(Y|X)表示在己知随机变量XX的条件下随机变量YY的不确定性.定义为XX给定条件下YY的条件概率分布的熵对XX的数学期望:H(YX)=i=1npiH(YX=xi)H(Y│X)=∑_{i=1}^np_i H(Y│X=x_i ) 这里:pi=P(X=xi)i=1,2,,np_i=P(X=x_i ),i=1,2,…,n.
  • 当熵和条件熵公式中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵和经验条件熵

  • 信息增益(information gain):

    • 信息增益:表示得知特征XX的信息而使得类YY的信息的不确定性减少的程度.
    • 特征AA对训练数据集DD的信息增益g(D,A)g(D,A),定义为集合DD的经验熵H(D)H(D)与特征AA给定条件下DD的经验条件熵H(DA)H(D|A)之差,即:g(D,A)=H(D)H(DA)g(D,A)=H(D)-H(D|A)
    • H(Y)H(Y)与条件熵H(YX)H(Y|X) 之差称为互信息.决策树学习中的信息增益等价于训练数据集中类与特征的互信息.
  • 信息增益算法:

    • 设训练数据集为DD||表示样本个数。类别为:Ckk=1,2,,KC_k,k=1,2,…,KCk|C_k|表示属于CkC_k的样本个数.设特征AAnn个不同的取值a1,a2,,an{a_1,a_2,…,a_n},根据特征AA的取值将DD划分为nn个子集D1,D2,,DnD_1,D_2,…,D_n。记子集DiD_i,中属于类CkC_k,的样本的集合为DikD_{ik}
    • 输入:训练数据集DD和特征AA
    • 输出:特征AA对训练集DD的信息增益g(D,A)g(D,A)
    • 第一步:计算数据集DD的经验熵H(D)H(D):H(D)=k=1KCkDlog2CkDH(D)=-∑_{k=1}^K\frac{|C_k |}{|D|} log_2⁡\frac{|C_k |}{|D|}
    • 第二步:计算特征AA对数据集DD的经验条件熵H(DA)H(D|A):H(DA)=i=1nDiDH(Di)=i=1nDiDk=1KCikDilog2CikDiH(D|A)=∑_{i=1}^n\frac{|D_i |}{|D|} H(D_i)=-∑_{i=1}^n\frac{|D_i |}{|D|} ∑_{k=1}^K\frac{|C_{ik} |}{|D_i |} log_2\frac{⁡|C_{ik} |}{|D_i |}
    • 第三步:计算信息增益:g(D,A)=H(D)H(DA)g(D,A)=H(D)-H(D|A)

2、信息增益比:

  • 信息增益值的大小是相对于训练数据集而言的,并没有绝对意义.在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大.反之,信息增益值会偏小
  • 使用信息增益比可以对上面这一问题进行修复.这是特征选择的另一准则.
  • 信息增益比:
    • 特征A对训练数据集DD的信息增益比gR(D,A)g_R (D,A)定义为:其信息增益g(D,A)g(D,A)与训练数据集DD的经验熵H(D)H(D)之比:gR(D,A)=g(D,A)H(D)g_R (D,A)=\frac{g(D,A)}{H(D)}

三、决策树的生成:

1、ID3 算法:

  • ID3算法的核心是:在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树.
  • 具体方法是
    • 从根结点开始,每个结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为当前结点的特征,由该特征的不同取值对该节点的样本进行划分,并建立子结点;
    • 再对子结点递归地调用以上方法,构建决策树;
    • 直到所有特征的信息增益均很小或没有特征可以选择为止.
  • ID3算法:
    • 输入:训练数据集DD,特征集AA,阈值εε
    • 输出:决策树TT.
    • 第一步:若DD中所有实例属于同一类CkC_k,则TT为单结点树,并将类CkC_k作为该结点的类标记,返回TT
    • 第二步:若A=ϕA=ϕ,则TT为单结点树,并将DD中实例数最多的类CkC_k,作为该结点的类标记,返回TT
    • 第三部:计算AA中各特征对DD的信息增益,选择信息增益最大的特征AgA_g
    • 第四部:如果AgA_g的信息增益小于阈值εε,则置TT为单结点树,并将DD中实例数最多的类CkC_k,作为该结点的类标记,返回TT
    • 第五部:如果AgA_g的信息增益大于阈值εε,对AgA_g的每一可能取值aia_i,依Ag=aiA_g=a_iDD分割为若干非空子集DiD_i,将DiD_i中实例数最大的类作为标记,构建子结点,由该结点及其子结点构成树TT,返回TT
    • 第六部:对第ii个子结点,以DiD_i为训练集,以AAgA-A_g为特征集,递归地调用步(1)~步(5),得到子树TT,返回TT.

2、C4.5 算法:

  • C4.5算法对ID3算法进行了改进.C4.5在生成的过程中,用信息增益比来选择特征.
  • C4.5算法:
    • 输入:训练数据集DD,特征集AA,阈值εε
    • 输出:决策树TT.
    • 第一步:若DD中所有实例属于同一类CkC_k,则TT为单结点树,并将类CkC_k作为该结点的类标记,返回TT
    • 第二步:若A=ϕA=ϕ,则TT为单结点树,并将DD中实例数最多的类CkC_k,作为该结点的类标记,返回TT
    • 第三部:计算AA中各特征对DD的信息增益比,选择信息增益最大的特征AgA_g
    • 第四部:如果AgA_g的信息增益比小于阈值εε,则置TT为单结点树,并将DD中实例数最多的类CkC_k,作为该结点的类标记,返回TT
    • 第五部:如果AgA_g的信息增益比大于阈值εε,对AgA_g的每一可能取值aia_i,依Ag=aiA_g=a_iDD分割为若干非空子集DiD_i,将DiD_i中实例数最大的类作为标记,构建子结点,由该结点及其子结点构成树TT,返回TT
    • 第六部:对第ii个子结点,以DiD_i为训练集,以AAgA-A_g为特征集,递归地调用步(1)~步(5),得到子树TT,返回TT.

四、决策树的剪枝:

  • 设树TT的叶结点个数为T|T|,假设tt是树TT的叶结点,该叶结点有NtN_t个样本点,其中kk类的样本点有NtkN_{tk}个,k=1,2,,Kk=1,2,…,KHt(T)H_t (T)为叶结点tt上的经验熵,α0α≥0为参数,则决策树学习的损失函数可以定义为:Cα(T)=t=1TNtHt(T)+αTC_α (T)=∑_{t=1}^TN_t H_t (T) +α|T|其中经验熵为:Ht(T)=kKNtkNtlogNtkNtH_t (T)=-∑_k^K\frac{N_{tk}}{N_t} log \frac{N_{tk}}{N_t} 在损失函数中,令:C(T)=t=1TNtHt(T)=t=1TkKNtNtkNtlogNtkNt=t=1TkKNtklogNtkNtC(T)=∑_{t=1}^TN_t H_t (T) =-∑_{t=1}^T∑_k^KN_t \frac{N_{tk}}{N_t} log \frac{N_{tk}}{N_t} =-∑_{t=1}^T∑_k^KN_{tk} log \frac{N_{tk}}{N_t }则有:Cα(T)=C(T)+αTC_α (T)=C(T)+α|T|C(T)C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度,T|T|表示模型复杂度,参数α0α≥0控制两者之间的影响.较大的αα促使选择较简单的模型,较小的αα促使选择较复杂的模型(树).α=0α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂度.
  • 这样剪枝就是当αα确定时,选择损失函数最小的模型,即损失函数最小的子树,这个子树的含义是:剪枝只在使用生成算法已经生成好的决策树和该树的子树中间选择损失最小的模型。子树越大,往往与训练数据的拟合越好,但是模型的复杂度就越高;相反,子树越小,模型的复杂度就越低,但是往往与训练数据的拟合不好.损失函数正好表示了对两者的平衡.
  • 经过上面分析我们可以这样理解:
    • 决策树生成阶段:使用生成算法生成决策树,这时使用的损失函数是C(T)C(T),这样生成一颗很大和复杂的决策
    • 剪枝阶段:我们可以将这一阶段理解为,我们将上一阶段的生成的决策树进行随机的剪枝,生成很多上一阶段生成的决策树的子树。然后使用Cα(T)C_α (T)作为损失函数来选择一颗该损失函数最小的子树作为最后的决策树
  • C4.5算法:
    • 输入:生成算法产生的整个树TT,参数αα
    • 输出:修剪后的子树TαT_α,.
    • 第一步:计算每个结点的经验熵.
    • 第二步:递归地从树的叶结点向上回缩.
      • 当回溯到某个节点将其下面的子树剪掉,将没剪之前的树和剪了之后的树分别记为:TBT_BTAT_A。如果Cα(TA)Cα(TB)C_α (T_A )≤C_α (T_B ),就直接剪掉,反之将还原到原来的树。
    • 第三步:重复第二步直到回溯到根节点,得到损失函数最小的子树TαT_α.

五、CART算法:

  • CART树又叫分类与回归树
  • CART算法假设决策树是二叉树,内部结点特征的取值为“是”和“否”,左分支是取值为“是”的分支,右分支是取值为“否”的分支.这样的决策树等价于递归地二分每个特征,将输入空间即特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,也就是在输入给定的条件下输出的条件概率分布.
  • CART算法由以下两步组成
    • 决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
    • 决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准.

1、CART 生成:

  • 特征选择
    • 回归树平方误差最小化准则,对分类树基尼指数最小化准则,进行特征选择,生成二叉树.
  • 回归树的生成
    • 假设XXYY分别为输入和输出变量,并且YY是连续变量,给定训练数据集:D={(x1,yj),(x2y2),,(xNyN)}D=\{(x_1,y_j ),(x_2,y_2 ),…,(x_N,y_N )\}其中xi=(xi1,xi2,,xin)x_i=(x_i^1,x_i^2,…,x_i^n )
    • 一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值.假设将输入空间划分为MM个单元R1,R2,,RMR_1,R_2,…,R_M,并且在每个单元RmR_m上有一个固定的输出值cmc_m,于是回归树模型可表示为:f(x)=m=1McmI(xRm)f(x)=∑_{m=1}^Mc_m I(x∈R_m)
    • 损失函数:均方误差xRm(yif(xi))2∑_{x∈R_m}(y_i-f(x_i ))^2
    • 输入空间划分方法:
      • 采用启发式的方法,选择第j个属性变量x(j)x^{(j)}和它取的值ss,作为切分变量和切分点,将数据切分为两个区域:R1(j,s)=(xx(j)s)R_1 (j,s)=(x│x^{(j) }≤s)R2(j,s)=(xx(j)>s)R_2 (j,s)=(x|x^{(j)}>s)
      • 然后寻找最优切分变量jj和最优切分点ss:minj,s[minc1xR1(j,s)(yic1)2+minc2xR2(j,s)(yic2)2]\min_{j,s} [\min_{c_1 }⁡∑_{x∈R_1(j,s)}(y_i-c_1 )^2 +\min_{c_2 }⁡∑_{x∈R_2(j,s)}(y_i-c_2 )^2 ]
      • 若确切分变量jj可以通过上面式子找到最优切分点ss.并且上式中c1c_1c2c_2为:c1^=ave(yixiR1(j,s))\hat{c_1 }=ave(y_i |x_i∈R_1 (j,s))c2^=ave(yixiR2(j,s))\hat{c_2 }=ave(y_i |x_i∈R_2 (j,s))遍历所有切分变量,找到最优的切分变量jj和划分点ss.再将输入空间划分为两个区域。两个区域的输出为:c1^\hat{c_1 }c2^\hat{c_2}。接着对每个区域重复上述划分过程,直到满足停止条件为止。
      • 这样就生成一棵回归树;通常称为最小二乘回归树
    • 最小二乘回归树生成算法:
      • 输入:训练数据集DD
      • 输出:回归树f(x)f(x).
      • 第一步:选择最优切分变量jj与切分点ss,求解:minj,s[minc1xR1(j,s)(yic1)2+minc2xR2(j,s)(yic2)2]\min_{j,s} [\min_{c_1 }⁡∑_{x∈R_1(j,s)}(y_i-c_1 )^2 +\min_{c_2 }⁡∑_{x∈R_2(j,s)}(y_i-c_2 )^2 ]遍历所有属性变量jj,对固定的切分变量jj扫描切分点ss,选择使式上述达到最小值的对(j,s)(j,s).
      • 第二步:用选定的对(j,s)(j,s)划分区域并决定相应的输出值:R1(j,s)=(xx(j)s)R_1 (j,s)=(x│x^{(j) }≤s)R2(j,s)=(xx(j)>s)R_2 (j,s)=(x|x^{(j)}>s)对应输出为:c1^=ave(yixiR1(j,s))\hat{c_1 }=ave(y_i |x_i∈R_1 (j,s))c2^=ave(yixiR2(j,s))\hat{c_2 }=ave(y_i |x_i∈R_2 (j,s))
      • 第三步:继续对两个子区域调用步骤一和二,直至满足停止条件.
      • 第四步:将输入空间划分为MM个单元R1,R2,,RMR_1,R_2,…,R_M,生成决策树:f(x)=m=1McmI(xRm)f(x)=∑_{m=1}^Mc_m I(x∈R_m)
  • 分类树的生成:
    • 分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点.
    • 基尼指数:
      • 在分类问题中,假设有KK个类,样本点属于第k类的概率为pkp_k,则概率分布的基尼指数定义为:Gini(P)=k=1Kpk(1pk)=1k=1Kpk2Gini(P)=∑_{k=1}^Kp_k (1-p_k)=1-∑_{k=1}^Kp_k^2
      • 对于给定的样本集合DD,其基尼指数为:Gini(D)=1k=1K(CkD)2Gini(D)=1-∑_{k=1}^K(\frac{|C_k |}{|D|} )^2 这里,CkC_kDD中属于第kk类的样本子集,KK是类的个数.
      • 如果样本集合DD根据特征A是否取某一可能值aa被分割成D1D_1D2D_2两部分,即:D1={(x,y)DA(x)=a}D_1=\{(x,y)∈D|A(x)=a\}D2=DD1D_2=D-D_1则在特征AA的条件下,集合DD的基尼指数定义为:Gini(D,A)=D1DGini(D1)+D2DGini(D2)Gini(D,A)=\frac{|D_1 |}{|D|} Gini(D_1 )+\frac{|D_2 |}{|D|} Gini(D_2 )
      • 基尼指数Gini(D)Gini(D)表示集合DD的不确定性,基尼指数Gini(D,A)Gini(D,A)表示经A=aA=a分割后集合DD的不确定性.
      • 基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似.
      • 下图是二类分类问题中基尼指数、熵(单位比特) 之半一1/2H(p)1/2*H(p)和分类误差率的关系.
        《统计学习方法》:第五章:决策树
        横坐标表示概率pp,纵坐标表示损失.
        可以看出基尼指数和熵之半的曲线很接近,都可以近似地代表分类误差率.
    • CART生成算法:
      • 输入:训练数据集DD,停止计算的条件;
      • 输出:CART决策树.
      • 停止计算的条件:一般是节点的样本数小于某个阈值,或基尼指数小于某各阈值。
      • 第一步:假设当前结点的训练数据集为DD,计算现有特征对该数据集的基尼指数.即对每一个特征AA,对其可能取的每个值aa,利用式下式计算A=aA=a时的基尼指数.Gini(D,A)=D1DGini(D1)+D2DGini(D2)Gini(D,A)=\frac{|D_1 |}{|D|} Gini(D_1 )+\frac{|D_2 |}{|D|} Gini(D_2 )
      • 第二步:在所有可能的特征AA以及它们所有可能的切分点aa中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点.依最优特征与最优切分点,使用下面公式从该结点训练集切分成两个子集,并生成两个子结点,将训练子集分别分配到两个子结点中去.D1=(x,y)DA(x)=aD_1={(x,y)∈D|A(x)=a}D2=DD1D_2=D-D_1
      • 第三部:对两个子节点递归的调用第一步和第二步,直到满足停止条件。

2、CART 剪枝:

  • CART剪枝算法由两步组成:
    • 首先从生成算法产生的决策树T0T_0底端开始不断剪枝,直到T0T_0的根结点,形成一个子树序列T0,T1,T2,,Tn{T_0,T_1,T_2,…,T_n}
    • 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树.
  • 剪枝形成一个子树序列::
    • 在剪枝过程中,计算子树的损失函数:Cα(T)=C(T)+αTC_α (T)=C(T)+α|T|其中,TT为任意子树,C(T)C(T)为对训练数据的预测误差(如基尼指数),T|T|为子树的叶结点个数,α0α≥0为参数,Cα(T)C_α (T)为参数是αα时的子树TT的整体损失.参数αα权衡训练数据的拟合程度与模型的复杂度.
    • 对固定的α,一定存在使损失函数Cα(T)C_α (T)最小的子树,将其表示为TαT_αTαT_α在损失函数Cα(T)C_α (T)最小的意义下是最优的.容易验证这样的最优子树是唯一的.当αα大的时候,最优子树TαT_α偏小;当αα小的时候,最优子树TαT_α偏大。极端情况,当α=0α=0时,整体树是最优的(整体树是指生成算法生成的决策树T0T_0).当α=α=∞时,根结点组成的单结点树是最优的.
    • 我们将αα逐渐增大,并将每个αα对树进行剪枝,将剪枝生成的子树相同的αα组成一个个区间。这样就会得到nn个区间:0<α0<α1<<αn<0<α_0<α_1<⋯<α_n<∞,其中每个区间[αi,αi+1)[α_i,α_{i+1})中的αα剪枝得到的子树是一样的,并产生一个最优子树序列{T0,T1,T2,,Tn}\{T_0,T_1,T_2,…,T_n\}
    • 具体做法:
      • 从整体树T0T_0开始剪枝。对T0T_0的任意内部结点tt,以tt为单结点树的损失函数是:Cα(t)=C(t)+αC_α (t)=C(t)+αtt为根结点的子树TtT_t的损失函数是:Cα(Tt)=C(Tt)+αTtC_α (T_t )=C(T_t )+α|T_t |α=0α=0αα充分小时,有不等式:Cα(t)>Cα(Tt)C_α (t)>C_α (T_t )αα增大时,在某一αα'有:Cα(t)=Cα(Tt)C_α (t)=C_α (T_t )可以得到:α=Cα(t)Cα(Tt)Tt1α'=\frac{C_α (t)-C_α (T_t )}{|T_t |-1}αα再增大时,有不等式:Cα(t)<Cα(Tt)C_α (t)<C_α (T_t )这样可以得到:当ααα≥α'时,ttTtT_t更可取,可以对TtT_t进行剪枝
      • 然后,对T0T_0中每一内部结点tt,计算:g(t)=Cα(t)Cα(Tt)Tt1g(t)=\frac{C_α (t)-C_α (T_t )}{|T_t |-1}
      • T0T_0中剪去g(tg(t)最小的TtT_t,将得到的子树作为T1T_1,同时将最小的g(t)g(t)设为α1α_1, T1T_1为区间[α1α2)[α_1,α_2)的最优子树.按照这个方法依次确定:α2,T2,,αn,Tnα_2, T_2,…, α_n, T_n;其中TnT_n是是只有根节点的决策树
    • 交叉验证选取最优子树TαT_α.
      • 利用独立的验证数据集,测试子树序列T0,T1,T2,,TnT_0,T_1,T_2,…,T_n中各棵子树的平方误差或基尼指数.平方误差或基尼指数最小的决策树被认为是最优的决策树.
  • CART剪枝算法:
    • 输入:CART算法生成的决策树T0T_0
    • 输出:最优决策树TαT_α
    • 第一步:设k=0T=T0k=0,T=T_0。·
    • 第二步:设α=+α=+∞
    • 第三步:自下而上地对各内部结点t计算C(Tt)TtC(T_t ),|T_t |以及g(t)=Cα(t)Cα(Tt)Tt1g(t)=\frac{C_α (t)-C_α (T_t )}{|T_t |-1}α=min(α,g(t))α=min(α,g(t))
    • 第四步:自上而下地访问内部结点t,如果有g(t)=αg(t)= α,进行剪枝,并对叶结点t以多数表决法决定其类,得到树TT.
    • 第五步:设k=k+1αk=αTk=Tk=k+1,α_k=α,T_k=T.
    • 第六步:如果T不是由根结点单独构成的树,则回到第四步.
    • 第七步:采用交叉验证法在子树序列T0,T1,T2,,TnT_0,T_1,T_2,…,T_n中选取最优子树TαT_α.

相关文章: