机器学习初探(三)决策树

机器学习初探(三)决策树

在开始介绍决策树的基本算法之前,首先要了解一下决策树算法中的所使用到的损失函数。

决策树中度量不确定性的度量标准

几乎所有的决策树算法的思想都是一样的:不断地对数据集进行划分,而决定如何划分的标准是使得数据的“不确定性”减小的越多越好,就意味着该划分能够获得越多信息。接下来介绍一下常用的两种度量标准:
1.信息熵
公式: H ( y ) = − ∑ k = 1 K p k l o g p k H\left ( y \right )=-\sum_{k=1}^{K}p_{k}logp_{k} H(y)=k=1Kpklogpk
对于具体的、随机变量y生成的数据集 D = { y 1 , . . . , y N } D=\left \{ y_{1},...,y_{N} \right \} D={y1,...,yN}而言,在实际操作中通常会利用经验熵来估计真正的信息熵:
H ( y ) = H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g ∣ C k ∣ ∣ D ∣ H\left ( y \right )=H\left ( D \right )=-\sum_{k=1}^{K}\frac{\left | C_{k} \right |}{\left | D \right |}log\frac{\left | C_{k} \right |}{\left | D \right |} H(y)=H(D)=k=1KDCklogDCk
这里假设随机变量y的取值空间为 { c 1 , . . . , c K } \left \{ c_{1},...,c_{K} \right \} {c1,...,cK} p k p_{k} pk表示y取 c k c_{k} ck的概率: p k = p ( y = c k ) p_{k}=p\left ( y=c_{k} \right ) pk=p(y=ck) ∣ C k ∣ \left | C_{k} \right | Ck代表由随机变量y中类别为 c k c_{k} ck的样本的个数, ∣ D ∣ \left | D \right | D代表D的总样本个数(亦即 ∣ D ∣ = N \left | D \right |=N D=N)。可以看到,经验公式背后的思想其实就是“频率估计概率”。
接下来阐述一下为什么信息熵能够用来度量数据的不确定性。
很直观地来看,如果随机变量取到每一个类别 p k p_{k} pk的概率都是一样的,亦即y完全没有规律可循,此时的由y生成出来的数据 { y 1 , . . . , y N } \left \{ y_{1},...,y_{N} \right \} {y1,...,yN}的不确定性是在取值空间为 { c 1 , . . . , c K } \left \{ c_{1},...,c_{K} \right \} {c1,...,cK}、样本数为N的数据中最大的。
而当随机变量完全属于某一类别,即存在某个 k ∗ k^{*} k,使得 p ( y = c k ∗ ) = 1 p\left ( y=c_{k^{*}} \right )=1 p(y=ck)=1 p ( y = c k ) = 0 , ∀ k ≠ k ∗ p\left ( y=c_{k} \right )=0,\forall k\neq k^{*} p(y=ck)=0k̸=k,此时y产生数据的不确定性最小。
而信息熵公式恰好满足以上性质,以简单的K=2的情况来看,其函数图像就像一个倒扣的碗,当p=0.5时H(y)达到最大,p=0或1时H(y)为0。

