决策树

决策树

决策树是一种基本的分类和回归方法;决策树的学习通常包括3个步聚:特征选择、决策树的生成和决策树的修剪。

1、数据处理

1.1、连续值处理
我们知道,决策树是通过离散属性来生成的,但实际任务中常会遇到连续属性,因为有必要处理连续值。
下面是西瓜的数据集:

编号色泽触感密度好瓜
1-硬滑0.697
2乌黑硬滑0.774
3乌黑硬滑0.634
4青绿软粘0.608
5-软粘0.556
6青绿软粘0.403
7乌黑硬滑0.481
8乌黑软粘0.437
9乌黑硬滑0.666
10青绿硬滑0.243
11浅白硬滑0.245
12浅白硬滑0.343
13-硬滑0.639
14浅白硬滑0.657
15乌黑硬滑0.360
16浅白软粘0.593
17青绿硬滑0.719

对于密度来说是一个连续值,那如何寻找密度的划分点?如何计算密度的信息增益?

第一步:排序,按照样本数据的密度大小进行排序(共17个数据):

{0.243, 0.245, 0.343, 0.360, 0.403, 0.437, 0.481, 0.556, 0.593, 0.608, 0.634, 0.639, 0.657, 0.666, 0.697,0.719, 0.774}

第二步:根据公式计算划分点集合(共16个数据):

Ta=ai+ai+12;1i<n T a = a i + a i + 1 2 ; 1 ≤ i < n

Ta= T a = {0.244, 0.294, 0.351, 0.381, 0.420, 0.459, 0.518, 0.574, 0.600, 0.621, 0.636, 0.648, 0.661, 0.681, 0.708, 0.746}

第三步:根据公式计算每个划分点的信息增益:
以0.381划分点为例,

计算信息熵:
数据集中共17个样本,其中有8个正例,9个反例:
Ent(D)=817log2817917log2917=0.998 E n t ( D ) = − 8 17 ∗ l o g 2 8 17 − 9 17 ∗ l o g 2 9 17 = 0.998


计算条件熵:
对于密度小于0.381的样本中,共有4个样本,其中有0个正例,4个反例:
Ent(D|a0.381)=04log20444log244=0 E n t ( D | a ≤ 0.381 ) = − 0 4 ∗ l o g 2 0 4 − 4 4 ∗ l o g 2 4 4 = 0

对于密度大于0.381的样本中,共13个样本,其中有8个正例,5个反例:
Ent(D|a>0.381)=813log2813513log2513=0.961 E n t ( D | a > 0.381 ) = − − 8 13 ∗ l o g 2 8 13 − 5 13 ∗ l o g 2 5 13 = 0.961

样本中,密度小于0.381的样本数共4个,大于0.381的样本数共13个:
Ent(D|A,Ta=0.381)=417Ent(D|a0.381)+1317Ent(D|a>0.381)=0.735 E n t ( D | A , T a = 0.381 ) = 4 17 ∗ E n t ( D | a ≤ 0.381 ) + 13 17 ∗ E n t ( D | a > 0.381 ) = 0.735


计算信息增益:
Gain(D|A,0.381)=Ent(D)Ent(D|A,Ta=0.381)=0.263 G a i n ( D | A , 0.381 ) = E n t ( D ) − E n t ( D | A , T a = 0.381 ) = 0.263

第四步:选择信息增益最大的划分点作为密度的划分点:

Gain(D,A)=maxtTaGain(D,A,t) G a i n ( D , A ) = m a x t ∈ T a G a i n ( D , A , t )

刚好0.381划分点信息增益最大,所以选择0.381为密度的划分点.

1.2、缺失值处理
现实任务中常会遇到不完整样本,即样本的某些属性值缺失,如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,显然对数据信息的极大的浪费。

公式:

Gain(D,A)=pGain(D,A)p G a i n ( D , A ) = p ∗ G a i n ( D ′ , A ) ; p 为 无 缺 失 值 的 样 本 占 总 样 本 的 比 例

例如色泽属性,1、3、5存在缺失值,假设每个样本的权重是一样的, D D ′ 为无缺失值的样本,那么:

Gain(D,A)=1417Gain(D,A) G a i n ( D , A ) = 14 17 ∗ G a i n ( D ′ , A )

2、划分选择

在构造决策树时,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,因此我们需要选择划分的特征。

2.1、ID3算法

信息熵:是度量样本集合纯度最常用的一种指标,信息熵越小,纯度越高;
假设当前样本集合D分n类,其中第k类样本所占的比例为 pk p k ,则D的信息熵为:

Ent(D)=k=1npklog2pk E n t ( D ) = − ∑ k = 1 n p k ∗ l o g 2 p k

条件熵:
假设当前样本集合D中,特征A有m个类别,其中第k个类的样本集合为 Di D i ,样本所点的比例为 pk p k ,则集合D中特征A的条件熵为:

Ent(D|A)=i=1m(pkEnt(Di)) E n t ( D | A ) = ∑ i = 1 m ( p k ∗ E n t ( D i ) )

