欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 21:00:17
...

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

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

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

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

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

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

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来作为节点分类获取了多少信息

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

计算过程:先单独计算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),再通过信息获得量公式计算出最后的结果。
初识人工智能--决策树算法
初识人工智能--决策树算法

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

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

初识人工智能--决策树算法
划分好跟节点后,排除已经称为节点的属性,继续通过该方法,可以继续划分结点。若出现划分好的表格中的目标函数为同一类时(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<span style="white-space:pre">                   
      root = createNode()<span style="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. 决策树的缺点:

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