2.基尼系数
G i n i ( y ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini\left ( y \right )=\sum_{k=1}^{K}p_{k}\left ( 1-p_{k} \right )=1-\sum_{k=1}^{K}p_{k}^{2} Gini(y)=k=1Kpk(1pk)=1k=1Kpk2
同样可以利用经验基尼系数来进行估计:
G i n i ( y ) = G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini\left ( y \right )=Gini\left ( D \right )=1-\sum_{k=1}^{K}\left ( \frac{\left | C_{k} \right |}{\left | D \right |} \right )^{2} Gini(y)=Gini(D)=1k=1K(DCk)2
可以证明,基尼系数拥有与信息熵同样的性质,即 p 1 = p 2 = . . . = p K = 1 K p_{1}=p_{2}=...=p_{K}=\frac{1}{K} p1=p2=...=pK=K1时,Gini(y)取得最大值,当存在 k ∗ k^{*} k使得 p k ∗ = 1 p_{k^{*}}=1 pk=1时,Gini(y)=0。

信息的增益

在了解了不确定性的度量标准后,决策树应该如何利用这些标准?这就不得不提到一个概念——信息的增益是针对随机变量y和描述该变量的特征来定义的,此时数据集 D = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } D=\left \{ \left ( x_{1},y_{1} \right ),...,\left ( x_{N},y_{N} \right ) \right \} D={(x1,y1),...,(xN,yN)},其中 x i = ( x i ( 1 ) , . . . , x i ( n ) ) T x_{i}=\left ( x_{i}^{\left ( 1 \right )},...,x_{i}^{\left ( n \right )} \right )^{T} xi=(xi(1),...,xi(n))T是描述 y i y_{i} yi的特征向量,n则是特征个数。可以先研究单一特征情况,该特征为A,数据集 D = { ( A 1 , y 1 ) , . . . , ( A N , y N ) } D=\left \{ \left (A_{1},y_{1} \right ),...,\left ( A_{N},y_{N} \right ) \right \} D={(A1,y1),...,(AN,yN)};此时所谓的信息增益,反映的就是特征A所能给我们带来的关于y的“信息量”的大小。
因此在这里引入条件熵 H ( y ∣ A ) H\left ( y\mid A \right ) H(yA)的概念来定义信息的增益:所谓信息熵,就是根据特征A的不同取值 { a 1 , . . . , a m } \left \{ a_{1},...,a_{m} \right \} {a1,...,am}对y进行限制后,先对这些被限制的y分别计算信息熵,再把这些信息熵(一共有m个)根据特征取值本身的概率加权求和,从而得到总的条件熵。换句话说,条件熵是由被A不同取值限制的各个部分的y的不确定性以取值本身的概率作为权重加总得到的。
所以,条件熵 H ( y ∣ A ) H\left ( y\mid A \right ) H(yA)越小,意味着y被A限制后的总的不确定性越小,从而意味着A更能够帮助我们做出决策。
数学定义如下:
H ( y ∣ A ) = ∑ j = 1 m p ( A = a j ) H ( y ∣ A = a j ) H\left ( y\mid A \right )=\sum_{j=1}^{m}p\left ( A=a_{j} \right )H\left ( y\mid A=a_{j} \right ) H(yA)=j=1mp(A=aj)H(yA=aj)
其中
H ( y ∣ A = a j ) = − ∑ k = 1 K p ( y = c k ∣ A = a j ) l o g p ( y = c k ∣ A = a j ) H\left ( y\mid A=a_{j} \right )=-\sum_{k=1}^{K}p\left ( y=c_{k}\mid A=a_{j} \right )logp\left ( y=c_{k}\mid A=a_{j} \right ) H(yA=aj)=k=1Kp(y=ckA=aj)logp(y=ckA=aj)
同样可以用经验条件熵来估计真正的条件熵:
H ( y ∣ A ) = H ( y ∣ D ) = ∑ j = 1 m ∣ D j ∣ D ∑ k = 1 K ∣ D j k ∣ D j l o g ∣ D j k ∣ D j H\left ( y\mid A \right )=H\left ( y\mid D \right )=\sum_{j=1}^{m}\frac{\left | D_{j} \right |}{D}\sum_{k=1}^{K}\frac{\left | D_{jk} \right |}{D_{j}}log\frac{\left | D_{jk} \right |}{D_{j}} H(yA)=H(yD)=j=1mDDjk=1KDjDjklogDjDjk
这里的 D j D_{j} Dj表示在 A = a j A=a_{j} A=aj限制下的数据集。通常可以记 D j D_{j} Dj中的样本 y i y_{i} yi满足 y i A = a j y_{i}^{A}=a_{j} yiA=aj,公式中的 ∣ D j k ∣ \left | D_{jk} \right | Djk则代表着 D j D_{j} Dj中第k类样本的个数。
从条件熵的直观含义,信息的增益可以自然地定义为:

