决策树学习笔记


ID3算法

一切的起源要从信息熵说起。熵(entropy)表示随机变量不确定性的度量。设X是一个取有限个值的离散随机变量。其概率分布为
P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X=x_i) = p_i, i=1,2,...,n P(X=xi)=pi,i=1,2,...,n
随机变量X的熵定义为:
H ( X ) = − ∑ i = 1 n p i ∗ l o g p i H(X) = -\sum_{i=1}^{n}p_i*log p_i H(X)=i=1npilogpi
熵越大,随机变量的不确定性越大,也就是说,这个变量的纯度越小。
而我们决策树,就是使用纯度来划分数据集的。它是比较每个特征划分之后的信息熵,然后取划分之后信息熵最低(也就是纯度最大)的节点进行分裂。
具体到ID3树,它是这样子的:
计算出整个集合D的经验熵 H ( D ) H(D) H(D),通过特征A划分的条件下的经验条件熵 H ( D ∣ A ) H(D|A) H(DA),然后计算两者之差:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)
这个称为特征A对训练数据集D的信息增益 g ( D , A ) g(D,A) g(D,A)信息增益。
我们遍历数据集的所有特征,计算出这些特征对数据集D的信息增益,然后取信息增益最大(也就是划分之后纯度最大)的节点作为划分。而这个特征,就是我们的最优特征。


C4.5的生成算法

