初识人工智能--决策树算法

机器学习中分类和预测算法的评估:

* 准确率
* 速度
* 强壮行
* 可规模性
* 可解释性

1. 什么是决策树/判定树(decision tree)?

判定树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布。树的最顶层是根结点。
初识人工智能--决策树算法_第1张图片

2. 机器学习中分类方法中的算法

  • 朴素贝叶斯(Naive Bayes, NB)
  • Logistic回归(Logistic Regression, LR)
  • 决策树(Decision Tree, DT) –>本文主要讲述决策树
  • 支持向量机(Support Vector Machine, SVM)

3. 构造决策树的基本算法 分支 根结点

结点

初识人工智能--决策树算法_第2张图片

树叶

初识人工智能--决策树算法_第3张图片

3.1 熵(entropy)概念:

信息和抽象,如何度量?
1948年,香农提出了 ”信息熵(entropy)“的概念
一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息==>信息量的度量就等于不确定性的多少例子:猜世界杯冠军,假如一无所知,猜多少次?
每个队夺冠的几率不是相等的
比特(bit)来衡量信息的多少

这里写图片描述

这里写图片描述
变量的不确定性越大,熵也就越大

3.1 决策树归纳算法 (ID3)

1970-1980, J.Ross. Quinlan, ID3算法
选择属性判断结点

信息获取量(Information Gain):Gain(A) = Info(D) - Infor_A(D)
通过A来作为节点分类获取了多少信息

初识人工智能--决策树算法_第4张图片

计算过程:先单独计算Info(D),以目标函数为计算基点,总实例数为14,其中no的实例数为5,yes的实例数为9.通过信息熵公式计算,可得:
这里写图片描述
再计算包含age属性时的Info_age_(D),其中age可以划分为三个阶段:youth:占实例总数的5/14,middle_aged占4/14,senior占5/14,继续通过信息熵公式计算,得到Info_age_(D),再通过信息获得量公式计算出最后的结果。
初识人工智能--决策树算法_第5张图片
这里写图片描述

类似,Gain(income) = 0.029, Gain(student) = 0.151, Gain(credit_rating)=0.048

所以,选择age作为第一个根节点(取大的)

初识人工智能--决策树算法_第6张图片
划分好跟节点后,排除已经称为节点的属性,继续通过该方法,可以继续划分结点。若出现划分好的表格中的目标函数为同一类时(eg:yes),便不需要继续划分。

重复以上步骤。。。

算法:
* 树以代表训练样本的单个结点开始(步骤1)。
* 如果样本都在同一个类,则该结点成为树叶,并用该类标号(步骤2 和3)。
* 否则,算法使用称为信息增益的基于熵的度量作为启发信息,选择能够最好地将样本分类的属性(步骤6)。该属性成为该结点的“测试”或“判定”属性(步骤7)。在算法的该版本中,
* 所有的属性都是分类的,即离散值。连续属性必须离散化。
* 对测试属性的每个已知的值,创建一个分枝,并据此划分样本(步骤8-10)。
* 算法使用同样的过程,递归地形成每个划分上的样本判定树。一旦一个属性出现在一个结点上,就不必该结点的任何后代上考虑它(步骤13)。
* 递归划分步骤仅当下列条件之一成立停止:
* (a) 给定结点的所有样本属于同一类(步骤2 和3)。
* (b) 没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,使用多数表决(步骤5)。
* 这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结
* 点样本的类分布。
* (c) 分枝
* test_attribute = a i 没有样本(步骤11)。在这种情况下,以 samples 中的多数类
* 创建一个树叶(步骤12)

3.1 其他算法:

C4.5(Quinlan):它能够处理连续型属性或离散型属性的数据;能够处理具有缺失值的属性数据;使用信息增益率而不是信息增益作为决策树的属性选择标准;对生成枝剪枝,降低过拟合。

如下为决策树算法框架:

TreeGrowth(E, F)//E--训练集  F—属性集  
   if stopping_cond(E, F) = true then     //达到停止分裂条件(子集所有样本同为一类或其他)  
      leaf = createNode()                 //构建叶子结点  
      leaf.label = Classify(E)            //叶子结点类别标签  
      return leaf  
   else"white-space:pre">                   
      root = createNode()"white-space:pre">       //创建结点  
      root.test_cond = find_best_split(E, F)    确定选择哪个属性作为划分更小子集//  
      令 V = {v | v是root.test_cond 的一个可能的输出}  
      for each v  V do  
         Ev = {e | root.test_cond(e)  = v and e  E}  
         child = TreeGrowth(Ev, F)  
         //添加child为root的子节点,并将边(root——>child)标记为v  
       end for  
   end if  
   return root  

C4.5中用到的几个公式:

<1> 训练集的信息熵
这里写图片描述
其中 m代表分类数,pi为数据集中每个类别所占样本总数的比例。
<2> 划分信息熵—-假设选择属性A划分数据集S,计算属性A对集合S的划分信息熵值

case 1:A为离散类型,有k个不同取值,根据属性的k个不同取值将S划分为k各子集{s1 s2 …sk},则属性A划分S的划分信息熵为:(其中 |Si| |S| 表示包含的样本个数)
这里写图片描述
case 2: A为连续型数据,则按属性A的取值递增排序,将每对相邻值的中点看作可能的分裂点,对每个可能的分裂点,计算:
这里写图片描述

其中,SL和SR分别对应于该分裂点划分的左右两部分子集,选择EntropyA(S)值最小的分裂点作为属性A的最佳分裂点,并以该最佳分裂点按属性A对集合S的划分熵值作为属性A划分S的熵值。

<3> 信息增益
按属性A划分数据集S的信息增益Gain(S,A)为样本集S的熵减去按属性A划分S后的样本子集的熵,即
这里写图片描述
<4> 分裂信息
利用引入属性的分裂信息来调节信息增益
这里写图片描述
<5> 信息增益率
这里写图片描述

算法:Classification and Regression Trees (CART):

是一种二分递归分割技术把当前样本划分为两个子样本,使得生成的每个非叶子结点都有两个分支,因此CART算法生成的决策树是结构简洁的二叉树。由于CART算法构成的是一个二叉树,它在每一步的决策时只能是“是”或者“否”,即使一个feature有多个取值,也是把数据分为两部分。

步骤:
(1)将样本递归划分进行建树过程
(2)用验证数据进行剪枝

参考博文:http://blog.csdn.net/acdreamers/article/details/44664481

以上三种算法共同点:都是贪心算法,自上而下(Top-down approach)
区别:属性选择度量方法不同:
C4.5 (gain ratio), CART(gini index), ID3 (Information Gain)

3.2 如何处理连续性变量的属性?

对于连续性变量的属性,在做决策树算法时,应将其变化为非连续性变量;做法一般是取一个特征值,将其划分为两个或者多个阶段值:eg:年龄–>可以将0-17划分为youth,17-40划分为middle_aged,40-80为senior;这样就可以将连续性的变量划分成非连续性的变量了

4. 树剪枝叶 (避免overfitting):剪枝是决策树停止分支的方法之一

4.1 先剪枝:

在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生“视界局限”,就是一旦停止分支,使得节点N成为叶节点,就断绝了其后继节点进行“好”的分支操作的任何可能性。不严格的说这些已停止的分支会误导学习算法,导致产生的树不纯度降差最大的地方过分靠近根节点

4.2 后剪枝:

树首先要充分生长,直到叶节点都有最小的不纯度值为止,因而可以克服“视界局限”。然后对所有相邻的成对叶节点考虑是否消去它们,如果消去能引起令人满意的不纯度增长,那么执行消去,并令它们的公共父节点成为新的叶节点。这种“合并”叶节点的做法和节点分支的过程恰好相反,经过剪枝后叶节点常常会分布在很宽的层次上,树也变得非平衡。后剪枝技术的优点是克服了“视界局限”效应,而且无需保留部分样本用于交叉验证,所以可以充分利用全部训练集的信息。但后剪枝的计算量代价比预剪枝方法大得多,特别是在大样本集中,不过对于小样本的情况,后剪枝方法还是优于预剪枝方法的。

5. 决策树的优点:

直观,便于理解,小规模数据集有效

6. 决策树的缺点:

处理连续变量不好
类别较多时,错误增加的比较快
可规模性一般

你可能感兴趣的:(Artificial)