决策树分类模型-ID3 C4.5 CART

1.简介
根据损失函数最小化原则建立决策树模型
损失函数一般是正则化的极大似然函数
本质上为从训练数据集中归纳出的一组分类规则
每一个子结点对应一个特征取值,叶节点即一个类
步骤
特征选择、决策树生成、决策树修剪4

2.特征选择
2.1 熵
使用熵度量随机变量不确定性
P ( X = x i ) = p i P(X=x_i) = p_i P(X=xi)=pi
则熵定义为 H ( X ) = H ( p ) = − s u m ( p i l o g p i ) H(X)=H(p)=-sum(p_ilogp_i) H(X)=H(p)=sum(pilogpi)
对于条件概率分布
P ( X = x i , Y = y i ) = p i j P(X=x_i,Y=y_i)=p_{ij} P(X=xi,Y=yi)=pij
条件熵
H ( Y ∣ X ) = s u m ( p i H ( Y ∣ X = x i ) ) H(Y|X)=sum(p_iH(Y|X=x_i)) H(YX)=sum(piH(YX=xi))
通过极大似然估计获得经验熵
2.2信息增益
信息增益:特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)= H(D)-H(D|A) g(D,A)=H(D)H(DA)
等价于训练数据集中类与特征的互信息
即由于特征A使得分类不确定性减少的程度
2.3信息增益比
单纯使用信息增益可能存在偏向于选择取值较多的特征的问题
特征A对训练数据集D的信息增益比定义为其信息增益与训练数据集D关于特征A的值的熵之比
g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
H A ( D ) = − ∑ n 1 ( D i D l o g 2 D i D ) H_A(D)=-\sum{^n}{_1}(\frac{D_i}{D}log_2\frac{D_i}{D}) HA(D)=n1(DDilog2DDi)
n 为 特 征 A 取 值 数 量 , D i 为 特 征 A 取 值 i 时 样 本 数 n为特征A取值数量,D_i为特征A取值i时样本数 nADiAi
理解:避免了信息增益时偏向于取值较多(n较大)的特征;取值数量n越大,分母越大,可以认为该项是一项惩罚项

3.决策树的生成
3.1 ID3算法
即在决策树各个结点上应用信息增益选择特征,递归地构建决策树
步骤:从根结点开始,对结点计算所有可能的特征,选择信息增益最大的特征作为节点的特征,由特征的不同取值建立子结点,递归构建直到所有信息增益都很小(无用特征抛弃)或者所有特征都选完

  • a.若类只有一个或特征取值为空,则返回T单结点树,节点标记为类
  • b.计算信息增益,获得当前最大信息增益特征,与阈值比较,小于则直接返回,该节点标记为类,否则按照特征取值将训练集划分,将实例数最大的类作为标记,构建子结点
  • c.对子结点,以划分后训练集为训练集,以剩下特征为特征集,递归调用
  • 缺点:该算法只有树的生成,容易导致过拟合现象
    3.2 C4.5算法
    在ID3的基础上,使用信息增益比选择特征

