决策树

决策树

1.概念

决策树(decision tree)是一种机器学习方法,通过对给定训练集的学习得到一棵树状的模型,以此来对新的样本进行预测分类。树中的结点在学习过程中进行了划分,划分是用某一属性进行的,某结点划分后的分支是该划分属性的一个取值(离散)或一段取值(连续),需要注意的是,用来进行划分的属性需要经过一定的选择,来使得划分后所获得的“纯度提升”最大。在训练过程中,也需要注意过拟合的出现,这是会用到一些比如剪枝的手段。

2.流程

输入:训练集 D= D = { (x1,y1),...,(xm,ym) ( x 1 , y 1 ) , . . . , ( x m , y m ) }; 属性集A={ a1,...,ad a 1 , . . . , a d }
过程: TreeGenerate(D,A)
生成结点node;
if D中的样本全部属于同一类别C then
  将node标记为C类结点;return
end if
if A= OR D中样本在A上取值相同 then
  将node结点标记为叶结点,将类别标记为的D中样本数最多的类;return
end if
从A中选择最优划分属性 a a ∗ ;
for a a ∗ 的每一个值 av a ∗ v do
  为node生成一个分支;令 Dv D v 表示D中在 a a ∗ 上取值为 av a ∗ v 的样本子集‘
  if Dv= D v = ∅ then
   将分支节点标记为叶结点,其类别标记为D中样本最多的类别; return
  else
   以TreeGenerate( Dv D v ,A\ { a a ∗ })为分支结点
  end if
end for
输出:以node为根结点的一棵决策树

3.划分选择

在学习的过程中,针对当前结点的样本集合是否需要划分和怎样划分,有以下方法:

  • 是否需要划分
     由2中可知,当D中属于同一类别或A= 或者D中的样本在A上的取值相同时,则不用划分。
  • 怎样划分
     划分方法大致分为以下三类,即信息增益,增益率,基尼值数

    • 信息增益
      在这里,需要用到信息熵这样一个概念。信息熵本来是用来判断系统的稳定性的一个指标,即信息熵越大,系统越不稳定;反之越稳定。在这里,信息熵用来度量样本集合纯度(即样本中所含类的多少,越少纯度越高)。如果样本集合中第k类样本所占的比例为 pk(k=1,2,...,|Y|) p k ( k = 1 , 2 , . . . , | Y | ) ,则信息熵定义为:
      Entropy(D)=k=1|Y|pklogpk E n t r o p y ( D ) = − ∑ k = 1 | Y | p k l o g p k

      在此公式中,Entropy(D)的值越小,D的纯度越高。
      信息增益就是基于信息熵计算出来的:
      Gain(D,a)=Entropy(D)v=1V|Dv||D|Entropy(Dv) G a i n ( D , a ) = E n t r o p y ( D ) − ∑ v = 1 V | D v | | D | E n t r o p y ( D v )

      其中,a为D的某个离散属性,其V个可能取值分别为 a1,...,av a 1 , . . . , a v Dv D v 代表使用a的第v个属性值所划分后得到的第v个分支结点集合,给分支结点赋予权重 |Dv||D| | D v | | D | 表示样本数越多的分支结点的影响越大。Gain(D,a)就是属性a对样本集D划分所获得的信息增益(information gain).
      我们需要信息增益值最大的属性来进行划分,这样我们就能使得“纯度提升”最大。所以要对每个属性进行增益计算。

    需要注意Ent(D)和Ent( DV D V )的区别。

    • 增益率
      有的属性划分后每个结点只包含一个样本,这样的分支结点纯度最大,但这样的决策树不具备泛化能力。
      信息增益准则对可能取值数目较多的属性有所偏好,为了减少这种偏好带来泛化不佳的问题,使用增益率来选择最优划分属性。增益率定义为:
      Gainratio(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=1V|Dv||D|log|Dv||D| I V ( a ) = − ∑ v = 1 V | D v | | D | l o g | D v | | D |

      该值是属性a所固有的,成为a的“固有值”。在这里,a的可能取值越多,IV(a) 的值越大。
      在选择时选择增益率最高的。所以,增益率准则偏好于可能取值较少的属性。
    • 基尼值数
      数据集D的纯度也可以用基尼值(Gini index)数来度量:
      Gini(D)=k=1|Y|kkpkpk=1k=1|Y|p2k G i n i ( D ) = ∑ k = 1 | Y | ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 | Y | p k 2

      可以将k和k’看作联合分布变量,从而Gini值数反映了从数据集D中随机抽取两个样本,类别标记不一致的概率。该概率取值越小,说明类别越少;反之类别越多。所以,选取Gini index最小的属性进行划分。

通过以上的方法,就可以建立决策树了。但是在这样训练出来的模型中,往往需要减少过拟合。为了减少该模型的过拟合情况,可以使用剪枝。

剪枝

剪枝分为预剪枝和后剪枝。
预剪枝是在学习生成模型的过程中,对当前结点进行预划分,对预划分后的模型和不划分的模型在验证集上进行验证集精度计算,如果不划分的模型预测结果大于或等于划分的结果,则不划分;否则划分。
后剪枝需要先在样本集上进行学习获得完整的决策树,在从下往上进行剪枝(即假设内部结点不划分),然后计算验证即上的验证集精度并进行比较(与预剪枝类似),从而决定该节点是否进行划分(即剪枝).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值