g ( y , A ) = H ( y ) − H ( y ∣ A ) g\left ( y,A \right )=H\left ( y \right )-H\left ( y\mid A \right ) g(y,A)=H(y)H(yA)
这里的 g ( y , A ) g\left ( y,A \right ) g(y,A)常被称为互信息。ID3算法就是利用它作为特征选择标准的。但是,如果简单地以互信息作为标准的话,会存在偏向于选择取值较多的特征,也就是m比较大的特征的问题。
为了解决该问题,可以给m一个惩罚,由此可以得到信息增益比的概念,该概念对应着C4.5算法:
g R ( y , A ) = g ( y , A ) H A ( y ) g_{R}\left ( y,A \right )=\frac{g\left ( y,A \right )}{H_{A}\left ( y \right )} gR(y,A)=HA(y)g(y,A)
其中 H A ( y ) H_{A}\left ( y \right ) HA(y)是y关于A的熵,它的定义为:
H A ( y ) = − ∑ j = 1 m p ( y A = a j ) l o g p ( y A = a j ) H_{A}\left ( y \right )=-\sum_{j=1}^{m}p\left ( y^{A}=a_{j} \right )logp\left ( y^{A}=a_{j} \right ) HA(y)=j=1mp(yA=aj)logp(yA=aj)
同样可以用经验熵来进行估计:
H A ( y ) = H A ( D ) = − ∑ j = 1 m ∣ D j ∣ ∣ D ∣ l o g ∣ D j ∣ ∣ D ∣ H_{A}\left ( y \right )=H_{A}\left ( D \right )=-\sum_{j=1}^{m}\frac{\left | D_{j} \right |}{\left | D \right |}log\frac{\left | D_{j} \right |}{\left | D \right |} HA(y)=HA(D)=j=1mDDjlogDDj
需要指出的是,只需要类比上述的过程,同样可以使用基尼系数来定义信息的增益。具体而言,可以先定义条件基尼系数:
G i n i ( y ∣ A ) = ∑ j = 1 m p ( A = a j ) G i n i ( y ∣ A = a j ) Gini\left ( y\mid A \right )=\sum_{j=1}^{m}p\left ( A=a_{j} \right )Gini\left ( y\mid A=a_{j} \right ) Gini(yA)=j=1mp(A=aj)Gini(yA=aj)
其中
G i n i ( y ∣ A = a j ) = 1 − ∑ k = 1 K p 2 ( y = c k ∣ A = a j ) Gini\left ( y\mid A=a_{j} \right )=1-\sum_{k=1}^{K}p^{2}\left ( y=c_{k}\mid A=a_{j} \right ) Gini(yA=aj)=1k=1Kp2(y=ckA=aj)
同样可以用经验条件基尼系数来进行估计:
G i n i ( y ∣ A ) = G i n i ( y ∣ D ) = ∑ j = 1 m ∣ D i ∣ ∣ D ∣ [ 1 − ∑ k = 1 K ( ∣ D j k ∣ ∣ D j ∣ ) 2 ] Gini\left ( y\mid A \right )=Gini\left ( y\mid D \right )=\sum_{j=1}^{m}\frac{\left | D_{i} \right |}{\left | D \right |}\left [ 1-\sum_{k=1}^{K}\left ( \frac{\left | D_{jk} \right |}{\left | D_{j} \right |} \right )^{2} \right ] Gini(yA)=Gini(yD)=j=1mDDi[1k=1K(DjDjk)2]
信息的增益则自然地定义为
g G i n i ( y , A ) = G i n i ( y ) − G i n i ( y ∣ A ) g_{Gini}\left ( y,A \right )=Gini\left ( y \right )-Gini\left ( y\mid A \right ) gGini(y,A)=Gini(y)Gini(yA)
CART算法通常应用这种定义。

决策树算法

