本文总结于《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)问题。为了减少过度匹配问题,可以裁剪决策树,去掉一些不必要
的叶子节点,或者合并相邻的无法产生大量信息增益的叶节点,以此来消除过度匹配问题。