决策树原理详解

使用的例子:

人员眼睛颜色头发颜色所属人种
1黑色金色白种人
2蓝色黑色黄种人
3灰色金色白种人
4蓝色金色白种人
5灰色金色白种人
6黑色黑色黄种人
7灰色黑色黄种人
8蓝色黑色黄种人

决策树的基本思想是从一颗空的决策树开始,选择某一属性作为测试属性,该测试属性对应决策树中的决策顶点,再在剩下的数据集上递归选择另一属性建立决策顶点。

一。决策树学习算法大体上可以分为两个阶段:建模阶段和预测阶段

建模阶段可通过以下步骤实现:

  • 首先,所有训练样本都处于根节点位置
  • 基于一定的策略选择属性
  • 根据选择的属性,递归地划分样本

我们主要要解决两个问题:

  • 递归结束的条件:递归的情况有以下几种

    • 没有可用的数据:以父节点的标签作为标签
    • 被分到的样本都属于同一个类别:以该类别作为标签
    • 所有属性都已用于之前的划分,没有可用的属性可以继续划分:采用多数投票的方式选出标签。
  • 通过什么策略选择节点的属性

使用上面的例子,如果我们先选眼睛颜色作为属性,可以建出如下的树
在这里插入图片描述

如果先选择头发颜色作为属性,可以建出如下的树:

在这里插入图片描述

从上面两棵树来看,选择不同属性作为节点对建树的影响很大,所以我们要选择合适的策略算法,常用的有ID3,C4.5,CART,这三种之后会逐个解释。

通过上述步骤,就可以建立一棵决策树,接下来就是预测阶段

预测阶段就是根据带预测数据各属性的取值,逐步遍历树,直到叶子节点,叶子节点对应的标签就说我们的预测结果,比如我们要预测蓝眼睛黄头发的属于哪个人种,以第一棵树为例

从根节点出发,先看眼睛颜色,为蓝色,所以选择根节点的第二个节点作为下个节点,然后看头发颜色,为黄色,选择第一个节点,此时已到叶子节点,对应的标签为白种人,所以我们预测结果为白种人。

二。决策函数

上面已经解释了建立一颗树的大致步骤,但还有最重要的一个问题没有解决,就是选择什么策略:

ID3使用信息增益度选择测试属性,要解释如何计算信息增益度,先要解释信息熵,信息熵是衡量一个信息不确定性大小的值,通常我们认为,如果某个信息让我们的判断更加有序,清晰,则它信息熵越小,反之越大。

X X X的信息熵计算公式如下:

H ( X ) = ∑ x ∈ X ( − p ( x ) × l o g ( p ( x ) ) ) H(X) = \sum_{x\in X}(-p(x)\times log(p(x))) H(X)=xX(p(x)×log(p(x)))​​​

条件熵: H ( Y ∣ X ) H(Y|X) H(YX)表示是在 X X X确定下 Y Y Y的熵,可以通过如下公式计算

H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) = ∑ x ∈ X ∑ y ∈ Y p ( x , y ) l o g 2 p ( y ∣ x ) H(Y|X) = \sum_{x\in X}p(x)H(Y|X=x)=\sum_{x\in X}\sum_{y\in Y}p(x,y)log_2p(y|x) H(YX)=xXp(x)H(YX=x)=xXyYp(x,y)log2p(yx)

联合熵: H ( X , Y ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) l o g 2 p ( x , y ) = H ( X ) + H ( Y ∣ X ) = H ( Y ) + H ( Y ∣ X ) ) H(X,Y) = -\sum_{x\in X}\sum_{y\in Y}p(x,y)log_2p(x,y)=H(X)+H(Y|X)= H(Y)+H(Y|X)) H(X,Y)=xXyYp(x,y)log2p(x,y)=H(X)+H(YX)=H(Y)+H(YX))

这表明两个变量的联合熵等于 X X X的熵加上给定 X X X,出现 Y Y Y的条件熵。

接着根据联合熵的公式定义两个变量的互信息为 I ( X , Y ) = H ( Y ) − H ( Y ∣ X ) I(X,Y)=H(Y)-H(Y|X) I(X,Y)=H(Y)H(YX)

