目录
1. 决策树的概念
2. 决策树的基本思想
3. 决策树的构造
4. 决策树的算法框架
5. ID3算法
6. C4.5算法
决策树(Decision Tree)是一种用于监督学习的层次模型,是最早的机器学习算法之一。
决策树主要由两类结点组成:
(最早的决策树就是利用条件分式结构if-then分割数据的分类学习方法)
决策树的构造过程不依赖于领域知识 ,它通过属性选择度量来将元组“最好地”划分为不同的类的属性。
决策树的构造,就是进行决策选择度量,确定各个特征属性之间的拓扑结构。
构造决策树的关键步骤是分裂属性。所谓分裂属性,就是在某个结点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂属性尽可能地“纯” 。 所谓尽可能地“纯”,就是尽量让一个分裂子集中的待分类项属于同一类别。
分裂属性分为3种不同的情况:
(1)属性是离散值,且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
(2)属性是离散值,且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”将属性的支持集分成两个分支。
(3)属性是连续值。此时确定一个值作为分裂点(split_point),按照大于split_point和小于split_point生成两个分支。
(1)决策主函数
决策树的主函数是一个递归函数,其主要功能是按照某种规则生长出决策树的各个分支节点,并根据种植条件结束算法,。主要包括以下内容:
(2) 计算最优特征子函数
在计算最优特征子函数时,3种典型的决策树采用了3种不同的策略:
(3)划分数据集函数
要分割数据,有时需要删除某个特征轴所在的数据类,返回剩余的数据集;有时则直接将数据集一分为二。
(4)分类器
通过遍历整棵决策树,使测试集数据找到决策树中叶子结点对应的类别标签。
(1)信息增益
(2)ID3算法实现步骤:
① 首先,用信息熵度量类别标签对样本整体的不确定性。
设 是数据样本集合,其类别标签 。类别标签 对数据样本 的划分为,
其中且,此处的表示样本 的标签。
根据式(5.1),样本分类的信息熵公式如式(5.2)所示:
其中,,是样本属于类别 的概率。表示样本 中类别 的元素个数;表示样本集 的元素个数,即样 本总数。
② 然后,使用信息熵度量每个特征不同取值的不确定性。
、 假设属性 有 个不同的取值,那么使用属性 就可以将样本集 划分为 个互不相交的子集 ,
其中,。如果选择属性A做最优划分特征,那么划分的子集就是样本集 节点中生长出来的决策树分支。
由属性 划分的子集的信息熵如式(5.3)和(5.4)所示:
其中, 表示子集 中的元素个数; 是 中样本属于类别 的概率,其值等于 中类别 的样本个数与 个数的比值。
③ 最后,使用信息增益决定决策树分支的划分依据。
决策树上某个分支上的整个数据集信息熵与当前结点信息熵的差值如式(5.5)所示:
(5.5)
对样本集 中的每个属性(未选取的属性)进行上述计算,具有最高信息增益的特征就可选为给定样本集 的测试属性。为选取的样本属性创建一个结点,并以该 特征标记,对特征的每个值创建分支,并据此划分样本。
from numpy import *
def calcShannonEnt(dataSet):
"""
输入:数据集
输出:数据集的香农熵
描述:计算给定数据集的香农熵
"""
num = len( dataSet ) # 样本集总数
classList = [c[-1] for c in dataSet] # 抽取分类信息
labelCounts = {} # 词典形式存储类别计数
for cs in set(classList): # 对每个类别计数
labelCounts[cs] = classList.count( cs )
shannonEnt = 0.0 # 信息熵
for key in labelCounts:
prob = labelCounts[key] / float(num)
shannonEnt -= prob * math.log2(prob)
return shannonEnt
# 给定数据集
def CreateDataSet():
dataSet = [[1, 1, ' Yes'],
[1, 1, ' Yes'],
[1, 0, 'No'],
[0, 1, 'No'],
[0, 1, 'No']]
labels = ['no surfacing', 'flippers']
return dataSet, labels
myDat, labels = CreateDataSet()
print(calcShannonEnt(myDat))
(3)ID3算法
(1)信息增益率
其中, 是样本集 在特征 上的划分,此处假定 有 个不同的取值。
(2)C4.5算法
本文学习总结自李克清、时允田主编的《机器学习及应用》