机器学习九大算法---决策树

来源:互联网 发布:新疆农业大学网络课程 编辑:程序博客网 时间:2024/06/05 03:04

转自:http://blog.csdn.net/bigbigship/article/details/50991370

基本流程

决策树(decision tree)是一类常见的机器学习方法。决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测。 

决策树

决策树的建立

输入: 训练集D={(x1,y1),(x2,y2),...,(xm,ym)}
属性集:A={a1,a2,...,ad}a 
伪代码:

函数 TreeGenerate(D,A)生成节点node:if D 中的样本全属于同一类别 C then    将node标记为C类叶子节点;returnend ifif A = ϕ OR D 中样本在 A 上取值相同 then    将 node 标记为叶节点,其类别标记为 D 中样本数最多的类;returnend ifA中选则最优划分属性a;for a* 的每一个值a*(v) do    为node生成一个分支;令Dv表示D中在a*上取值为a*(v)的样本子集;    if Dv 为空 then        将分支节点标记为叶节点,其类别标记为D中样本最多的类;return    else        以Tree(Dv,A\{a*})为分支节点    end ifend for
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

输出 : 以node为根的一颗决策数

决策数的生成是一个递归的过程,在决策树基本算法中有三种情况会导致递归返回:

  1. 当前节点包含的样本种类属于同一类别,无需划分
  2. 当前样本属性集为空,或者所有样本在所有属性上的取值相同,无法划分
  3. 当前节点包含的样本集合为空,不能划分

划分选择

决策树算法的关键在于如歌选择最优划分属性,随着划分的不断进行,我们希望决策树的分支节点所包含的样本尽可能的属于同一类别。

信息熵

熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面,熵是对不确定性的测量。但是在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。 
信息熵(information entropy)是度量样本集合纯度最常用的一种指标,假定当前样本集合D中第k类样本所占的比例为pk(k=1,2,...,|y|),则D的信息熵定义为: 

Ent(D)=Σ|y|k=1pklog2pk

Ent(D)的值越小,则D的纯度越高

信息增益与ID3算法

假定离散属性aV个可能的取值{a1,a2,...,aV},若使用a来对样本集D进行划分,则会产生V个分支节点,之中第v个节点包含了D中所有在属性a上取值为av的样本,记为Dv,我们可以计算出Dv的信息熵,在考虑到不同的分支节点包含的样本数的不同,给分支节点赋予权重|Dv|/|D|
信息增益: 

Gain(D,a)=Ent(D)ΣV1|Dv||D|Ent(Dv)

|Dv||D|Ent(Dv)可记为Ent(av|a)表示特征属性a的条件下样本的条件熵,信息增益越大,则以为则使用属性a来进行划分所获得的纯度越高,因此可以用来作为属性划分的依据 
a=argminGain(D,a),aA

这也是ID3(Iterative Dichotomiser 3)算法的原理。 
决策树ID3算法请参考:传送门

信息增益率与C4.5算法

C4.5决策树算法不直接使用信息增益,而是使用信息增益率来选择最优划分属性。 

Gainratio(D,a)=Gain(D,a)IV(a)

其中 
IV(a)=ΣVv=1|Dv||D|log2|Dv||D|

IV(a)称为属性a的固有值,属性a的可能取值数目越多,则IV(a)的值通常会越大。增益率准则对取值数目较少的属性有所偏好。 
决策树C4.5算法:传送门

基尼指数与分类回归树

CART树(Classification and Regression Tree)使用基尼指数来选择属性的划分,通过基尼值来度量数据集的纯度 
基尼值: 

Gini(D)=Σ|y|k=1Σkkpkpk=1Σ|y|k=1p2k

Gini(D)反映了从数据集D中取出两个样本,不为同一种类的概率,因此Gini(D)越小,数据集的纯度越高。 
基尼指数: 
Giniindex(D,a)=ΣVv=1|Dv||D|Gini(Dv)

于是我们在候选属性集合A中选择使那个划分后基尼指数最小的那个属性作为最优划分属性。 
CRAT算法:传送门

过拟合处理

在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,导致过拟合,因此可以通过主动去掉一些分支来降低过拟合的风险。 
剪枝的基本策略有:预剪枝和后剪枝

预剪枝

预剪枝是在决策树生成的过程中,对每个结点在划分前先进行预估,若当前结点的划分不能使决策树泛化性能提升,则停止划分并将当前结点标记为叶节点。

后剪枝

后剪枝是先从训练集中生成一颗完整的决策树,然后自底向上的对非叶子结点进行考察,若将改结点对应的子树替换为叶子结点能提高泛化能力,则进行替换。

连续值缺失值处理

连续值处理

由于连续属性的可能取值不再有限,因此不能直接根据连续属性的可能取值进行划分。我们可以使用离散化技术对其进行处理。 
二分法: 
给定样本集D,和连续属性aaD上出现了n个不同的取值, 
将其排序{a1,a2,...,an},然后基于划分点t将样本划分为DtD+tDt包括在属性a上取值小于t的样本,D+t反之。通常将划分点设为该属性在训练集中出现额不大于中位点的最大值从而是的最终决策树使用的划分点都在训练集中出现过。 
eg: 
Ta={ai+ai+12|1in1} 

Gain(D,a)=max{Gain(D,a,t)|tTa}

Gain(D,a)=max{Ent(D)Σλ{+,}|Dλt||D|Ent(Dλt)|tTa}

Gain(D,a,t)是样本D基于划分点t的信息增益,选择使得Gain(D,a,t)最大化的划分点。

缺失值处理

现实任务中常常会遇到不完整的样本,也就是样本中的某些属性值缺失的情况,最简单的方法是直接去除缺失的数据,但是这是对数据信息的极大浪费,我们可以考虑下利用有缺失属性值的样本来进行学习。 
需解决的问题:

  1. 在属性值缺失的情况下进行划分属性的选择
  2. 给定划分属性,若样本在该属性上的值缺失,如何进行划分

给定训练集D,属性集a,令D¯¯¯表示D中在属性a上没有缺失值的样本子集

对于问题一,根据D¯¯¯来判断属性a的优劣,属性a的取值{a1,...,aV},令D¯¯¯v表示D¯¯¯a上取值为v的样本子集,D¯¯¯k表示D¯¯¯中属于第k(k=1,2,3...,|y|)类的样本子集 
D¯¯¯=|y|k=1D¯¯¯k,D¯¯¯=Vv=1D¯¯¯v,假定为每一个样本赋予一个权重wx 
设 


ρ=ΣxD¯wx/ΣxDwx 
p¯k=ΣxD¯kwx/ΣxDwx 
r¯v=ΣxD¯vwx/ΣxDwx 

ρ表示属性a上无缺样本所占比例,p¯k表示无缺样本中第k类所占的比例,r¯v表示无缺样本中属性a上取值为av的所占的比例。 
推广到信息增益公式上: 

Gain(D,a)=ρGain(D¯¯¯,a) 
Gain(D,a)=ρ(Ent(D¯¯¯)ΣVv=1r¯vEnt(D¯¯¯v)) 
其中Ent(D¯¯¯)=Σ|y|k=1p¯klog2p¯k 

对于问题二,样本x在属性a上的取值缺失,则将x划分到所有额子结点中,将权值变为r¯vwx,意思i将同一个样本以不同的概率划入到同的子结点中。