这里介绍三个比较基本的决策树算法:

  • ID3算法可说是“最朴素”的决策树算法,它给出了对离散型数据分类的解决方案。
  • C4.5算法在其基础上进一步发展,给出了对混合型数据分类的解决方案。
  • CART算法则更进一步,给出了对数据回归的解决方案。

它们的核心思想都是一致的:算法通过不断划分数据集来生成决策树,其中每一步的划分能够使当前的信息增益达到最大。
直观上可以这样想像一个决策树的生成过程:

  • 向根节点输入数据
  • 根据信息增益的度量,选择数据的某个特征来把数据划分成(互不相交的)好几份并分别喂给一个新node
  • 如果分完数据后发现:
    1.某份数据的不确定较小,亦即其中某一类的样本已经占了大多数,此时就不再对这份数据继续进行划分,将对应的的node转化为叶节点
    2.某份数据的不确定性仍然较大,那么这份数据就要继续分割下去(转第二个项目符号)

事实上,几乎所有决策树算法的主要过程都与上述一致,区别仅表现在度量信息增益和划分数据的方法不同上。

1.ID3
输入:训练数据集 D = { ( x 1 , y 1 ) , . . . , ( x N , y N ) } D=\left \{ \left ( x_{1},y_{1} \right ),...,\left ( x_{N},y_{N} \right ) \right \} D={(x1,y1),...,(xN,yN)}
过程:

  • 将数据集D喂给一个node;

  • 若D中的所有样本同属于类别 c k c_{k} ck,则该node不再继续生成,将其类别标记为 c k c_{k} ck类;

  • x i x_{i} xi已经是0维向量,亦即已没有可选特征,则将此时D中样本个数最多的类别 c k c_{k} ck作为该node的类别;

  • 否则,按照互信息定义的信息增益:
    g ( y , x ( j ) ) = H ( y ) − H ( y ∣ x ( i ) ) g\left ( y,x^{\left ( j \right )} \right )=H\left ( y \right )-H\left ( y\mid x^{\left ( i \right )} \right ) g(y,x(j))=H(y)H(yx(i))
    来计算第j维特征的信息增益,然后选择使得信息增益最大的特征 x ( j ) x^{\left ( j \right )} x(j)作为划分标准,亦即:
    j ∗ = a r g m a x j g ( y , x ( j ) ) j^{*}=argmax_{j}g\left ( y,x^{\left ( j \right )} \right ) j=argmaxjg(y,x(j))

  • x ( j ) x^{\left ( j \right )} x(j)满足停止条件,则不再继续生成并则将此时D中样本个数最多的类别 c k c_{k} ck作为类别标记;

  • 否则,依 x ( j ) x^{\left ( j \right )} x(j)的所有可能取值 { a 1 , . . . , a m } \left \{ a_{1},...,a_{m} \right \} {a1,...,am}将数据集D划分为 { D 1 , . . . , D m } \left \{ D_{1},...,D_{m} \right \} {D1,...,Dm},使:
    ( x i , y i ) ∈ D ⇔ x i ( j ∗ ) = a j , ∀ i = 1 , . . . , N \left ( x_{i},y_{i} \right )\in D\Leftrightarrow x_{i}^{\left ( j^{*} \right )}=a_{j},\forall i=1,...,N (xi,yi)Dxi(j)=aj,i=1,...,N
    同时,将 x 1 , . . . , x m x_{1},...,x_{m} x1,...,xm 的第 j ∗ j^{*} j维去掉,使它们成为n-1维的特征向量

  • 对每个 D j D_{j} Dj从(1)开始调用算法。

输出:原始数据对应的node。
其中算法第(5)步的“停止条件”(也可以称为“预剪枝”)有许多提法,常用的是如下两种:

  • 若选择 x j ∗ x^{j^{*}} xj作为特征时信息增益 g ( y , x j ∗ ) g\left ( y,x^{j^{*}} \right ) g(y,xj)仍然很小(通常会传入一个参数 ϵ \epsilon ϵ作为阈值),则停止;
  • 事先把数据集分为训练集与测试集(交叉验证的思想),若由训练集得到的 x ( j ∗ ) x^{\left ( j^{*} \right )} x(j)并不能使得决策树在测试集上的错误率更小,则停止。