C4.5算法很简单,它通过定义一个名为信息增益比的东西来代替信息增益。
特征A对训练数据集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练数据集D的经验熵 H ( D H(D H(D之比:
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)
这么做有什么好处呢,加入用信息增益来计算,训练集的经验熵大的时候,信息增益会偏大。经验熵小的时候,信息增益会偏小。所以使用了归一化之后,就把这个问题消除了。

剪枝

刚刚介绍的是生成算法,树枝的生成过程也就是拟合训练数据的过程,所以生成的树往往会对训练数据的分类很准确,但是对测试数据的分类就没有那么精准了,也就是出现了过拟合现象,这时候,我们需要将决策树简化。我们把这个简化的过程称为决策树的剪枝(pruning)。具体来说就是减掉一些子树或叶节点。

那么怎么剪枝呢,我们可以通过比较剪枝之前和剪枝之后,决策树整体的损失函数(loss function)或代价函数(cost function)来实现。
设树T的叶节点个数为|T|,t是树T的叶节点,该叶节点上有 N t N_t Nt个样本点,其中k类的样本点有 N t k N_{tk} Ntk个, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K, H t ( T ) H_t(T) Ht(T)为叶节点t熵的经验熵, α ≥ 0 α≥0 α0为参数,则决策树的损失函数可以定义为:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_α(T)=\sum_{t=1}^{|T|}{N_tH_t(T)+α|T|} Cα(T)=t=1TNtHt(T)+αT
其中经验熵为:
H t ( T ) = − ∑ k N t k N t l o g N t k N t H_t(T) = -\sum_{k}{\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}} Ht(T)=kNtNtklogNtNtk
在损失函数中,可以将 ∑ t = 1 ∣ T ∣ N t H t ( T ) \sum_{t=1}^{|T|}{N_tH_t(T)} t=1TNtHt(T)记作:
C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k l o g N t k N t C(T)=\sum_{t=1}^{|T|}{N_tH_t(T)}=-\sum_{t=1}^{|T|}\sum_{k=1}{K}{N_{tk}log\frac{N_{tk}}{N_t}} C(T)=t=1TNtHt(T)=t=1Tk=1KNtklogNtNtk
这时有:
C α ( T ) = C ( T ) + α ∣ T ∣ C_α(T)=C(T)+α|T| Cα(T)=C(T)+αT
|T|表示数的复杂度,α是惩罚因子。如果α大,则会促使选取复杂度小的树。如果α=0,则只考虑经验熵。


CART算法

分类与回归树(classification and regression tree, CART),大名鼎鼎的CART树终于来了,它也是由特征选择、树的生成、剪枝组成的。它可是既可以用于分类也可以用于回归的哦。
简单来说,CART算法由以下两步组成:
1.生成决策树:尽可能生成大的决策树
2.决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时候用损失函数最小作为剪枝的标准。

回归树的生成:

我们先来看看回归树的生成方法吧。
假设我们这棵树生成之后有M个叶子节点,每个节点上有一个输出值 C m C_m Cm,回归树的模型可以表示为:
f ( x ) = ∑ m = 1 M C m I ( x ∈ R m ) f(x)=\sum_{m=1}^{M}{C_mI(x∈R_m)} f(x)=m=1MCmI(xRm)
当叶子节点确定时,我们用平方误差 ∑ x i ∈ R m y i − f ( x i ) 2 \sum_{x_i∈R_m}{y_i-f(x_i)}^2 xiRmyif(xi)2来作为评价函数,用平方误差最小的准则来求每个叶子节点的最优输出值,易知,平均值为节点的最优输出值。即:
C ^ m = a v e ( y i ∣ x i ∈ R m ) \hat{C}_m=ave(y_i|x_i∈R_m) C^m=ave(yixiRm)

问题是该怎么样切分内部结点,生成叶子节点呢?这里我们将采用启发式的方法,取第j个特征 x ( j ) x^{(j)} x(j)和这个特征的切分点s,定义两个区域:
R 1 ( j , s ) = x ∣ x ( j ) ≤ S R_1(j,s)={x|x^{(j)}≤S} R1(j,s)=xx(j)S

R 2 ( j , s ) = x ∣ x ( j ) > S R_2(j,s)={x|x^{(j)}>S} R2(j,s)=xx(j)>S
然后寻找这棵树的最优切分变量j和最优切分点s。具体来说就是求解这一个式子:
min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R i ( j , s ) ( y i − c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] \min\limits_{j,s}[\min\limits_{c_1}\sum_{x_i∈R_i(j,s)}{(y_i-c_1)^2}+\min\limits_{c_2}\sum_{x_i∈R_2(j,s)}{(y_i-c_2)^2}] j,smin[c1minxiRi(j,s)(yic1)2+c2minxiR2(j,s)(yic2)2]
其中 c 1 c_1 c1 c 2 c_2 c2 R 1 R_1 R1 R 2 R_2 R2的最优输出值。中括号里面是寻找一个特征中的最优切分点s。我们将遍历所有的特征J,然后找到最优的切分特征J,构成一对(J,s)。来将数据集划分成两个子结点。接着,对每个子节点重复上述划分过程,知道满足停止条件。这样子,就生成了一颗回归树了。

分类树的生成

CART分类树其实跟我们的C4.5树很相似,它是将C4.5的信息增益比改成了基尼指数来作为划分变量的依据。
基尼指数是这样子的:
假设样本有K个类,样本点属于第K类的概率为 p k p_k pk
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^{K}{p_k(1-p_k)}=1-\sum_{k=1}^{K}{p_k^2} Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
如果数据集根据特征A的某一个取值划分为 D 1 D_1 D1 D 2 D_2 D2两部分,则在特征A的条件下,集合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 ) Gini(D,A)=\frac{D_1}{D}Gini(D_1)+\frac{D_2}{D}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)
其中 G i n i ( D 1 ) = 1 − ∑ k = 1 K ( C k D 1 ) 2 Gini(D_1)=1-\sum_{k=1}^{K}{(\frac{C_k}{D_1})^2} Gini(D1)=1k=1K(D1Ck)2
C k C_k Ck D 1 D_1 D1中属于第k类的样本子集,K是类的个数。


随机森林

随机森林是在数据集当中,随机抽取一个子集,作为训练集。而且在划分特征前,先随机选取一个特征集的子集,然后在里面划分最佳特征。


GBDT

GBDT的和adaboost合在一起做笔记吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值