决策树算法(ID3算法)

1.决策树算法算法

决策树(decision tree):app

决策树相似于流程图的一个树形结构,如图1。其中每一个内部结点表示在一个属性上的测试,每一个分支表明一个属性的输出,每一个叶子结点表明类或者类的分布。树的最顶层是根结点。一个决策树如图1所示机器学习

图1 决策树示例学习

该示例是一个经过室外的天气状况决定是否进行室外运动的决策树,方框内表明有多少个实例属于对应的分类,这里有9个属于play,有5个属于don't play,一共有14个实例。图中的outlook表示预测的天气,做为该决策树的根结点,根结点下面有三个分支,分别是sunny(晴天)、overcast(多云)、rain(雨天)三种天气状况。若是是sunny(晴天),属于play的个数是2,属于don't play的个数是3;(overcast)多云的话,属于paly的个数是4,属于don't play的个数是0,一样若是是rain(雨天)的话,属于play的个数是3,属于don't play的个数是2。在sunny(晴天)结点下还分出了一个分支humidity(湿度),这里将湿度这个连续值做了一个离散处理,取一个阈值(这里取70),将这个连续值分为两个部分;一样在rain下有一个分支windy(是否有风),用true和false来做为分支的条件。测试

1.1 构造决策树的基本算法ui

下面用一个数据集来简单说明构造决策树的基本算法过程。如图23d

图2 是否购买电脑的数据集excel

这个数据集是关于顾客在电脑城里面是否购买电脑的信息,有age(年龄)、income(收入状况)、student(是不是学生)、credit_rating(信用等级)和分类:buys_computer(是否买电脑)。首先咱们先给出对应的决策树,如图3。orm

图3 构建的决策树blog

从这个决策树能够看出,首先将年龄进行分类,分为youth、middle_aged、senior三种,若是是middle_aged,那么是yes,表明会购买电脑,返回数据集中能够验证。在youth中又出现一个分支student,student为yes的时候,结果是yes,表明会购买电脑;student为no的时候,结果是no,表明不会购买电脑。一样的,在senior中有一个分支credit_rating,有两种状况,fair和excellent,若是credit_rating是fair,结果是no,表明不会购买电脑;若是credit_rating是excellent,结果是yes,表明会购买电脑。这个决策树为何是这样构造的呢?下面咱们先来讲几个概念。

熵(entropy):

信息是一个抽象的概念,如何度量信息呢?1948年,香农提出了“信息熵”的概念,描述了信源的不肯定度,解决了对信息的量化度量的问题。香农指出,任何信息都存在冗余,冗余大小与信息中每一个符号(数字、字母或单词)的出现几率或者说不肯定性有关。即信息的度量就等于不肯定性的大小。一般,一个信源发送出什么符号是不肯定的,衡量它能够根据其出现的几率来度量。几率大,出现机会多,不肯定性小;反之不肯定性就大。比特(bit)来衡量信息的多少,用P(Xi)表示一个某个符号出现的几率,那么信息熵H(X)的值就是

变量的不肯定性越大,熵也就越大,信息熵的取值范围是0到1之间。

ID3算法

1.选择结点

信息获取量(Information Gain):Gain(A)=info(D)- info_A(D),经过A来做为结点分类获取了多少信息。下面来用这个公式来计算,加深理解

这个式子表示的是只用Class:buys_computer来计算信息熵的值,不涉及其余分类。

下面用年龄(age)来对这个Class:buys_computer进行分类,计算对应的信息熵:

在age分类中youth有5个,middle_aged有4个,senior有5个。在youth中的5我的里面有2我的买电脑是yes,3我的是no,因此对应的信息熵是

一样的,在middle_aged中的4我的里面4我的买电脑都是yes,那么0我的买电脑是no,因此对应的信息熵是

在senior中的5我的里面有3我的买电脑是yes,2我的买电脑是no,因此对应的信息熵是

注意信息熵的公式是

将上式相加以后就获得结果了。因此计算出age的信息获取量以下:

相似能够计算出Gain(income)=0.029,Gain(student)=0.151,Gain(credit_rating)=0.048

因此选取age做为第一个结点,即根结点。根结点分出来以后,以下图

而后继续以上的步骤,计算出各个属性的信息获取量,选择最大的一个做为下一个结点,直到出现目标结果(这里是买电脑为yes或者no)全是一种状况为止。注意到年龄为middle_aged的人买电脑都是yes,此时不须要再分结点。年龄为youth中分别有yes和no,年龄为senior中也是有yes和no,这两种状况就须要构建新的结点。在income、student、credit_rating中分别计算各自的信息获取量,选择最大的做为下一个结点。计算方法和上面的同样。

下面总结一下ID3算法:

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

其余算法:

C4.5:  Quinlan

Classification and Regression Trees (CART): (L. Breiman, J. Friedman, R. Olshen, C. Stone)

共同点:都是贪心算法,自上而下(Top-down approach)

区别:属性选择度量方法不一样: C4.5 (gain ratio), CART(gini index), ID3 (Information Gain)

在机器学习中,若是树的深度太大,会表现为在训练集上表现很是好,在测试集上的表现很差,这是由于树的叶子分得太多,太细化,致使该状况的出现,这被称为overfitting(过拟合)。为了不overfitting,有两种方法:

1.先剪枝。分到必定状况下,就再也不分下去,好比设定一个阈值,在类的纯度达到该阈值以后就再也不分下去。

2.后剪枝。将树彻底建好,再根据某些条件去将多余的树叶剪去。

决策树的优缺点:

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

缺点:处理连续变量很差;类别较多时,错误增长的比较快(算法复杂度大);可规模性通常

相关文章
相关标签/搜索