深入浅出决策树算法(一)

决策树

树模型是机器学习领域最基础、逻辑最简单的一类机器学习算法,主要有决策树(解决分类问题),回归树(解决回归问题)。这里首先介绍决策树的原理和代表性的算法。

原理

决策树,顾名思义需要构建树的结构来进行决策(分类);其实决策树的工作过程和人的思考过程是比较类似的,如下图所示:

人类在决策过程中,会基于一系列的判别标准,来对某一事务做出最终的决定。决策树正是基于这一思想,在对数据进行分类的时候,判别标准就是数据的特征,最终的决定就是数据的类别。作为程序员,看到决策树很容易会联想到if else的逻辑,事实上也确实是这样的。不过,有一个问题是,数据具有的特征维度可能是很高的,我们应该怎么选择这些特征的使用顺序?决策树正是用来解决这一问题,先选择哪个特征来进行if判断,是比较好的策略。根据特征使用顺序判断方式的不同,决策树主要可以分以下三种算法:ID3,C4.5和CART。接下来我们依次进行介绍。

信息熵

首先介绍信息熵(entropy)的概念,信息熵主要用来衡量样本集合的“混乱程度”,度量事物的不确定性。信息熵越大代表样本集合越混乱,不确定性越高,其计算方式如下:

                                                                    E(D) = -\sum_{i=1}^{k}p_{i}logp_{i}

D代表样本集合;样本集合中数据可以分为k个类别,每个类别的概率为p_{i}

样本集合中,如果所有的样本均属于同一类别,那么此时“混乱程度”最低,信息熵为0,取到最小值。

样本集合中,如果所有类别的样本概率相同,那么此时“混乱程度”最高,信息熵为log k,取到最大值。

所以,我们在使用决策树的时候,我们希望当按照选择到的特征,对原始样本集合进行划分之后,新的样本集合的信息熵(即混乱程度)尽可能小。

ID3算法

ID3算法中,基于信息熵的概念,提出了信息增益(information gain),其定义如下:

扫描二维码关注公众号,回复: 12645876 查看本文章

信息增益的计算方式为,原始样本集合的熵减去按照某一特征属性进行划分之后的样本集合的熵;我们希望每次选取特征的时候,选择信息增益最大的特征。

下面结合周志华老师西瓜书中的例子,进行信息增益的一个计算:

原始的样本集合,其信息熵为0.998,计算过程如上图所示。

接下来,我们需要计算每个特征的信息增益,然后选择信息增益最大的特征作为根节点,进行划分。以色泽这一特征为例,我们展示信息增益的计算过程:

色泽这一属性有三个取值:青绿、乌黑、浅白。

其中,青绿色共6个,好瓜3个,坏瓜3个;乌黑色共6个,好瓜4个,坏瓜2个;浅白色共5个,好瓜1个,坏瓜4个。

所以色泽这一特征的信息增益计算如下:

Gain(D,Color) = E(D) - \sum_{i=1}^{3}\frac{D^{v}}{D}E(D^{v}) = 0.998 - [-\frac{6}{17}(\frac{3}{6}log\frac{3}{6} + \frac{3}{6}log\frac{3}{6}) -\frac{6}{17}(\frac{4}{6}log\frac{4}{6} + \frac{2}{6}log\frac{2}{6}) - \frac{5}{17}(\frac{1}{5}log\frac{1}{5} + \frac{4}{5}log\frac{4}{5})] = 0.109

C4.5算法

ID3算法,基于特征的信息增益,选择具有最大信息增益的特征作为划分依据。但是,这样的特征选取方式,存在一定的问题,即ID3算法对取值数目较多的特征有偏好。仍然以上例进行说明,假设我们把编号也作为特征进行考虑。计算得到编号的信息增益为:

                                                        G(D,id) = 0.998 - \sum_{i=1}^{17}\frac{1}{17} * 0 = 0.998

而实质上,编号这一特征,对于分类问题是没有任何意义的。

并且,ID3适合于处理离散(category)的特征,对于连续特征无能为力,因为连续特征的话,每个样本的取值可能均不相同,就会出现类似于“编号”这一特征的情况。

为了克服ID3算法的弊端,C4.5进行了改进,使用信息增益率(gain rate)作为特征选择的依据,其定义如下:

可以看到,信息增益率是在信息增益的基础上,相当于增加了一项对于属性取值数目过多的惩罚项IV(a)。

其中,属性的取值数目越多,IV(a)的值越大:比如:样本数据D的数量为4,其中样本数据中A属性的可取值数目为4,B属性的可取值数目为2,且每个取值下有两个样本.

则:                    IV(A) = - 4 * \frac{1}{4} * log \frac{1}{4} = 2

                           IV(B) = - 2 * \frac{2}{4} * log \frac{2}{4} = 1