这两种停止条件的提法通用于C4.5和CART。
2.C4.5
C4.5使用信息增益比作为信息增益的度量,从而缓解了ID3算法会倾向于选择m比较大的特征A作为划分依据这个问题;也正因如此,C4.5算法可以处理ID3算法比较难处理的混合型数据。我们先来看看它在离散型数据上的算法:
过程:

  • (4)否则,按照信息增益比定义的信息增益:
    g R ( y , x ( j ) ) = g ( y , x ( j ) ) H x ( j ) ( y ) g_{R}\left ( y,x^{\left ( j \right )} \right )=\frac{g\left ( y,x^{\left ( j \right )} \right )}{H_{x^{\left ( j \right )}}\left ( y \right )} gR(y,x(j))=Hx(j)(y)g(y,x(j))
    来计算第j维特征的信息增益,然后选择使得信息增益最大的特征 x ( j ∗ ) x^{\left ( j^{*} \right )} x(j)作为划分标准,亦即:
    j ∗ = a r g m a x j g R ( y , x ( j ) ) j^{*}=argmax_{j}g_{R}\left ( y,x^{\left ( j \right )} \right ) j=argmaxjgR(y,x(j))
    注意:C4.5会偏向选择m比较小的特征。针对此问题,提出了一个启发式方法:先选出互信息比平均互信息要高的特征,然后从这些特征中选出信息增益比最高的。

C4.5采用二分类问题的解决方案处理连续型特征。具体而言,当二分类问题和决策树结合起来时,在连续的情况下我们通常把他转述为:
Y 1 = { y : y A < a 1 } , Y 2 = { y : y A ≥ a 1 } Y_{1}=\left \{ y:y^{A}< a_{1} \right \},Y_{2}=\left \{ y:y^{A}\geq a_{1} \right \} Y1={y:yA<a1},Y2={y:yAa1}
一般而言,如何处理连续性特征这个问题会归结为如何选择“二分标准”这个问题。C4.5中的做法如下:

  • x ( j ) x^{\left ( j \right )} x(j)在当前数据集中有m个取值,不妨假设它们为 u 1 , . . . , u m u_{1},...,u_{m} u1,...,um;不失一般性,假设它们满足 u 1 < . . . < u m u_{1}< ...< u_{m} u1<...<um,那么依次选择 v 1 , . . . , v p v_{1}, ..., v_{p} v1,...,vp作为二分标准并决出最好的一个,其中 v 1 ∼ v p v_{1}\sim v_{p} v1vp构成等差数列,且:
    v 1 = u 1 , v p = u m v_{1}=u_{1},v_{p}=u_{m} v1=u1,vp=um
  • 依次选择 v 1 = u 1 + u 2 2 , . . . , v m − 1 = u m − 1 + u m 2 v_{1}=\frac{u_{1}+u_{2}}{2},...,v_{m-1}=\frac{u_{m-1}+u_{m}}{2} v1=2u1+u2,...,vm1=2um1+um作为二分标准,计算它们的信息增益比,从而决出最好的二分标准来划分数据。