信息增益:特征A对训练数据集D的信息增益Gain(D,A),定义为集合D的经验熵与特征A给定条件下D的经验条件熵之差;选择信息增益最高的特征作为划分特征。

Gain(D,A)=Ent(D)Ent(D,A) G a i n ( D , A ) = E n t ( D ) − E n t ( D , A )


2.2、C4.5算法

增益率
有这样一个情况,假设样本集共有n个数据,而特征A也有n个类别,那特征A的信息增益达到了最大,但这样构造的决策树却不具有泛化能力,无法对新样本进行有效的预测,因此在C4.5算法中,使用增益率来选择划分的特征。一般地,特征取值越多,IV(A)就越大。

Gain_ratio(D,A)=Gain(D,A)IV(A) G a i n _ r a t i o ( D , A ) = G a i n ( D , A ) I V ( A )

,IV(A)=v=IVpvlog2pv 其 中 , I V ( A ) = − ∑ v = I V p v ∗ l o g 2 p v

例如触感属性,可取值“硬滑”和“软粘”两个,样本中“硬滑”占比 1217 12 17 ,“软粘”占比 517 5 17

IV()=1217log21217517log2517=0.874 I V ( 触 感 ) = − 12 17 ∗ l o g 2 12 17 − 5 17 ∗ l o g 2 5 17 = 0.874


2.3、CART算法
ID3和C4.5算法只都是生成分类树,而CART算法即可生成分类树,也可以生成回归树,CART算法生成的树都是二叉树。

2.3.1、回归树(最小二乘回归树)
当数据的输出变量是连续值时,我们需要构造回归树。下面以例子的型式讲解如何生成回归树。如下例子,{触感,密度}是特征变量,{含糖率}是输出变量:

编号触感密度含糖率
1硬滑0.6970.460
2硬滑0.7740.376
3硬滑0.6340.264
4软粘0.6080.318
5软粘0.5560.215
6软粘0.4030.237
7硬滑0.4810.149
8软粘0.4370.211
9硬滑0.6660.091
10硬滑0.2430.267
11硬滑0.2450.057
12硬滑0.3430.099
13硬滑0.6390.161
14硬滑0.6570.198
15硬滑0.3600.370
16软粘0.5930.042
17硬滑0.7190.103

例子中,“触感”特征是离散值,且输入空间只有两个值,“密度”特征是连接值,下面我将通过例子,找出第一个划分对 (v,s) ( v , s ) ,v是特征,s是切分点;

触感

触感的输入空间为{硬滑,软粘},样本中对应该的输出集合:

硬滑:{0.460, 0.376, 0.264, 0.149, 0.091, 0.267, 0.057, 0.099, 0.161, 0.198, 0.370, 0.103}
软粘:{0.318, 0.215, 0.237, 0.211, 0.042}

通过公式计算切分点的 c1 c 1 c2 c 2 值:

c1=averagei=1yi|xiR1 c 1 = a v e r a g e ∑ i = 1 y i | x i ∈ R 1

c2=averagei=1yi|xiR2 c 2 = a v e r a g e ∑ i = 1 y i | x i ∈ R 2

对于硬滑切分点, c1 c 1 是非硬滑样本输出值的平均值; c2 c 2 是硬滑样本输出值的平均值。
c1()=15(0.318+0.215+0.237+0.211+0.042)=0.205 c 1 ( 硬 滑 ) = 1 5 ( 0.318 + 0.215 + 0.237 + 0.211 + 0.042 ) = 0.205
c2()=112(0.460+0.376+0.264+0.149+0.091+0.267+0.057+0.099+0.161+0.198+0.370+0.103)=0.216 c 2 ( 硬 滑 ) = 1 12 ( 0.460 + 0.376 + 0.264 + 0.149 + 0.091 + 0.267 + 0.057 + 0.099 + 0.161 + 0.198 + 0.370 + 0.103 ) = 0.216

s硬滑软粘
c1 c 1 0.2050.216
c2 c 2 0.2160.205

计算损失函数

l=xiR1(yic1)2+xjR2(yjc2)2 l = ∑ x i ∈ R 1 ( y i − c 1 ) 2 + ∑ x j ∈ R 2 ( y j − c 2 ) 2

s硬滑软粘
l0.2290.229

最小损失函数的划分点,就是该特征的最优划分点;在这里,(触感,硬滑) = (触感,软粘),这是肯定的,回归树算法本来就是生成二叉树的,而触感的输入空间只有“硬滑”和“软粘”两个,所以它们的损失函数是相等的。

密度
根据“密度”特征的值,对样本进行排序,然后计算切分点集合:

Ta=ai+ai+12;1i<n T a = a i + a i + 1 2 ; 1 ≤ i < n

候选切分点集合: T T 密 度 = {0.244, 0.294, 0.352, 0.382, 0.420, 0.459, 0.519, 0.575, 0.601, 0.621, 0.637, 0.648, 0.662, 0.682, 0.708, 0.747}

计算切分点的 c1 c 1 c2 c 2 值:

c1=averagei=1yi|xiR1 c 1 = a v e r a g e ∑ i = 1 y i | x i ∈ R 1