互信息量表示两个变量之间的相关程度,互信息量越大,表示两个变量相关程度越大, X X X就越适合作为属性,比如 Y Y Y表示人种, X X X表示头发颜色,如果 I ( X , Y ) I(X,Y) I(X,Y)越大,表示两者之间关系很大,此时选择头发颜色作为属性是合适的。

例如,上例中 H ( Y ) = − 0.5 ∗ l o g 2 ( 0.5 ) − 0.5 ∗ l o g 2 0.5 = 1 H(Y) = -0.5*log_2(0.5)-0.5*log_20.5=1 H(Y)=0.5log2(0.5)0.5log20.5=1

H ( Y ∣ X = " 眼睛颜色 " ) = 2 8 ∗ ( − 1 2 ∗ l o g 2 1 2 − 1 2 ∗ l o g 2 1 2 ) + 3 8 ∗ ( − 1 3 ∗ l o g 2 1 3 − 2 3 ∗ l o g 2 2 3 ) + 3 8 ∗ ( − 1 3 ∗ l o g 2 1 3 − 2 3 ∗ l o g 2 2 3 ) H(Y|X="眼睛颜色")=\frac{2}{8}*(-\frac{1}{2}*log_2\frac{1}{2}-\frac{1}{2}*log_2\frac{1}{2})+\frac{3}{8}*(-\frac{1}{3}*log_2\frac{1}{3}-\frac{2}{3}*log_2\frac{2}{3})+\frac{3}{8}*(-\frac{1}{3}*log_2\frac{1}{3}-\frac{2}{3}*log_2\frac{2}{3}) H(YX="眼睛颜色")=82(21log22121log221)+83(31log23132log232)+83(31log23132log232)

I ( X = " 眼睛颜色 " , Y ) = H ( Y ) − H ( Y ∣ X = " 眼睛颜色 " ) I(X="眼睛颜色",Y) = H(Y)-H(Y|X="眼睛颜色") I(X="眼睛颜色"Y)=H(Y)H(YX="眼睛颜色")

类似的,可以算出 I ( X = " 头发颜色 " , Y ) I(X="头发颜色",Y) I(X="头发颜色"Y)​,然后取两者中的较大值。

但是采用信息增益进行数据分裂容易偏向取值较多的特征,可以理解为分支数越多,不确定性越大,熵就会越大。

C4.5采用增益率克服了上述问题,通过引入一个变量增益率

S p l i t I n f o A ( D ) = − ∑ j ∣ D j ∣ ∣ D ∣ × l o g 2 ( ∣ D j ∣ D ) SplitInfo_A(D)=-\sum_{j}\frac{|D_j|}{|D|}\times log_2(\frac{|D_j|}{D}) SplitInfoA(D)=jDDj×log2(DDj)

对信息增益进行归一化,一个特征的取值越多,变量增益率就越大,把它作为分母,就可以校正信息增益偏向取值较多的特征的问题,

即最终结果为 G a i n R a t i o A ( D ) = G a i n A ( D ) S p l i t I n f o A ( D ) GainRatio_A(D)=\frac{Gain_A(D)}{SplitInfo_A(D)} GainRatioA(D)=SplitInfoA(D)GainA(D)

取计算结果最大的特征作为属性。

CART模型基于基尼指数选择合适的属性。

如果一个数据集包含来自n个类的样本,那么基尼指数 g i n i ( D ) = ∑ j P j ( 1 − p j ) = 1 − ∑ j p j 2 gini(D)=\sum_jP_j(1-p_j)=1-\sum_jp_j^2 gini(D)=jPj(1pj)=1jpj2

如果一个数据集 D D D​被分成两个子集 D 1 D_1 D1​和 D 2 D_2 D2​,大小分别为 N 1 N_1 N1​和 N 2 N_2 N2​,那么基尼指数 g i n i s p l i t ( D ) = N 1 N g i n i ( D 1 ) + N 2 N g i n i ( D 2 ) gini_{split}(D)=\frac{N_1}{N}gini(D_1)+\frac{N_2}{N}gini(D_2) ginisplit(D)=NN1gini(D1)+NN2gini(D2)

取基尼指数最小的属性最为本节点的属性。

代码实现, 决策函数为ID3/C4.5/CART

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值