在Journal of knowledge and Information Systems, 2007 上出现过一篇文章。 “Top 10 algorithms in Data Mining”。 其中这篇文章列出了数据挖掘中最常用的10大算法, 分别是: C4.5, K-means, SVM, Apriori, Expectation Maximization, PageRank, Adaboost, KNN(K近邻), Naive Bayes, and CART。 值得注意的是, 这十大算法中有两大算法属于决策树算法(Decision Tree), 分别是C4.5和CART。 这也是为啥从决策树算法讲起。
决策树可以用于分类, 预测等任务。 有很多的决策树算法。 不光有适合离散的属性值, 同时也适用于连续的值的分类(例如CART(classification and regression tree)算法)。
例如如下例子, 一个餐馆已经满员了, 这时一个新的客人过来吃饭, 他是否会在餐馆内等待别人吃完空出位置这件事情采集到的样本:
下面是根据上述12个样本而建的一个决策树(注意可能不唯一)如下:
决策树算法的优点: 计算简单, 最终得到分类结果的过程可以被人直观的理解。 即使数据集中有的样本有missing values 也是okay的, 决策树一概可以做。
缺点: 就是容易过拟合。 但是, 我们可以通过修剪(pruning)的办法去避免过拟合(overfitting)。主要有两种办法:
(1) pre-pruning(前期剪枝): 也就是在我们的决策树完美拟合训练样本集之前, 就通过某种度量去阻止进一步的grow我们的tree。 ID3采用的就是这种办法。
(2) post-pruing(后期剪枝): 第一步就是建一个能够完美拟合我们的训练样本集(即允许树过拟合数据)。 然后进行后期剪枝, 得到具有较好的泛化能力的决策树. C4.5和CART采用的是这个办法。
说白了, 剪枝就是regularization(规则化)的一种特殊形式。
一. ID3
ID3和CART大约在同时被独立的发明于20世纪80年代。 ID3算法虽然没有被列入十大数据挖掘的十大算法, 但是其后来的改进版本(或者说是后继)C4.5 却被荣幸的列入数据挖掘十大算法。 ID3和C4.5决策树算法均是Quinlan 发明的。 所以在介绍C4.5之前, 有必要介绍一下C4.5的祖先ID3。
基本的ID3算法是通过自顶向下的, 贪心的搜索出给定的数据集的最佳分裂属性, 来构造决策树进行学习的。 树的每一个节点都是当前看起来是最佳的 分裂到达这个节点的样本集的属性。 那么问题来了, 判断最佳属性的度量标准是什么呢? 下面, 我们定义一个叫做信息增益(information gain)的统计属性, 用来衡量给定的属性去分开训练样本集的能力。 ID3在增长树的每一步都是使用这个信息增益来贪心的从候选属性集中选择当前看来是最佳的分裂属性。 ID3决策树的修剪是易于奥坎姆剃刀原理(Occam's razor), 具体的, ID3算法前期剪枝的策略是是(1)优先选择较短的树而不是较长的树去grow。(2)选择那些信息增益高的属性距离根节点较近的树, 即那些信息增益高的属性更靠近根节点的树优先。奥卡姆剃刀认为优先选择拟合数据的最简单的假设, 因为这个假设具有更高的泛化能力。
(1)信息增益(information)的定义
信息的度量是用entropy(熵)去计算的。
对于一个离散具有J维的概率分布如下:
则这个分布的entropy的计算公式如下:
从公式不难看出, 随着向量P的某一维度概率趋近于1, 或者说某个事件发生的概率趋近为1, 那么对应的这个分布的信息熵也变成了0, 也就是毫无信息了。 这就是我们想要达到的状态。 我们就是要将数据中的信息降下来, 变成看起来确定的结果。 注意, 在数据挖掘中, 我们是讨厌不确定性。 理想的状态是把不确定的变成确定的。
为了进一步的了解信息熵, 下面举一个例子。
ex1: 如果给定的二维分布(对应着分类任务中的类标号C1, C2): P = [1/2, 1/2], 则这个二维分布的信息熵为: H[p, 1-p] = -p log(p) - (1-p) log(1-p):
即信息为1 bit。
ex2: 给定P = [0.99, 0.1], 则这个分布的信息增益为: