决策树(decision tree)是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。
决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。这些决策树学习的思想主要来源于由Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及由Breiman等人在1984年提出的CART算法。
1、特征选择
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。
信息增益
熵
熵表示随机变量不确定性的度量。
设 X X X是一个取有限个值的离散随机变量,其概率分布为 P ( X = x i ) = p i , i = 1 , 2 , ⋯ , n \begin{aligned} P \left( X = x_{i} \right) = p_{i}, \quad i =1, 2, \cdots, n \end{aligned} P(X=xi)=pi,i=1,2,⋯,n
则随机变量 X X X的熵 H ( X ) = H ( p ) = − ∑ i = 1 n p i log p i \begin{aligned} H \left( X \right) = H \left( p \right) = - \sum_{i=1}^{n} p_{i} \log p_{i} \end{aligned} H(X)=H(p)=−i=1∑npilogpi
其中,若 p i = 0 p_{i}=0 pi=0,则定义 0 log 0 = 0 0 \log 0 = 0 0log0=0;若 p i = 1 n \begin{aligned} p_{i} = \dfrac{1}{n} \end{aligned} pi=n1,则 H ( p ) = − ∑ i = 1 n p i log p i = − ∑ i = 1 n 1 n log 1 n = log n \ H \left( p \right) = - \sum_{i=1}^{n} p_{i} \log p_{i} = - \sum_{i=1}^{n} \dfrac{1}{n} \log \dfrac{1}{n} = \log n H(p)=−∑i=1npilogpi=−∑i=1nn1logn1=logn
由定义,得 0 ≤ H ( p ) ≤ log n \begin{aligned} & 0 \leq H \left( p \right) \leq \log n\end{aligned} 0≤H(p)≤logn
设有随机变量 ( X , Y ) \left( X , Y \right) (X,Y),其联合分布 P ( X = x i , Y = y j ) = p i j , i = 1 , 2 , ⋯ , n ; j = 1 , 2 , ⋯ , m \begin{aligned} \\ & P \left( X = x_{i}, Y = y_{j} \right) = p_{ij}, \quad i=1,2, \cdots, n; \quad j=1,2, \cdots, m\end{aligned} P(X=xi,Y=yj)=pij,i=1,2,⋯,n;j=1,2,⋯,m
条件熵
随机变量 X X X给定的条件下随机变量 Y Y Y的条件熵 H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) \begin{aligned} & H \left( Y | X \right) = \sum_{i=1}^{n} p_{i} H \left( Y | X = x_{i} \right) \end{aligned} H(Y∣X)=i=1∑npiH(Y∣X=xi)
即,
X
X
X给定条件下
Y
Y
Y的条件概率分布的熵对
X
X
X的数学期望。其中,
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
⋯
,
n
p_{i}=P \left( X = x_{i} \right), i= 1,2,\cdots,n
pi=P(X=xi),i=1,2,⋯,n。
条件熵
H
(
Y
∣
X
)
H \left( Y | X \right)
H(Y∣X)表示在已知随机变量
X
X
X的条件下随机变量
Y
Y
Y的不确定性。
信息增益:
特征 A A A对训练集 D D D的信息增益 g ( D , A ) = H ( D ) − H ( D ∣ A ) \begin{aligned} & g \left( D, A \right) = H \left( D \right) - H \left( D | A \right) \end{aligned} g(D,A)=H(D)−H(D∣A)
即,集合 D D D的经验熵 H ( D ) H \left( D \right) H(D)与特征 A A A给定条件下 D D D的经验条件熵 H ( D ∣ A ) H \left( D | A \right) H(D∣A)之差。
其中,当熵和条件熵由数据估计(极大似然估计)得到时,对应的熵和条件熵分别称为经验熵和经验条件熵。
信息增益 g ( X , Y ) g \left( X , Y \right) g(X,Y)表示已知特征 X X X的信息而使得类 Y Y Y的信息的不确定性减少的程度。
设训练数据集为 D D D, ∣ D ∣ \left| D \right| ∣D∣表示其样本容量,即样本个数。设有 K K K个类 C k , k = 1 , 2 , ⋯ , K C_{k}, k=1,2,\cdots,K Ck,k=1,2,⋯,K, ∣ C k ∣ \left| C_{k} \right| ∣Ck∣为属于类 C k C_{k} Ck的样本的个数, ∑ k = 1 K ∣ C k ∣ = ∣ D ∣ \sum_{k=1}^{K} \left| C_{k} \right| = \left| D \right| ∑k=1K∣Ck∣=∣D∣。设特征 A A A有 n n n个不同的特征取值 { a 1 , a 2 , ⋯ , a n } \left\{ a_{1},a_{2},\cdots,a_{n}\right\} {a1,a2,⋯,an},根据特征 A A A的取值将 D D D划分为 n n n个子集 D 1 , D 2 , ⋯ , D n D_{1},D_{2},\cdots,D_{n} D1,D2,⋯,Dn, ∣ D i ∣ \left| D_{i} \right| ∣Di∣为 D i D_{i} Di的样本数, ∑ i = 1 n ∣ D i ∣ = ∣ D ∣ \sum_{i=1}^{n}\left| D_{i} \right| = \left| D \right| ∑i=1n∣Di∣=∣D∣。记子集 D i D_{i} Di中属于类 C k C_{k} Ck的样本的集合为 D i k D_{ik} Dik,即 D i k = D i ∩ C k D_{ik} = D_{i} \cap C_{k} Dik=Di∩Ck, ∣ D i k ∣ \left| D_{ik} \right| ∣Dik∣为 D i k D_{ik} Dik的样本个数。
信息增益算法
- 输入:训练数据集 D D D和特征 A A A
- 输出:特征 A A A对训练数据集 D D D的信息增益 g ( D , A ) g \left(D, A \right) g(D,A)
-
计算数据集 D D D的经验熵 H ( D ) H\left(D\right) H(D)
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ log 2 ∣ C k ∣ ∣ D ∣ \begin{aligned} & H \left( D \right) = -\sum_{k=1}^{K} \dfrac{\left|C_{k}\right|}{\left| D \right|}\log_{2}\dfrac{\left|C_{k}\right|}{\left| D \right|} \end{aligned} H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣ -
计算特征 A A A对数据集 D D D的经验条件熵 H ( D ∣ A ) H \left( D | A \right) H(D∣A)
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ log 2 ∣ D i k ∣ ∣ D i ∣ \begin{aligned} & H \left( D | A \right) = \sum_{i=1}^{n} \dfrac{\left| D_{i} \right|}{\left| D \right|} H \left( D_{i} \right) = \sum_{i=1}^{n} \dfrac{\left| D_{i} \right|}{\left| D \right|} \sum_{k=1}^{K} \dfrac{\left| D_{ik} \right|}{\left| D_{i} \right|} \log_{2} \dfrac{\left| D_{ik} \right|}{\left| D_{i} \right|}\end{aligned} H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣
- 计算信息增益 g ( D , A ) = H ( D ) − H ( D ∣ A ) \begin{aligned} & g \left( D, A \right) = H \left( D \right) - H \left( D | A \right) \end{aligned} g(D,A)=H(D)−H(D∣A)
特征 A A A对训练集 D D D的信息增益比 g R ( D , A ) = g ( D , A ) H A ( D ) \begin{aligned} & g_{R} \left( D, A \right) = \dfrac{g \left( D, A \right)}{H_{A} \left(D\right)}\end{aligned} gR(D,A)=HA(D)g(D,A)
即,信息增益 g ( D , A ) g\left( D, A \right) g(D,A)与训练数据集 D D D关于特征 A A A的经验熵 H A ( D ) H_{A}\left(D\right) HA(D)之比。其中, H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ log 2 ∣ D i ∣ ∣ D ∣ \begin{aligned} & H_{A} \left( D \right) = -\sum_{i=1}^{n} \dfrac{\left|D_{i}\right|}{\left|D\right|}\log_{2}\dfrac{\left|D_{i}\right|}{\left|D\right|}\end{aligned} HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣
2、决策树生成
通常使用信息增益最大、信息增益比最大或基尼指数最小作为特征选择的准则。决策树的生成往往通过计算信息增益或其他指标,从根结点开始,递归地产生决策树。这相当于用信息增益或其他准则不断地选取局部最优的特征,或将训练集分割为能够基本正确分类的子集。
ID3算法:
ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树.具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止.最后得到一个决策树.ID3相当于用极大似然法进行概率模型的选择.
- 输入:训练数据集 D D D,特征 A A A,阈值 ε \varepsilon ε
- 输出:决策树 T T T
- 若 D D D中所有实例属于同一类 C k C_{k} Ck,则 T T T为单结点树,并将类 C k C_{k} Ck作为该结点的类标记,返回 T T T;
- 若 A = ∅ A = \emptyset A=∅,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_{k} Ck作为该结点的类标记,返回 T T T;
- 否则,计算 A A A中各特征 D D D的信息增益,选择信息增益最大的特征 A g A_{g} Ag A g = arg max A g ( D , A ) \begin{aligned} \\ & A_{g} = \arg \max_{A} g \left( D, A \right) \end{aligned} Ag=argAmaxg(D,A)
- 如果 A g A_{g} Ag的信息增益小于阈值 ε \varepsilon ε,则置 T T T为单结点树,并将 D D D中实例数量最大的类 C k C_{k} Ck作为该结点的类标记,返回 T T T;
- 否则,对 A g A_{g} Ag的每一个可能值 a i a_{i} ai,依 A g = a i A_{g}=a_{i} Ag=ai将 D D D分割为若干非空子集 D i D_{i} Di,将 D i D_{i} Di中实例数对大的类作为标记,构建子结点,由结点及其子结点构成树 T T T,返回 T T T;
- 对第 i i i个子结点,以 D i D_{i} Di为训练集,以 A − { A g } A-\left\{A_{g}\right\} A−{Ag}为特征集,递归地调用步1.~步5.,得到子树 T i T_{i} Ti,返回 T i T_{i} Ti。
C4.5算法:
C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进.C4.5在生成的过程中,用信息增益比来选择特征.
- 输入:训练数据集 D D D,特征 A A A,阈值 ε \varepsilon ε
- 输出:决策树 T T T
- 若 D D D中所有实例属于同一类 C k C_{k} Ck,则 T T T为单结点树,并将类 C k C_{k} Ck作为该结点的类标记,返回 T T T;
- 若 A = ∅ A = \emptyset A=∅,则 T T T为单结点树,并将 D D D中实例数最大的类 C k C_{k} Ck作为该结点的类标记,返回 T T T;
- 否则,计算 A A A中各特征 D D D的信息增益,选择信息增益比最大的特征 A g A_{g} Ag A g = arg max A g R ( D , A ) \begin{aligned} & A_{g} = \arg \max_{A} g_{R} \left( D, A \right) \end{aligned} Ag=argAmaxgR(D,A)
- 如果 A g A_{g} Ag的信息增益小于阈值 ε \varepsilon ε,则置 T T T为单结点树,并将 D D D中实例数量最大的类 C k C_{k} Ck作为该结点的类标记,返回 T T T;
- 否则,对 A g A_{g} Ag的每一个可能值 a i a_{i} ai,依 A g = a i A_{g}=a_{i} Ag=ai将 D D D分割为若干非空子集 D i D_{i} Di,将 D i D_{i} Di中实例数对大的类作为标记,构建子结点,由结点及其子结点构成树 T T T,返回 T T T;
- 对第 i i i个子结点,以 D i D_{i} Di为训练集,以 A − { A g } A-\left\{A_{g}\right\} A−{Ag}为特征集,递归地调用步1.~步5.,得到子树 T i T_{i} Ti,返回 T i T_{i} Ti。
决策树的剪枝通过极小化决策树整体的损失函数或代价函数来实现。
设树 T T T的叶结点个数为 ∣ T ∣ \left| T \right| ∣T∣, t t t是树 T T T的叶结点,该叶结点有 N t N_{t} Nt个样本点,其中 k k k类的样本点有 N t k N_{tk} Ntk个, k = 1 , 2 , ⋯ , K k=1,2,\cdots,K k=1,2,⋯,K, H t ( T ) H_{t}\left(T\right) Ht(T)为叶结点 t t t上的经验熵,则决策树的损失函数
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ \begin{aligned} & C_{\alpha} \left( T \right) = \sum_{t=1}^{\left| T \right|} N_{t} H_{t} \left( T \right) + \alpha \left| T \right| \end{aligned} Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣
其中, α ≥ 0 \alpha \geq 0 α≥0为参数,经验熵 H t ( T ) = − ∑ k N t k N t log N t k N t \begin{aligned} \\ & H_{t} \left( T \right) = - \sum_{k} \dfrac{N_{tk}}{N_{t}} \log \dfrac{N_{tk}}{N_{t}} \end{aligned} Ht(T)=−k∑NtNtklogNtNtk
损失函数中,记 C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k log N t k N t \begin{aligned} & C \left( T \right) = \sum_{t=1}^{\left| T \right|} N_{t} H_{t} \left( T \right) = - \sum_{t=1}^{\left| T \right|} \sum_{k=1}^{K} N_{tk} \log \dfrac{N_{tk}}{N_{t}} \end{aligned} C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklogNtNtk
则 C α ( T ) = C ( T ) + α ∣ T ∣ \begin{aligned} & C_{\alpha} \left( T \right) = C \left( T \right) + \alpha \left| T \right| \end{aligned} Cα(T)=C(T)+α∣T∣
其中, C ( T ) C \left( T \right) C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ \left| T \right| ∣T∣表示模型复杂度,参数 α ≥ 0 \alpha \geq 0 α≥0控制两者之间的影响。
3、决策树的剪枝
由于生成的决策树存在过拟合问题,需要对它进行剪枝,以简化学到的决策树。决策树的剪枝,往往从已生成的树上剪掉一些叶结点或叶结点以上的子树,并将其父结点或根结点作为新的叶结点,从而简化生成的决策树。
树的剪枝算法:
- 输入:决策树 T T T,参数 α \alpha α
- 输出:修剪后的子树 T α T_{\alpha} Tα
- 计算每个结点的经验熵
- 递归地从树的叶结点向上回缩
设一组叶结点回缩到其父结点之前与之后的整体树分别为 T B T_{B} TB与 T A T_{A} TA,其对应的损失函数值分别是 C α ( T B ) C_{\alpha} \left( T_{B} \right) Cα(TB)与 C α ( T A ) C_{\alpha} \left( T_{A} \right) Cα(TA),如果 C α ( T A ) ≤ C α ( T B ) \begin{aligned} \\ & C_{\alpha} \left( T_{A} \right) \leq C_{\alpha} \left( T_{B} \right) \end{aligned} Cα(TA)≤Cα(TB)则进行剪枝,即将父结点变为新的叶结点。 - 返回2.,直到不能继续为止,得到损失函数最小的子树 T α T_{\alpha} Tα
假设 X X X与 Y Y Y分别为输入和输出变量,并且 Y Y Y是连续变量,给定训练数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } \begin{aligned} & D = \left\{ \left(x_{1},y_{1}\right), \left(x_{2},y_{2}\right),\cdots,\left(x_{N},y_{N}\right) \right\} \end{aligned} D={(x1,y1),(x2,y2),⋯,(xN,yN)}
可选择第 j j j个变量 x j x_{j} xj及其取值 s s s作为切分变量和切分点,并定义两个区域 R 1 ( j , s ) = { x ∣ x j ≤ s } , R 2 ( j , s ) = { x ∣ x j > s } \begin{aligned} & R_{1} \left( j,s \right) = \left\{ x | x_{j} \leq s \right\}, \quad R_{2} \left( j,s \right) = \left\{ x | x_{j} \gt s \right\} \end{aligned} R1(j,s)={x∣xj≤s},R2(j,s)={x∣xj>s}最优切分变量 x j x_{j} xj及最优切分点 s s s j , s = arg min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \begin{aligned} \\ & j,s = \arg \min_{j,s} \left[ \min_{c_{1}} \sum_{x_{i} \in R_{1} \left(j,s\right)} \left( y_{i} - c_{1} \right)^{2} + \min_{c_{2}} \sum_{x_{i} \in R_{2} \left(j,s\right)} \left( y_{i} - c_{2} \right)^{2}\right] \end{aligned} j,s=argj,smin⎣⎡c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2⎦⎤
其中, c m c_{m} cm是区域 R m R_{m} Rm上的回归决策树输出,是区域 R m R_{m} Rm上所有输入实例 x i x_{i} xi对应的输出 y i y_{i} yi的均值 c m = a v e ( y i ∣ x i ∈ R m ) , m = 1 , 2 \begin{aligned} & c_{m} = ave \left( y_{i} | x_{i} \in R_{m} \right), \quad m=1,2 \end{aligned} cm=ave(yi∣xi∈Rm),m=1,2
对每个区域 R 1 R_{1} R1和 R 2 R_{2} R2重复上述过程,将输入空间划分为 M M M个区域 R 1 , R 2 , ⋯ , R M R_{1},R_{2},\cdots,R_{M} R1,R2,⋯,RM,在每个区域上的输出为 c m , m = 1 , 2 , ⋯ , M c_{m},m=1,2,\cdots,M cm,m=1,2,⋯,M,最小二乘回归树 f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) \begin{aligned} & f \left( x \right) = \sum_{m=1}^{M} c_{m} I \left( x \in R_{m} \right) \end{aligned} f(x)=m=1∑McmI(x∈Rm)
4、CART算法
分类与回归树(classification and regression tree,CART)模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法.CART同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归.以下将用于分类与回归的树统称为决策树.
最小二乘回归树生成算法:
- 输入:训练数据集 D D D
- 输出:回归树 f ( x ) f \left( x \right) f(x)
-
选择最优切分变量 x j x_{j} xj与切分点 s s s j , s = arg min j , s [ min c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + min c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \begin{aligned} & j,s = \arg \min_{j,s} \left[ \min_{c_{1}} \sum_{x_{i} \in R_{1} \left(j,s\right)} \left( y_{i} - c_{1} \right)^{2} + \min_{c_{2}} \sum_{x_{i} \in R_{2} \left(j,s\right)} \left( y_{i} - c_{2} \right)^{2}\right] \end{aligned} j,s=argj,smin⎣⎡c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2⎦⎤
-
用最优切分变量 x j x_{j} xj与切分点 s s s划分区域并决定相应的输出值 R 1 ( j , s ) = { x ∣ x j ≤ s } , R 2 ( j , s ) = { x ∣ x j > s } c m = 1 N ∑ x i ∈ R m ( j , s ) y i , m = 1 , 2 \begin{aligned} & R_{1} \left( j,s \right) = \left\{ x | x_{j} \leq s \right\}, \quad R_{2} \left( j,s \right) = \left\{ x | x_{j} \gt s \right\} \\ & c_{m} = \dfrac{1}{N} \sum_{x_{i} \in R_{m} \left( j,s \right)} y_{i}, \quad m=1,2\end{aligned} R1(j,s)={x∣xj≤s},R2(j,s)={x∣xj>s}cm=N1xi∈Rm(j,s)∑yi,m=1,2
-
继续对两个子区域调用步骤1.和2.,直到满足停止条件
-
将输入空间划分为 M M M个区域 R 1 , R 2 , ⋯ , R M R_{1},R_{2},\cdots,R_{M} R1,R2,⋯,RM,生成决策树 f ( x ) = ∑ m = 1 M c m I ( x ∈ R m ) \begin{aligned} & f \left( x \right) = \sum_{m=1}^{M} c_{m} I \left( x \in R_{m} \right) \end{aligned} f(x)=m=1∑McmI(x∈Rm)
分类问题中,假设有 K K K个类,样本点属于第 k k k类的概率为 p k p_{k} pk,则概率分布的基尼指数 G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K \begin{aligned} & Gini \left( p \right) = \sum_{k=1}^{K} p_{k} \left( 1 - p_{k} \right) = 1 - \sum_{k=1}^{K} \end{aligned} Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑K
对于二分类问题,若样本点属于第1类的概率为 p p p,则概率分布的基尼指数 G i n i ( p ) = ∑ k = 1 2 p k ( 1 − p k ) = 2 p ( 1 − p ) \begin{aligned} & Gini \left( p \right) = \sum_{k=1}^{2} p_{k} \left( 1 - p_{k} \right) = 2p\left(1-p\right) \end{aligned} Gini(p)=k=1∑2pk(1−pk)=2p(1−p)
对于给定样本集和 D D D,其基尼指数 G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 \begin{aligned} & Gini \left( D \right) = 1 - \sum_{k=1}^{K} \left( \dfrac{\left| C_{k} \right|}{\left| D \right|} \right)^{2}\end{aligned} Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
其中, C k C_{k} Ck是 D D D中属于第 k k k类的样本自己, K K K是类别个数。
如果样本集合 D D D根据特征 A A A是否取某一可能值 a a a被分割成 D 1 D_{1} D1和 D 2 D_{2} D2两个部分,即 D 1 = { ( x , y ) ∣ A ( x ) = a } , D 2 = D − D 1 \begin{aligned} & D_{1} = \left\{ \left(x,y\right) | A\left(x\right)=a \right\}, \quad D_{2} = D - D_{1} \end{aligned} D1={(x,y)∣A(x)=a},D2=D−D1则在特征 A A A的条件下,集合 D D D的基尼指数 G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) \begin{aligned} & Gini \left( D, A \right) = \dfrac{\left| D_{1} \right|}{\left| D \right|} Gini \left( D_{1} \right) + \dfrac{\left| D_{2} \right|}{\left| D \right|} Gini \left( D_{2} \right)\end{aligned} Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基尼指数 G i n i ( D ) Gini \left( D \right) Gini(D)表示集合 D D D的不确定性,基尼指数 G i n i ( D , A ) Gini \left( D,A \right) Gini(D,A)表示经 A = a A=a A=a分割后集合 D D D的不确定性。基尼指数值越大,样本集合的不确定性也越大。
CART生成算法:
决策树的生成就是递归地构建二叉决策树的过程。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树.
- 输入:训练数据集 D D D,特征 A A A,阈值 ε \varepsilon ε
- 输出:CART决策树 T T T
- 设结点的训练数据集为 D D D,对每一个特征 A A A,对其可能取的每个值 a a a,根据样本点对 A = a A=a A=a的测试为“是”或“否”将 D D D分割成 D 1 D_{1} D1和 D 2 D_{2} D2两部分,并计算 G i n i ( D , A ) Gini\left(D,A\right) Gini(D,A)
- 在所有可能的特征 A A A以及其所有可能的切分点 a a a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点。依此从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去。
- 对两个子结点递归地调用1.和2.,直至满足停止条件
- 生成CART决策树 T T T
对整体树 T 0 T_{0} T0任意内部结点 t t t,以 t t t为单结点树的损失函数 C α ( t ) = C ( t ) + α \begin{aligned} & C_{\alpha} \left( t \right) = C \left( t \right) + \alpha \end{aligned} Cα(t)=C(t)+α以 t t t为根结点的子树 T t T_{t} Tt的损失函数
C α ( T t ) = C ( T t ) + α ∣ T t ∣ \begin{aligned} & C_{\alpha} \left( T_{t} \right) = C \left( T_{t} \right) + \alpha \left| T_{t} \right| \end{aligned} Cα(Tt)=C(Tt)+α∣Tt∣
当 α = 0 \alpha = 0 α=0及 α \alpha α充分小时,有不等式 C α ( T t ) < C α ( t ) \begin{aligned} & C_{\alpha} \left( T_{t} \right) \lt C_{\alpha} \left( t \right) \end{aligned} Cα(Tt)<Cα(t)
当 α \alpha α增大时,在某一 α \alpha α有 C α ( T t ) = C α ( t ) C ( T t ) + α ∣ T t ∣ = C ( t ) + α α = C ( t ) − C ( T t ) ∣ T t ∣ − 1 \begin{aligned} & \quad\quad C_{\alpha} \left( T_{t} \right) = C_{\alpha} \left( t \right) \\ & C \left( T_{t} \right) + \alpha \left| T_{t} \right| = C \left( t \right) + \alpha \\ & \quad\quad \alpha = \dfrac{C\left( t \right) - C \left(T_{t}\right)} { \left| T_{t} \right| -1 }\end{aligned} Cα(Tt)=Cα(t)C(Tt)+α∣Tt∣=C(t)+αα=∣Tt∣−1C(t)−C(Tt)
即 T t T_{t} Tt与 t t t有相同的损失函数值,而 t t t的结点少,因此对 T t T_{t} Tt进行剪枝。
CART剪枝算法
CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测.CART剪枝算法由两步组成:首先从生成算法产生的决策树T。底端开始不断剪枝,直到T的根结点,形成一个子树序列 { T 0 , ⋯ , T n } \{T_0,\cdots, T_n\} {T0,⋯,Tn};然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树.
- 输入:CART决策树 T 0 T_{0} T0
- 输出:最优决策树 T α T_{\alpha} Tα
-
设 k = 0 , T = T 0 k=0, T=T_{0} k=0,T=T0
-
设 α = + ∞ \alpha=+\infty α=+∞
-
自下而上地对各内部结点 t t t计算 C ( T t ) , ∣ T t ∣ C\left(T_{t}\right),\left| T_{t} \right| C(Tt),∣Tt∣,以及
g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 α = min ( α , g ( t ) ) \begin{aligned} & g\left(t\right) = \dfrac{C\left( t \right) - C \left(T_{t}\right)} { \left| T_{t} \right| -1 } \\ & \alpha = \min \left( \alpha, g\left( t \right) \right) \end{aligned} g(t)=∣Tt∣−1C(t)−C(Tt)α=min(α,g(t)) -
其中, T t T_{t} Tt表示以 t t t为根结点的子树, C ( T t ) C\left(T_{t}\right) C(Tt)是对训练数据的预测误差, ∣ T t ∣ \left| T_{t} \right| ∣Tt∣是 T t T_{t} Tt的叶结点个数。
-
自下而上地访问内部结点 t t t,如果有 g ( t ) = α g\left(t\right)=\alpha g(t)=α,则进行剪枝,并对叶结点 t t t以多数表决法决定其类别,得到树 T T T
-
设 k = k + 1 , α k = α , T k = T k=k+1, \alpha_{k}=\alpha, T_{k}=T k=k+1,αk=α,Tk=T
如果 T T T不是由根结点单独构成的树,则回到步骤4. -
采用交叉验证法在子树序列 T 0 , T 1 , ⋯ , T n T_{0},T_{1},\cdots,T_{n} T0,T1,⋯,Tn中选取最优子树 T α T_{\alpha} Tα
5、概要总结
1.分类决策树模型是表示基于特征对实例进行分类的树形结构。决策树可以转换成一个if-then规则的集合,也可以看作是定义在特征空间划分上的类的条件概率分布。
2.决策树学习旨在构建一个与训练数据拟合很好,并且复杂度小的决策树。因为从可能的决策树中直接选取最优决策树是NP完全问题。现实中采用启发式方法学习次优的决策树。
决策树学习算法包括3部分:特征选择、树的生成和树的剪枝。常用的算法有ID3、 C4.5和CART。
3.特征选择的目的在于选取对训练数据能够分类的特征。特征选择的关键是其准则。常用的准则如下:
(1)样本集合 D D D对特征 A A A的信息增益(ID3)
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D, A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
H
(
D
)
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
log
2
∣
C
k
∣
∣
D
∣
H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|}
H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
H
(
D
∣
A
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
H
(
D
i
)
H(D | A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} H\left(D_{i}\right)
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)
其中,
H
(
D
)
H(D)
H(D)是数据集
D
D
D的熵,
H
(
D
i
)
H(D_i)
H(Di)是数据集
D
i
D_i
Di的熵,
H
(
D
∣
A
)
H(D|A)
H(D∣A)是数据集
D
D
D对特征
A
A
A的条件熵。
D
i
D_i
Di是
D
D
D中特征
A
A
A取第
i
i
i个值的样本子集,
C
k
C_k
Ck是
D
D
D中属于第
k
k
k类的样本子集。
n
n
n是特征
A
A
A取 值的个数,
K
K
K是类的个数。
(2)样本集合 D D D对特征 A A A的信息增益比(C4.5)
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
(
D
)
g_{R}(D, A)=\frac{g(D, A)}{H(D)}
gR(D,A)=H(D)g(D,A)
其中,
g
(
D
,
A
)
g(D,A)
g(D,A)是信息增益,
H
(
D
)
H(D)
H(D)是数据集
D
D
D的熵。
(3)样本集合 D D D的基尼指数(CART)
Gini
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
\operatorname{Gini}(D)=1-\sum_{k=1}^{K}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2}
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
特征
A
A
A条件下集合
D
D
D的基尼指数:
Gini ( D , A ) = ∣ D 1 ∣ ∣ D ∣ Gini ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ Gini ( D 2 ) \operatorname{Gini}(D, A)=\frac{\left|D_{1}\right|}{|D|} \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} \operatorname{Gini}\left(D_{2}\right) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)