决策树算法通俗讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012494321/article/details/83750221

        决策树就是先把一堆数据依次按照某一个条件(特征)划分子集,构建成树,然后来一条新的数据,让新数据按照构造树时的条件一一比较,知道找到叶子节点确定类别。

(一)构造决策树

        我们知道每一条数据中都包含几个特征(值),决策树需要根据某一条件来判断划分子集。那么好几个特征中我们选择哪个特征作为决策对象才会有好的划分效果呢?首先我们要找到决定性的特征。还有一个问题,怎么样就算好的划分效果呢?

        这里我们用到了一个理论概念“信息增益”。构造决策树的目的是:将同一类别数据放到一个子集中,将无序的数据变得更加有序。信息增益就是:在划分数据集之前之后信息发生的变化。获得信息增益最高的特征就是最好的特征。

        下一个问题:怎么度量信息增益值,另一个概念出来了:香农熵。我们要计算所有类别所有可能包含的信息期望值,通过下面的香农熵公式:

         

好了,举个例子,有数据集

dataset = [[1, 1, ‘yes’],

                  [1, 1, ‘yes’],

                  [1, 0, ‘no’],

                  [0, 1, ‘no’]

                  [0, 1, ‘no’]]

         最后一列yes or no就是类别标签,dataSet有两类,p(yes)=2/5,p(no)=3/5,带入公式求得香农熵H=0.97095。熵越高,则混合的数据越多,所以对于决策树来说,熵越小,从无序变到有序度越大,信息增益越大。如果将dateSet的第一行类别变成[1, 1, ‘other’],则计算的熵H=1.37095,混合度增加。

         知道怎么选特征值了,接下来的具体做法是:对每个特征划分数据集的结果计算一次信息熵,选择信息增益最大的特征。

         选好最佳特征后就分类,该特征有几种值就分几个子集(树枝),分完之后呢?如果子集的数据都是同一种类别就到此为止,如果不是同一种类别就接着划分子集,利用同样的方法:计算熵,选最好的特征,划分,直到每个子集都是同一类为止。用递归方法。还有一个递归结束条件:所有特征都用完了,还没有到子集类别相同的情况(选数目多的类别标签作为该子集的类别标签)。所以用递归放个构造决策树两个停止条件:左右子集都是相同类别标签,所有特征都用完了。这也是决策树算法的一种——ID3(每划分一次得到的两个子集都除去了划分时用到的特征,特征数目逐渐减少)。另外还有其他构造决策树算法(如C4.5和CART),这两种并不是在每次划分数据分组时特征数目都减少。

         以上是思路,那通过python函数代码构造出来的决策树是什么形式呢?是一个字典形式,如:{'no surfacing': {0: 'no', 1: {'flippers': {0: 'no', 1: 'yes'}}}}。'no surfacing'、'flippers'对应dataSet的特征属性名,每个键的值(字典)都是根据键(特征)划分的子集。这种形式看起来不明显,但是可以用这种形式通过Matplotlib绘制成图形树看起来就明了了。代码资源里都有体现。

        至此一堆数据(数据集)我们就构造了决策树。

(二)使用决策树执行分类

        拿到一个新的数据,找到第一个匹配的特征(就是决策树的第一个键名'no surfacing'),比较该特征的值,如果是0(后面直接是‘no’),那么直接就到了叶子节点,叶子节点的类别就是该数据的类别;如果是1(后面又是一个字典型,说明又进入一个子集),需要继续比较下一个特征(下一个子集的关键字:‘flippers’),方法一样,递归,直到找到叶子节点。

(三)决策树的存储

         为了节省构造决策树的时间,最好是在每次执行分类时调用已经构造好的决策树。方法是使用Python模块的pickle序列化对象,序列化对象可以在磁盘上保存对象,并在需要时读取出来。任何对象都可以执行序列化操作,决策树的字典对象也不例

(四)评估算法。至于决策树怎么评估其算法的效率,目前我学到的还是利用数据集中90%数据构造决策树,用10%数据测试分类的正确率。得到正确率如何调整算法改进算法?如果觉得正确率不高那就增加数据集数量吧。

代码链接:https://download.csdn.net/download/u012494321/10765834

猜你喜欢

转载自blog.csdn.net/u012494321/article/details/83750221