4.决策树的剪枝
提高模型的泛化能力(对预测数据的拟合)
一般通过使得损失函数最小决定剪枝
4.1 剪枝损失函数公式
C α ( T ) = s u m ( N t H t ( T ) + α ( T ) ) C_α(T)=sum(N_tH_t(T) +α(T)) Cα(T)=sum(NtHt(T)+α(T))

  • T为树
  • t为叶节点
  • Nt为样本点
  • Ntk为分类为k的样本点个数
  • 右边代表复杂度
  • 理解:即累计所有叶节点,分类熵作为损失函数(如果所有样本点分类正确,则H(T)=0
    4.2 剪枝算法
  • 计算每个结点的经验熵
  • 从叶结点往上,比较损失函数大小(剪枝前后),根据大小关系决定是否剪枝,递归直到损失函数最小,返回此时子数

5.CART算法
即在给定输入随机变量X条件下输出随机变量Y的条件概率分布
5.1 最小二乘回归生成
递归地构建二叉决策树,对回归树用平方误差最小化准则,对分类树用基尼系数最小化准则,进行特征选择,生成最小树
f ( x ) = s u m ( c m I ( x ∈ R m ) f(x)=sum(c_mI(x∈R_m) f(x)=sum(cmI(xRm)
即随机选择一个输入变量 x j = s x^j=s xj=s将训练集切分为两块
R 1 ( j , s ) = { x ∣ x j < = s } R_1(j,s)=\{x|x^j<=s\} R1(j,s)={ xxj<=s}
R 1 ( j , s ) = { x ∣ x j > s } R_1(j,s)=\{x|x^j>s\} R1(j,s)={ xxj>s}
通过损失函数寻找最优切分变量j与切分点s
l o s s = s u m ( y i − f ( x i ) ) 2 loss = sum(y_i-f(x_i))^2 loss=sum(yif(xi))2
m i n [ m i n ( l o s s 1 ) + m i n ( l o s s 2 ) ] min[min(loss1)+min(loss2)] min[min(loss1)+min(loss2)]
对于固定输入变量j,最优切分点可以通过求均值找出
c i = a v e ( y i ∣ x i ∈ R i ( j , s ) ) c_i=ave(y_i|x_i∈R_i(j,s)) ci=ave(yixiRi(j,s))
继续对子区域划分,最后得到回归树即最小二乘回归树
5.2分类树生成
基尼指数:用于选择最优特征
G i n i ( p ) = s u m ( p k ( 1 − p k ) ) = s u m k ( p k − p k 2 ) = 1 − s u m k ( k 2 ) Gini(p)=sum(p_k(1-p_k))=sum^k(p_k-p_k^2)=1-sum^k(k^2) Gini(p)=sum(pk(1pk))=sumk(pkpk2)=1sumk(k2)

  • K为类个数
  • 样本点属于K类概率即pk

在特征A的情况下,依照A是否取值a分为D1,D2数据集
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i D 2 Gini(D,A) =\frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini{D_2} Gini(D,A)=DD1Gini(D1)+DD2GiniD2
理解:表示经过特征A切割(按照A取值分割数据集)后,集合的不确定性

5.3 CART生成算法

  • 对每种特征的每一种可能性,计算其基尼系数(依照是否取值划分数据集)
  • 选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点,生成两个子结点,依照特征将训练集划分进去
  • 对两个子结点继续递归(筛选剩下特征)直到结点中样本个数小于阈值

5.4 CART剪枝
C α ( T ) = C ( T ) + α ∣ T ∣ C_α(T)=C(T)+α|T| Cα(T)=C(T)+αT
C(T)为预测误差,|T|为子数的叶结点个数(复杂度)
使用α衡量复杂度的影响

  • 从整体树 T 0 T_0 T0开始剪枝,对于任意内部结点t,以t为单节点树的损失函数为
  • C α ( t ) = C ( t ) + α C_α(t)=C(t) +α Cα(t)=C(t)+α
  • 以t为根节点的树损失函数为
  • C α ( T t ) = C ( T t ) + α ∣ T t ∣ C_α(T_t)=C(T_t)+α|T_t| Cα(Tt)=C(Tt)+αTt
  • 即对每一内部结点计算
  • g ( t ) = C ( t ) − C ( T t ) ∣ T t ∣ − 1 g(t)=\frac{C(t)-C(T_t)}{|T_t|-1} g(t)=Tt1C(t)C(Tt)衡量剪枝后整体损失函数减少的程度,分母即剪去的结点,g(t)为α取值
  • T i T_i Ti中剪去g(t)最小的 T t T_t Tt将得到的子数作为 T i + 1 T_{i+1} Ti+1并将最小的g(t)设为α1,即区间[α1,α2)的最优子树。重复剪枝直到根结点
  • 交叉验证:验证所有子树的损失函数,选择最小损失函数对应的子树 T i T_i Ti与其对应的α

5.5CART剪枝算法

  • 设k=0, T = T 0 T=T_0 T=T0
  • α = + ∞ α=+\infty α=+
  • 自下而上计算各结点t的g(t)及 α = m i n ( α , g ( t ) ) α=min(α,g(t)) α=min(α,g(t))
  • 对g(t)最小的结点剪枝,并以数量最多类作为该叶结点类,得到树T
  • 设k=k+1, α k = α , T k = T α_k=α,T_k=T αk=α,Tk=T
  • 如果 T k T_k Tk不是由根结点及两个叶结点构成的树,则令 α = + ∞ α=+\infty α=+继续重复,否则 T k = T n T_k=T_n Tk=Tn
  • 交叉验证子树,选择最优

理解:由于α不固定,因此我们需要获得各种α取值情况下的最优子树,则在剪枝过程中,α也逐渐增大,最终得到n棵子树,通过比较损失函数确定最优情况

猜你喜欢

转载自blog.csdn.net/qq_44807945/article/details/113798693