机器学习---决策树--理论(个人理解)

决策树是一种基于树结构来进行决策的,这跟人类在面临一些决策问题时的自然反应机制很类似。

决策树包含一个根节点、若干个内部节点、若干个叶子节点。 一般的,根节点和内部节点只用于划分数据集,而叶子节点对应决策的结果

ID3算法---基于信息增益

1、信息增益

信息增益是ID3算法划分数据集的一种方法。而在划分数据集前后信息发生的变化就是信息增益。那么我们如何计算信息增益呢?要计算信息增益首先要了解信息熵。

信息熵

定义:信息熵是度量样本集合纯度最常见的一种指标。

假定样本集合D 中第k 类样本所占比例为p_{k}(k=1,2,.....,n),则D的信息熵为:Ent(D)=-\sum ^{n}_{k=1}p_{k}log_{2}p{k}

Ent(D)的值越小,说明D纯度越高。

计算信息增益

假定离散属性a有V个可能的取值\{a_{1},a_{2},a_{3},....,a_{v}\},若使用a这个属性来划分数据集D,则会产生V个分支节点,其中第v个分支节点包含了D中所有在属性a上的取值为av的样本,记作D_{v}。既有信息增益公式:

                                              Gain (D,a)=Ent(D)-\sum^{v}_{i=1}\dfrac {|D_{v}|}{|D|}Ent(D_{v})

注:其中 \dfrac {|D_{v}|}{|D|}主要考虑到不同分支节点所包含的样本数不同,所附加的权重,即样本数越多权重越大,影响越大。

一般而言,信息增益越大意味着使用此属性来划分的纯度提升越大。因此我们在选取划分属性列时总是选取信息增益较大的那个属性。

例:

一个简单的数据集以便于理解

表1-1 结婚数据
编号是否有房是否有车是否结婚(标签)
1
2
3
4
5
6
7
8
9
10

此数据集有10条数据其中正例5条,负例5条。因此可计算数据集的熵为:Ent(D)=-(\dfrac{5}{10}log_2\dfrac{5}{10}+\dfrac{5}{10}log_2\dfrac{5}{10})=1

然后我们要计算出单前属性集合{是否有车,是否有房}的每一个属性的信息增益,以 ‘是否有房‘ 为例(设为D1),它有两个取值{‘是’,‘否’},其中取值为‘是’的编号有{1,2,4,6,8,9}6个,其中正例有5个(也就是  ‘是否有房’==是&&‘是否结婚’==是)占比为p_{1}=\dfrac{5}{6},负例为1个占比为p_{2}=\dfrac{1}{6}。因此Ent(D_{1})=-(\dfrac{5}{6}log_{2}\dfrac{5}{6}+\dfrac{1}{6}log_{2}\dfrac{1}{6})=0.65

同理可得‘是否有房’(设为D2) 取值为否:{3,5,7,10}4个,其中正例为0,负例为4,所以有Ent(D_{2})=-(0+log_{2}1)=0

于是可“是否有房”这一列的计算信息增益为Gain(D1)=1-(\dfrac {6}{10}*0.65+\dfrac {4}{10}*0)=0.61

同理可得是否有车的信息增益为Gain(D2)=1-(\dfrac {7}{10}*0.985+\dfrac {3}{10}*0.918)=0.035

选择信息增益较大的一列作为划分数据集的标准,即使用‘是否有房’作为划分标准。

继续对数据集的其他列进行划分,已划分的列不在划分。因此最终的决策树如下:

C4.5----基于信息增益比

C4.5对于ID3的优化是在于惩罚了列中属性值类别较多的列。比如:ID3算法既然要选择要信息增益大的,为什么不直接选择编号那一列呢?选择编号那一列的信息增益为最大值1。那么这个决策树就有10个分支节点。这样的决策树不具有泛化能力。也存在着严重的过拟合。而C4.5对这种属性值类别较多列进行了惩罚。