需要指出的是,C4.5具有一个比较糟糕的性质:由信息增益比的定义可知,如果是二分的话,它会倾向于把数据集分成很不均匀的两份;因为此时 H A ( y ) H_{A}\left ( y \right ) HA(y)将非常小,导致 g R ( y , A ) g_{R}\left ( y,A \right ) gR(y,A)很大。举个例子:如果当前划分标准为连续特征,那么C4.5可能会倾向于直接选择 v 1 , v 2 , v 3 v_{1},v_{2},v_{3} v1,v2,v3等作为二分标准。这样会带来一种后果,决策树倾向于往深处发展,造成过拟合。
3.CART
CART既可作分类也可作回归。CART一般使用基尼增益作为信息信息增益的度量,其一大特色就是它假设了最终生成的决策树为二叉树,亦即它在处理离散型特征时也会通过决出二分标准来划分数据。

  • 过程:
    (4)否则,不妨设 x ( j ) x^{\left ( j \right )} x(j)在当前数据集中有 S j S_{j} Sj个取值 u 1 ( j ) , . . . , u S j ( j ) u_{1}^{\left ( j \right )},...,u_{S_{j}}^{\left ( j \right )} u1(j),...,uSj(j)且它们满足 u 1 ( j ) < . . . < u S j ( j ) u_{1}^{\left ( j \right )}< ...< u_{S_{j}}^{\left ( j \right )} u1(j)<...<uSj(j),那么:
    (a)若 x ( j ) x^{\left ( j \right )} x(j)是离散型的,则依次选取 u 1 ( j ) , . . . , u 1 ( S j ) u_{1}^{\left ( j \right )},...,u_{1}^{\left ( S_{j} \right )} u1(j),...,u1(Sj)作为二分标准 a p a_{p} ap,此时:
    A j p = { x ( j ) = a p , x ( j ) ≠ a p } A_{jp}=\left \{ x^{\left ( j \right )}=a_{p},x^{\left ( j \right )}\neq a_{p} \right \} Ajp={x(j)=ap,x(j)̸=ap}
    (b)若 x ( j ) x^{\left ( j \right )} x(j)是连续型的,则依次选取 u 1 ( j ) + u 2 ( j ) 2 , . . . , u S j − 1 ( j ) + u S j ( j ) 2 \frac{u_{1}^{\left ( j \right )}+u_{2}^{\left ( j \right )}}{2},...,\frac{u_{S_{j-1}}^{\left ( j \right )}+u_{S_{j}}^{\left ( j \right )}}{2} 2u1(j)+u2(j),...,2uSj1(j)+uSj(j)作为二分标准 a p a_{p} ap,此时:
    A j p = { x ( j ) < a p , x ( j ) ≥ a p } A_{jp}=\left \{ x^{\left ( j \right )}<a_{p},x^{\left ( j \right )}\geq a_{p} \right \} Ajp={x(j)<ap,x(j)ap}
    按照基尼系数定义的信息增益:
    g G i n i ( y , A j p ) = G i n i ( y ) − G i n i ( y ∣ A j p ) g_{Gini}\left ( y,A_{jp} \right )=Gini\left ( y \right )-Gini\left ( y\mid A_{jp} \right ) gGini(y,Ajp)=Gini(y)Gini(yAjp)
    来计算第j维特征在这些二分标准下的信息增益,然后选择使得信息增益最大的特征 x ( j ∗ ) x^{\left ( j^{*} \right )} x(j)和相应的二分标准 u p ∗ ( j ∗ ) u_{p^{*}}^{\left ( j^{*} \right )} up(j)作为划分标准,亦即:
    ( j ∗ , p ∗ ) = a r g m a x j , p g G i n i ( y , A j p ) \left ( j^{*},p^{*} \right )=argmax_{j,p}g_{Gini}\left ( y,A_{jp} \right ) (j,p)=argmaxj,pgGini(y,Ajp)

而对于回归问题,之前的分类问题的损失为数据的不确定性,而在回归问题中,一种常见的做法就是将损失定义为平方损失:

L ( D ) = ∑ i = 1 N I ( y i ≠ f ( x i ) ) [ y i − f ( x i ) ] 2 L\left ( D \right )=\sum_{i=1}^{N}I\left ( y_{i}\neq f\left ( x_{i} \right ) \right )\left [ y_{i}-f\left ( x_{i} \right ) \right ]^{2} L(D)=i=1NI(yi̸=f(xi))[yif(xi)]2
这里的I是示性函数,f是我们的模型、 f ( x i ) f\left ( x_{i} \right ) f(xi) x i x_{i} xi在我们模型下的预测输出, y i y_{i} yi是真实输出。在分类问题中决策树是一个划分规则的序列,在回归问题中也差不多。具体而言,设序列一共会将输入空间划分为 R 1 , . . . , R M R_{1},...,R_{M} R1,...,RM(这M个子空间彼此不相交),则:

  • 对于回归问题,模型可以表示为:
    f ( x i ) = ∑ m = 1 M c m I ( x i ∈ R m ) f\left ( x_{i} \right )=\sum_{m=1}^{M}c_{m}I\left ( x_{i}\in R_{m} \right ) f(xi)=m=1McmI(xiRm)
    这里 c m = a r g m i n c L m ( c ) = a r g m i n c ∑ ( x i , y i ) ∈ R m ( y i − c ) 2 c_{m}=argmin_{c}L_{m}\left ( c \right )= argmin_{c}\sum _{\left ( x_{i},y_{i} \right )\in R_{m}}\left ( y_{i}-c \right )^{2} cm=argmincLm(c)=argminc(xi,yi)Rm(yic)2。那么由一阶条件:
    ∂ L m ( c ) ∂ c = 0 ⇔ − 2 ∑ ( x i , y i ) ∈ R m ( y i − c m ) = 0 \frac{\partial L_{m}\left ( c \right )}{\partial c}=0\Leftrightarrow -2\sum _{\left ( x_{i},y_{i} \right )\in R_{m}}\left ( y_{i}-c_{m} \right )=0 cLm(c)=02(xi,yi)Rm(yicm)=0
    可解得 c m = a v g ( y i ∣ ( x i , y i ) ∈ R m ) = 1 ∣ R m ∣ ∑ ( x i , y i ∈ R m ) y i c_{m}=avg\left ( y_{i}\mid \left ( x_{i},y_{i} \right )\in R_{m} \right )= \frac{1}{\left | R_{m} \right |}\sum _{\left ( x_{i},y_{i}\in R_{m} \right )}y_{i} cm=avg(yi(xi,yi)Rm)=Rm1(xi,yiRm)yi

  • 解决回归问题时,我们会在特征和二分选择选好后,通过求解:
    ( j ∗ , p ∗ ) = a r g m i n j , p [ ∑ x i < p ( y i − c j p ( 1 ) ) 2 + ∑ x i ≥ p ( y i − c j p ( 1 ) ) 2 ] \left ( j^{*},p^{*} \right )=argmin_{j,p}\left [ \sum _{x_{i}< p}\left ( y_{i}-c_{jp}^{\left ( 1 \right )} \right )^{2}+\sum _{x_{i}\geq p}\left ( y_{i}-c_{jp}^{\left ( 1 \right )} \right )^{2} \right ] (j,p)=argminj,p[xi<p(yicjp(1))2+xip(yicjp(1))2]
    来选取划分标准。

剪枝

为了解决决策树算法中存在的过拟合问题,通常采用“预剪枝”或“后剪枝”。”预剪枝“就是前面算法所提到的”停止条件“。而”后剪枝“是指在决策树生成完毕后再对其进行修建,把多余的节点修剪掉。换句话说,后剪枝是从全局出发,通过某种标准对一些node进行局部剪枝,这样能减少决策树中node的数目,从而有效地降低模型复杂度。
因此问题的关键在于如何定出局部剪枝的标准。通常来说有两种做法:

  • 应用交叉验证的思想,若局部剪枝能够使得模型在测试集上的错误率降低,则进行局部剪枝;
  • 应用正则化的思想,综合考虑不确定性和模型复杂度来定出一个新的损失,用该损失作为一个node是否进行局部剪枝的标准。

因此,我们又遇到一个关键问题,如何定量分析决策树中一个node的复杂度:一个直观的做法是直接使用该node下属叶节点的个数作为复杂度。

你可能感兴趣的:(机器学习,机器学习,python)