c2=averagei=1yi|xiR2 c 2 = a v e r a g e ∑ i = 1 y i | x i ∈ R 2

例如s = 0.352, R1 R 1 = {x|x<0.325}, R2 R 2 = {x|x>0.325};

s0.2440.2940.3520.3820.4200.4590.5190.5750.6010.6210.6370.6480.6620.6820.7080.747
c1 c 1 0.2670.1620.1410.1980.2060.2070.1990.2010.1830.1970.2030.1990.1990.1910.2090.203
c2 c 2 0.2090.2200.2280.2170.2160.2160.2230.2240.2460.2360.2320.2460.2580.3130.2400.376

计算损失函数:

l=xiR1(j,s)(yic1)2+xiR2(j,s)(yic2)2 l = ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2

s0.2440.2940.3520.3820.4200.4590.5190.5750.6010.6210.6370.6480.6620.6820.7080.747
l l 0.227 0.224 0.211 0.229 0.230 0.230 0.228 0.228 0.213 0.223 0.227 0.222 0.219 0.193 0.228 0.202

显然,当s=0.682时,损失函数最小,所以密度的最优切分点为0.682。

选择最优切分对:

l(0.682)=0.193
l()=0.229 l ( 触 感 , ∗ ) = 0.229
显然, l(0.682)< l ( 密 度 , 0.682 ) < l_{(触感,*)} ,因此选择(密度,0.682)作为第一个划分对。

2.3.2、分类树
CART分类决策树使用“基尼指数”来选择划分属性,“基尼指数”越小,则数据集的纯度越高。
假设数据集D分m类,第k类的样本比例为 pk p k ,则数据集D的基尼指数(跟ID3算法中的信息熵的作用一样):

Gini(D)=k=1,kkmpkpk=1k=1mp2k G i n i ( D ) = ∑ k = 1 , k ′ ≠ k m p k ∗ p k ′ = 1 − ∑ k = 1 m p k 2

特征A的基尼指数(跟ID3算法中的条件熵的作用一样):

Gini_index(D,a)=v=1v|Dv||D|Gini(Dv) G i n i _ i n d e x ( D , a ) = ∑ v = 1 v | D v | | D | G i n i ( D v )

选择基尼指数最小的属性作为划分属性即:

a=argminaAGini_index(D,a) a ∗ = a r g m i n a ∈ A G i n i _ i n d e x ( D , a )

2.3.3、CART剪枝


3、剪枝

在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,很容易造成“过拟合”。而剪枝是决策树学习算法对付“过拟合”的主要手段,剪枝又分为预剪枝和后剪枝。

3.1、预剪枝
预剪枝是指在决策树生成过程中,对每个结点在划分前进行评估,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点。下面介绍几种预剪枝方法:

a、最大深度:

决策树的最大深度指树根和叶子之间的最大长度;

b、每片叶子的最小样本数:

在分裂节点时,很有可能一片叶子上有 99 个样本,而另一片叶子上只有 1 个样本;这将使我们陷入困境,并造成资源和时间的浪费;如果想避免这种问题,我们可以设置每片叶子允许的最小样本数;这个数字可以被指定为一个整数,也可以是一个浮点数;如果它是整数,它将表示这片叶子上的最小样本数;如果它是个浮点数,它将被视作每片叶子上的最小样本比例。

c、每次分裂的最小样本数:

这个参数与每片叶子上的最小样本树相同,只不过是应用在节点的分裂当中。

d、最大特征数:

有时,我们会遇到特征数量过于庞大,而无法建立决策树的情况。在这种状况下,对于每一个分裂,我们都需要检查整个数据集中的每一个特征。这种过程极为繁琐。而解决方案之一是限制每个分裂中查找的特征数。如果这个数字足够庞大,我们很有可能在查找的特征中找到良好特征(尽管也许并不是完美特征)。然而,如果这个数字小于特征数,这将极大加快我们的计算速度。

e、验证集精度:

在每个可以划分的结点,计算划分前和划分后在验证集上的精度,如果划分前的精度高于划分后的精度,那么停止该结点的划分,前将该结点标记为叶结点。

3.2、后剪枝
后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。

a、损失函数

计算某个结点剪枝前后的损失函数,如果剪枝后的损失函数更小,则标记该结点为叶结点。

设叶结点的个数为|T|,t为叶结点,该叶结点有 Nt N t 个样本点:

l(T)=t=1|T|NtEntt(D)+a|T| l ( T ) = ∑ t = 1 | T | N t E n t t ( D ) + a | T |

Entt(D) E n t t ( D ) 是叶结点t的信息熵;
a≥0,较大的a促使选择较简单的树,较小的a促使选择较复杂的树;

b、验证集精度:

计算某个结点剪枝前后的精度,计算剪枝前和剪枝后在验证集上的精度,如果剪枝后的精度高于剪枝前的精度,那么前将该结点标记为叶结点。

4、随机森林

随机森林也是决策树学习算法对付“过拟合”的手段之一,但这里不详细介绍,以后在集成方法中再介绍。

5、sklearn中的决策树

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(x_values, y_values)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值