概述
目录
1. 决策树的概念
2. 决策树的基本思想
3. 决策树的构造
4. 决策树的算法框架
5. ID3算法
6. C4.5算法
1. 决策树的概念
决策树(Decision Tree)是一种用于监督学习的层次模型,是最早的机器学习算法之一。
- 决策树可以是二叉树,也可以是多叉树,每个非叶结点表示一个特征属性上的测试,每个分支代表该特征属性在某个值域上的输出,而每个叶结点存放一个(分类)类别。
- 使用决策树决策时,从根节点开式测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子结点,将叶子结点存放的类型作为决策结果。
2. 决策树的基本思想
决策树主要由两类结点组成:
- 长方形结点代表判断模块(Decision Block),椭圆形结点代表终止模块(Terminating Block)。
- 判断模块是中间结点,引出的箭头可以到达另一个判断模块或终止模块,也可称其为分支(Branch)。
- 终止模块是叶结点,表示已经得出结论,可以终止运行。
(最早的决策树就是利用条件分式结构if-then分割数据的分类学习方法)
3. 决策树的构造
-
决策树的构造过程不依赖于领域知识 ,它通过属性选择度量来将元组“最好地”划分为不同的类的属性。
-
决策树的构造,就是进行决策选择度量,确定各个特征属性之间的拓扑结构。
-
构造决策树的关键步骤是分裂属性。所谓分裂属性,就是在某个结点处按照某一特征属性的不同划分构造不同的分支,其目标是让各个分裂属性尽可能地“纯” 。 所谓尽可能地“纯”,就是尽量让一个分裂子集中的待分类项属于同一类别。
分裂属性分为3种不同的情况:
(1)属性是离散值,且不要求生成二叉决策树。此时用属性的每一个划分作为一个分支。
(2)属性是离散值,且要求生成二叉决策树。此时使用属性划分的一个子集进行测试,按照“属于此子集”和“不属于此子集”将属性的支持集分成两个分支。
(3)属性是连续值。此时确定一个值作为分裂点(split_point),按照大于split_point和小于split_point生成两个分支。
- 构造决策树的关键是进行属性选择度量。属性选择度量是一种选择分裂准则,将给定的类标记的训练集合的数据划分成“最好的”个体类,它决定了拓扑结构及分裂点的选择。(属性选择度量算法有很多,一般使用自顶向下的递归分治法,并采用不回溯的贪心策略)
4. 决策树的算法框架
(1)决策主函数
决策树的主函数是一个递归函数,其主要功能是按照某种规则生长出决策树的各个分支节点,并根据种植条件结束算法,。主要包括以下内容:
- 输入需要分类的数据集和类别标签。
- 计算最优特征子函数。根据某种分类规则得到最优划分特征,并创建特征的划分结点。
- 划分数据集子函数。按照该特征的每个取值划分数据集为若干部分。
- 根据划分子函数的计算结果构建出新的结点,作为决策树生长出新分支。
- 检验是否终止
- 将划分的新节点包含的数据及和类别标签作为输入,递归执行上述个步骤。
(2) 计算最优特征子函数
在计算最优特征子函数时,3种典型的决策树采用了3种不同的策略:
- ID3算法——信息增益
- C4.5算法——信息增益率
- CART算法——最小剩余方差
(3)划分数据集函数
要分割数据,有时需要删除某个特征轴所在的数据类,返回剩余的数据集;有时则直接将数据集一分为二。
(4)分类器
通过遍历整棵决策树,使测试集数据找到决策树中叶子结点对应的类别标签。
5. ID3算法
(1)信息增益
- 用来衡量一个随机变量出现的期望值。
- 一个变量的信息熵越大,那么它蕴含的情况就越多,也就是说需要更多的信息才能完全确定它。
- 1948年,香农(C.E. Shannon)在A Mathematical Theory of Communication(《通信的数学理论》)一书中第一次提出了信息熵。香农认为,信息就是对不确定性的消除。一般而言,当某种信息出现更高概率的时候,表明它被传播得更广泛,或者说被引用的程度更高。
- 对于随机变量集 ,若任意的一个随机变量 , ,其发生概率为 ,那么信息熵可以表示为如下公式:
(5.1)
- 在决策树中,信息熵不仅能用来度量类别的不确定性,还可以用来度量包含不同特征的数据样本与类别的不确定性。某个特征列向量的信息熵越大,则该向量的不确定性就越大,即其混乱程度就越大,就应该优先考虑从该特征向量入手进行划分。
(2)ID3算法实现步骤:
① 首先,用信息熵度量类别标签对样本整体的不确定性。
设 是数据样本集合,其类别标签 。类别标签 对数据样本 的划分为,
其中且,此处的表示样本 的标签。
根据式(5.1),样本分类的信息熵公式如式(5.2)所示:
(5.2)
其中,,是样本属于类别 的概率。表示样本 中类别 的元素个数;表示样本集 的元素个数,即样 本总数。
② 然后,使用信息熵度量每个特征不同取值的不确定性。
、 假设属性 有 个不同的取值,那么使用属性 就可以将样本集 划分为 个互不相交的子集 ,
其中,。如果选择属性A做最优划分特征,那么划分的子集就是样本集 节点中生长出来的决策树分支。
由属性 划分的子集的信息熵如式(5.3)和(5.4)所示:
(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算法
- ID3算法由Ross Quinlan发明,建立在“奥卡姆剃刀”的基础上。
- 小型的决策树优于大型的决策树。
- ID3算法根据信息论的信息增益评估和特征选择,每次选择信息增益最大的特征作为判断模块。
- ID3算法可用于划分标称型数据集,没有剪枝的过程。为了去除过度数据匹配的问题,可裁剪及合并相邻的无法产生大量信息增益的叶子结点(如设置信息增益阈值)
- 信息增益与属性的值域范围大小成正比,也就是说在训练集中,某个属性所取得不同值的个数越多,就越有可能将它作为分裂属性。然而,有时这样选择是无效的。
- ID3不能处理连续分布的数据特征。
6. C4.5算法
- ID3算法存在一个问题,就是偏向于多值属性。例如,如果存在唯一标识属性ID,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。
- 1993年,Quinlan将ID3改进为C4.5算法。C4.5算法使用信息增益率(Gain Ratio)代替信息增益,进行特征选择,克服了信息增益选择特征时偏向特征值个数较多的不足。
(1)信息增益率
- 首先定义“分裂信息”,其定义如式(6.1)所示:
(6.1)
其中, 是样本集 在特征 上的划分,此处假定 有 个不同的取值。
- 信息增益率定义如式(6.2)所示:
(6.2)
(2)C4.5算法
- C4.5选择具有最大信息增益率的属性作为分裂属性,具体算法步骤与ID3类似。
- C4.5是ID3的一个改进算法,继承了ID3算法的优点。C4.5算法使用信息增益率代替信息增益,进行特征选择,克服了信息增益选择特征时偏向特征值个数较多的不足。
- C4.5算法在树构造过程中进行了剪枝,能够完成对连续属性的离散化处理,能够对不完整的数据进行处理。
- C4.5算法产生的分类规则易于理解,准确率较高,但效率低,这是因为在树的构造过程中,需要对数据进行多次的顺序扫描和排序。
- 正是因为必须进行多次的顺序扫描和排序,C4.5才只适合能够驻留于内存的数据集。
本文学习总结自李克清、时允田主编的《机器学习及应用》
最后
以上就是稳重朋友为你收集整理的机器学习——决策树(ID3和C4.5)的全部内容,希望文章能够帮你解决机器学习——决策树(ID3和C4.5)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复