所以考虑IV(a)之后,可以在一定程度上缓解ID3算法过于关注属性取值数目多的特征。上例中,编号的信息增益率为:

                                                  Gain\_rate(D,id) = \frac{Gain(D,id)}{IV(id)} = \frac{0.998}{log17} = 0.244

另外,C4.5算法对ID3算法的改进在于,C4.5算法显式地提出了如何对连续特征(如长度)进行处理 --- 连续特征离散化

比如:样本数据中,属性A是连续特征,其中m个样本,每个样本有一个在特征A上具有一个不同的取值\left \{ a_{1},a_{2} ... a_{m} \right \},将特征取值由小到大进行排序,然后取相邻两样本的平均值作为一个划分点,一共可以得到 m-1 个划分点,然后针对每一个划分点,使用其作为二元分类特征,分别计算信息增益,取信息增益最大的点作为该连续特征的二元离散分类点(即小于该划分点的属于类别1,大于该划分点的属于类别2)。

CART算法

CART算法既可以做回归(回归树),也可以做分类(决策树),这里我们首先介绍CART算法在分类上的应用。

基尼系数(Gini index)

基尼系数刻画的是样本数据集的“不纯度”,由上面的定义可以看出,基尼系数计算的是:从样本数据集中,随机抽取两个样例,这两个样例属于不同类别的概率。基尼系数越小,数据集的纯度越高。我们基于基尼系数选择进行划分的特征时,选择基尼系数小的特征。

仍然以上面的“色泽”属性为例,进行基尼系数的计算:

色泽这一属性有三个取值:青绿、乌黑、浅白。

其中,青绿色共6个,好瓜3个,坏瓜3个;乌黑色共6个,好瓜4个,坏瓜2个;浅白色共5个,好瓜1个,坏瓜4个。

Gini(D, color) = \frac{6}{17}(1 - (\frac{3}{6})^{2} - (\frac{3}{6})^{2}) + \frac{6}{17}(1 - (\frac{4}{6})^{2} - (\frac{2}{6})^{2}) + \frac{5}{17}(1 - (\frac{1}{5})^{2} - (\frac{4}{5})^{2}) = 0.4463

CART算法基于基尼系数进行划分特征的选择,优点在于:信息增益和信息增益率的计算都涉及到熵,计算熵的过程中需要进行复杂的对数运算,所以使用基尼系数的方式,可以简化计算量。

除此之外,CART算法的改进还在于树的构建和离散-连续特征的处理。

  • CART算法构建的决策树是二叉树,而ID3和C4.5构建的决策树是多叉树。也就是说,CART算法每次基于特征的值进行二分,而不是多分。比如,上面的“色泽”特征为例,ID3或者C4.5,会在“色泽”这一节点下,构建三个分支,分别是:青绿,乌黑,浅白。而CART算法,则是根据“色泽”这一特征的值进行二分,可能会划分为:{青绿},{乌黑,浅白}两组。具体如何划分为两组,参见接下来CART算法对于离散特征的处理方式。
  • CART算法对于离散特征的处理方式:因为CART算法构建的决策树是二叉树,因此如果一个离散特征具有大于两个的取值,CART算法会对其进行不停的二分。比如上面的“色泽”属性,有三个可能的取值,进行二分的话,有三种可能的结果:(1){青绿}和{乌黑,浅白}   (2){乌黑}和{青绿,浅白}   (3){浅白}和{乌黑,青绿}。分别针对这三种可能的二分结果计算基尼系数,选择基尼系数最小的划分,假设我们选择的是{青绿}和{乌黑,浅白}的划分方式。同时,由于这次没有把特征完全划分开,因此在后面我们还有机会在子节点继续选择“色泽”这一特征进行划分,从而把{乌黑}和{浅白}划分开。这样的处理方式和ID3,C4.5中的处理方式不同,在ID3和C4.5中,离散特征只参与一次划分。
  • CART算法对于连续特征的处理方式:CART算法在处理连续特征的时候,使用和C4.5中一样的方式,进行连续特征的离散化,只不过在选择离散化的点时,C4.5使用的是信息增益率,CART算法使用的是基尼系数。选定二分离散的点,小于这一点的归为类别一,大于这一点的归为类别二。和ID3,C4.5不同,这一连续属性,在后面还可以参与子节点的产生选择过程。

小结

在普通的决策树算法里,CART算法算是比较优化的算法。Scikit-learn的决策树使用的也是CART算法。这篇博客简单介绍了,三种决策树算法的原理,以及选择特征的依据。接下来的两篇博客,介绍决策树的构建过程,以及实际案例展示代码。

参考资料

1、https://www.cnblogs.com/pinard/p/6050306.html

猜你喜欢

转载自blog.csdn.net/ProQianXiao/article/details/105494281