决策树之ID3、C4.5

  决策树是一种类似于流程图的树结构,其中,每个内部节点(非树叶节点)表示一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶节点(或终端节点存放一个类标号)。树的最顶层节点是根节点。下图是一个典型的决策树(来自《数据挖掘:概念与技术》[韩家炜](中文第三版)第八章):

决策树之ID3、C4.5

  在构造决策树时,使用属性选择度量来选择将元祖划分成不同类的属性。这里我们介绍三种常用的属性选择度量-----信息增益、信息增益率和基尼指数。这里使用的符号如下。设数据分区\(S\)为标记类元组的训练集。假设类标号属性具有\(m\)个不同的值,定义了\(m\)个不同的类\(C_i (i=1,2,...,m)\)。设\(C_{i,S}\)是\(S\)中\(C_i\)类元祖的集合,\(|S|\)和\(|C_{i,S}|\)分别是\(S\)和\(C_{i,S}\)中元祖的个数。

  上面决策树的源数据如下表,我们将以此数据说明ID3、C4.5、C5.0、CART这几种算法。

决策树之ID3、C4.5

  我们先解释一下这张表,表中有14条实例数据,就是我们的训练数据,其中 age,income,student,credit_rating称作条件属性,Class:buys_computer 称作是决策属性(标签)。每一个属性都有各自的值记做:Value(age)={youth,middle,senior},Value(income)={high,medium,low},Value(student)={no,yes},Value(credit_rating)={excellent,fair},Value(Class:buys_computer)={no,yes}。

1.熵(entropy)

  在说明决策树算法之前,先提出一个重要的概念:熵(entropy)。

决策树之ID3、C4.5

  有时\(Info(S)\)也直接写作\(Entropy(S)\)。以上表中数据说明此概念:我们数一下决策属性Class:buys_computer,一共有两个类别:Yes,No。Yes的实例数是 9,No的实例数是 5。计算决策属性的熵(Entropy):

决策树之ID3、C4.5

这里的决策属性S的值只有两个值(Yes,No),当然可以有多个值(s1,s2,s3,...,sk),这些决策属性的值的概率分别为:p1,p2,p3,...,pk。

2.信息增益

  ID3使用信息增益作为属性选择度量。设节点\(N\)代表或存放分区\(S\)的元祖。选择具有最高信息增益的属性作为结点\(N\)的分裂属性。

  我们只age条件属性举例,其他的属性一样:

Value(age)={youth,middle,senior}

age是youth的实例数为5(其中Yes的个数为2,No的个数为3),占总的实例数为5/14,那么针对youth的Entropy,

决策树之ID3、C4.5

age是middle的实例数为4(其中Yes的个数为4,No的个数为0),占总的实例数为4/14,那么针对middle的Entropy,

决策树之ID3、C4.5

age是senior的实例数为5(其中Yes的个数为3,No的个数为2),占总的实例数为5/14,那么针对senior的Entropy,

决策树之ID3、C4.5

那么最后针对age条件属性的信息增益(information gain)为:

决策树之ID3、C4.5

所以针对某一条件属性的信息增益(information gain)为:       决策树之ID3、C4.5

那么其他三个条件属性income,student,credit_rating的信息增益为:

决策树之ID3、C4.5

我们看到age的信息增益是最大的,所以作为决策树的一个根节点。我们不断地重复上面的步骤,会得到一个决策树。至此,我们完成了对ID3算法思想的描述。

  ID3算法有几个缺点:

  • 对于具有很多值的属性它是非常敏感的,例如,如果我们数据集中的某个属性值对不同的样本基本上是不相同的,甚至更极端点,对于每个样本都是唯一的,如果我们用这个属性来划分数据集,它会得到很大的信息增益,但是,这样的结果并不是我们想要的。
  • ID3算法不能处理具有连续值的属性。
  • ID3算法不能处理属性具有缺失值的样本。
  • 由于按照上面的算法会生成很深的树,所有容易产生过拟合现象。

  下面,引入更加强大的C4.5算法,它可以解决上面的问题。

3.C4.5算法

C4.5算法,能够处理属性是连续型的。而且,在C4.5算法中,又提出了两个新的概念:

分离信息(Split Information)和信息增益率(Information gain ratio)

首先,给出分离信息的计算方法,数学符号表达式为:

决策树之ID3、C4.5

解释为:数据集通过条件属性A的分离信息。上面一个例子,数据集通过age这个条件属性的分离信息,age有三个属性值分别为:youth,middle,senior,它们各占5,4,5,所以:

决策树之ID3、C4.5

再次,给出信息增益率的公式:

决策树之ID3、C4.5

上面这个例子如:数据集S针对age的信息增益率,

决策树之ID3、C4.5

分子和分母这两个值都已经求出来,选择信息增益率最大的那个属性,作为节点。

4.C5.0和CART算法

C5.0是一个商业软件,对于公众是不可得到的。它是在C4.5算法做了一些改进,具体请参考:C5.0算法改进

C5.0主要增加了对Boosting的支持,它同时也用更少地内存。它与C4.5算法相比,它构建了更小地规则集,因此它更加准确。

CART (Classification and Regression Trees)与C4.5算法是非常相似的,但是CART支持预测连续的值(回归)。CART构建二叉树,而C4.5则不一定。

CART用训练集和交叉验证集不断地评估决策树的性能来修剪决策树,从而使训练误差和测试误差达到一个很好地平衡点。

scikit-learn的实现为CART算法的最优版本,详细文档请参考:scikit-learn实现CART

待续~

上一篇:谈谈springMVC和Strut2的理解


下一篇:SQL SERVER 中的行列转换小结