机器学习算法2——决策树

时间:2022-12-20 11:42:49

本文总结于《machine learning in action》一书


一. 决策树的一般流程

    1. 收集数据:可以使用任何方法

    2. 准备数据:数构造算法只适应于标称型数据,因此数值型数据必须离散。

    3. 分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期。

    4. 训练数据:构造树的数据结构

    5. 测试数据:使用经验树计算错误率

    6. 使用算法:此步骤可以适应于任何监督学习算法,而使用决策树可以更好地理解数据的内在含义。


二. 决策树的优缺点

    优点:计算复杂度不高,输出结果易于理解,对中间值的却是不敏感,可以处理不相关特征数据。

    缺点:可能会产生过渡匹配问题

    适应数据类型:数值型和标称型


三. 决策树相关说明

    (1)K近邻与决策树的对比:

             K近邻最大的缺点是无法给出数据的内在含义,决策树的主要优势在于数据形式非常容易理解。

    (2)决策树的目的:

             决策树的一个重要任务是为了数据中蕴含的知识信息,因此决策树可以使用不熟悉的数据集合,并从中提取

一系列规则,在这些机器根据数据集创建规则时,就是机器学习的过程。

    (3)应用领域

             专家系统经常使用决策树


四. 信息理论

    在决策树中,划分数据集的大原则为:将无序的数据变得更加有序。因此,这里,信息论就变得尤为重要,信息论

是量化处理信息的分支科学。

    (1)信息增益(Information gain):

            在划分数据集之前之后信息发生的变化成为信息增益。知道如何计算信息增益,我们就可以计算每个特性值

划分数据集获得的信息增益,获得信息增益最高的特征就是最好的选择。

    (2)香农熵(Shannon entropy)简称熵

            集合信息的度量方式成为香农熵或简称熵,即信息的期望值。

            信息的定义——符号Xi的信息定义

                          l(Xi) = -log2p(Xi)

           p(Xi)表示选择该分类的概率

           因此,熵的定义为:

                          H =  -sum(p(Xi) * log2(p(Xi)))      i = 1,2,...,n

           熵计算将会告诉我们如何划分数据集是最好的数据组织方式。

      另外,度量集合无序程度的方法还有一个,称为基尼不纯度(Gini impurity),简单的说就是一个从一个数据集中随

机选取子项,度量其被错误分类到其他组里的概率。


五. 额外补充关于Python的知识点

    1. 列表推导(List Comprehension)

         列表推导可以大量简化代码,使用很方便。可以通过一个示例来介绍

         示例:

                featList = [example[i] for example in dataSet]

         等价于:

                featList=[ ]

                for example in dataSet:

                      featList.append(example[i])

         更详细的资料可以参考:http://www.jb51.net/article/67157.htm

    2. 集合的一种使用用途:

         从列表中创建集合是Python语言中得到列表中唯一元素值的最快方法。

    3. Python中关于列表作为函数的参数:

         Python语言在函数中传递的是列表的引用,在函数内部对列表对象的修改,将会影响该列表对象的整个生命

周期。

    4. Python中函数的一种使用方法:

         Python中的函数可以像类(class)一样使用添加属性值。同样地,可以使用内置函数hasattr()或者__dict__方法

来检查函数或类的属性值。


六. 递归创建决策树

     1. 决策树的工作原理:

          得到原始数据集,然后基于最好的属性值划分数据集(依据香农熵),由于特征值可能多于两个,因此可能存在

大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以

再次划分数据。因此,我们可以采用递归的原则处理数据集。

     2. 递归的终止条件1:

          程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的

分类,则得到一个叶子节点或者终止块。任何到达叶子节点的数据必然属于叶子节点的分类。

     3. 递归的终止条件2:

          这里,需要强调的是,除上述每个叶子节点的标签完全相同,还存在另外一种情况,即使用完了所有特征,仍

然不能将数据集划分成仅包含唯一类别的分组。此时应该挑选出现次数最多的类别作为返回值。


七. 使用Matplotlib绘制决策树图:需仔细研究


八. 小结

    上述构造决策树的方法称之为ID3。ID3算法可以用于划分标称型数据集。构建决策树时,我们通常采用递归的方法

将数据集转化为决策树。且不需要构造新的数据结构,直接使用Python中的字典存储树节点信息即可。缺点在于,ID3

算法无法直接处理数值型数据,尽管我们可以通过量化的方法将数值型数据转化为标称型数据,但是如果存在太多的

特征划分,ID3算法仍会面临其他问题。

    后续将介绍其它的决策树构造算法,最为出名的是C4.5和CART

    注意事项:决策树构造存在过度匹配(overfitting)问题。为了减少过度匹配问题,可以裁剪决策树,去掉一些不必要

的叶子节点,或者合并相邻的无法产生大量信息增益的叶节点,以此来消除过度匹配问题。