如同上几篇我们探讨的SVM一样,决策树算法既可以处理分类问题(二分类和多分类),又可以处理回归问题。同时,决策树也广泛的运用在集成算法中,比如随机森林算法。本篇我们沿着决策树算法的发展,来探讨下决策树ID3算法和C4.5算法。CART算法决策树我们下篇单独再探讨。
1)来自借钱的思考
决策树的原理其实很简单,我们生活中已经在运用这些原理。比如,某一个朋友向你借钱,在你心里一定会有一系列的决策,最后决定是否借钱给他,把你的决策画成一颗树状结构就是决策树了。比如我的借钱决策:
从上图我们先来认识下决策树的基本结构,决策树由节点(矩形和椭圆)和有向的边(箭头)组成,节点按所处在决策树的位置可以分为根节点,中间节点和叶子节点。其中每个节点代表一个属性,每个分支代表一个决策(规则),每个叶子代表一个结果(分类值或连续值)。
再回到借钱的栗子上来。假如按照上面的决策树进行借钱决策,一共外借了4次钱,结果有2次按时还了钱,另外2次借的钱打水漂了,损失有点大。于是我调整了下策略,把是否有工作放在首要位置(跟节点)。决策树的结构如下:
于是我又外借了4次钱,结果有3次按时还了钱,只有1次外借的钱打了水漂。对比第一种策略,不还钱的次数减少了,也可以说打水漂的不确定性减少了。所以,只要不确定性有所降低,我们的决策树就有所优化。那么,不确定性又该怎么去度量呢?幸运的是,早在1948年克劳德·爱尔伍德·香农提出了信息熵的概念,专门用来描述事物的不确定性。
2)信息熵(Information Entropy)
信息熵,它是表示对随机变量不确定的度量,不确定性越大,信息熵越大。随机变量 x x x的信息熵的表达式如下(信息熵表达式的由来可参考本篇博客信息熵部分):
H ( x ) = − ∑ x p ( x ) l o g ( p ( x ) ) = − ∑ i = 1 n p ( x i ) l o g p ( x i ) H(x) = -\sum_{x}p(x)log(p(x))=-\sum_{i=1}^{n}p(x_i)logp(x_i) H(x)=−∑xp(x)log(p(x))=−∑i=1np(xi)logp(xi)
从表达式中可以看出,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,信息熵最大。
再让我们回到栗子中来。只要不确定性减少,决策策略就得到了优化。因此我们在进行特征选择时,可以选择当前不确定性减少最多的特征(贪心法)。那么该怎么去定义不确定性的减少呢?ID3算法使用信息增益,C4.5使用信息增益率,CART树使用Gini系数。
3)ID3算法
ID3算法是用信息增益来定义不确定性的减少程度,选择信息增益最大的特征来建立决策树的当前节点。特征A对训练集D的信息增益 g ( D , A ) g(D,A) g(D,A)表达式如下:
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
信息增益具体的算法过程:
输入:训练数据集D合特征A;
输出:特征A对训练数据集D的信息增益 g ( D , A ) g(D,A) g(D,A)
a)计算数据D的信息熵 H ( D ) H(D) H(D)
H ( D ) = − ∑ k = 1 K C k D l o g 2 C k D H(D)=-\sum _{k=1}^K\frac{C_k}{D}log_2\frac{C_k}{D} H(D)=−∑k=1KD