信息增益比

公式:Gain\_ratio(D,a)=\dfrac{Gain(D,a)}{IV(a)}

其中IV(a)=-\sum^{v}_{i=1}\dfrac {|D_{v}|}{|D|}log_{2}(\dfrac {|D_{v}|}{|D|})。这就是惩罚项,Gian(D,a)为信息增益(计算参照ID3),而IV(a)表示,当列的属性值较多时IV(a)越大,Gain_ratio()越小。自然不选择此列作为划分标准。

同样基于上面的数据集进行计算。

Gain_ratio(D1)=Gain(D1)/IV(D1)    由于Gain(D1)=0.61

IV(D1)=-(\dfrac {6}{10}*log_{2}\dfrac {6}{10}+\dfrac {4}{10}*log_{2}\dfrac {4}{10})=0.971      由此可得Gain_ratio(D1)=0.628

同理计算'是否有车'

Gain_ratio(D2)=Gain(D2)/IV(D2)    由于Gain(D2)=0.035

IV(D2)=-(\dfrac {3}{10}*log_{2}\dfrac {3}{10}+\dfrac {7}{10}*log_{2}\dfrac {7}{10})=0.881      由此可得Gain_ratio(D2)=0.0397

我们还可以计算一下“编号”

Gain_ratio(D0)=Gain(D0)/IV(D0)    由于Gain(D0)=1

IV(D0)=-(1*log_{2}\dfrac {1}{10})=3.32      由此可得Gain_ratio(D0)=0.301

所以按照“是否有房”来划分数据集。

 

Cart决策树--基于基尼系数

Cart决策树不同于ID3、C4.5的地方在于:Cart决策树二分决策树,及Cart决策树构建出来的模型是二叉树每个节点最多有两个子节点,而ID3、C4.5不一定是二叉树(取决于特征的类别数目)

--分类树

基尼系数和信息熵一样都是用来衡量数据集的纯度的。选择具有最小Gain_GINI的属性及其属性值,作为最优分裂属性以及最优分裂属性值。Gain_GINI值越小,说明二分之后的子样本的“纯净度”越高,即说明选择该属性(值)作为分裂属性(值)的效果越好。 
  对于样本集D,GINI计算如下: 

GINI(D)=1-\sum^k_{k=1}p_k^2

其中p_k表示在样本集中第k个类别出现的频率;

对于含有N个样本的样本集D,根据属性A的第i个属性值,将数据集D划分成两部分(及A和非A),则划分成两部分之后,Gain_GINI计算如下: 

Gain\_GINI(D,a)=\sum_{v=1}^{V}\dfrac {|D^v|}{|D|}Gini(D^v)

于是我们在候选属性集A中,选择那个使得划分后的基尼系数最小的那个属性作为最优划分属性,即:

a=argmin(Gain\_GINI(D,a))

回归树--待测数据为连续型数据

回归树选取Gain_σ为评价分裂属性的指标。选择具有最小Gain_σ的属性及其属性值,作为最优分裂属性以及最优分裂属性值。Gain_σ值越小,说明二分之后的子样本的“差异性”越小,说明选择该属性作为分裂属性的效果越好。

对于待测数据集D 计算样本集的总方差:

\sigma=\sqrt{(y_k-\mu)^2}

其中y_k 是待测数据,\mu是均值

同样的根据属性A的第i个属性值,将数据集D划分成两部分,则划分成两部分之后(及>Ai和<Ai),Gain_σ计算如下:

Gini\_\sigma(D)=\sigma(D1)+\sigma(D2)    这里的D1,D2即是指两个部分的数据集一个>Ai 一个<Ai

 

对于属性A,分别计算任意属性值将数据集划分成两部分之后的Gain_σ,选取其中的最小值,作为属性A得到的最优二分方案:  min(Gini\_\sigma(D)) 去最小值的那个,作为划分属性;
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值