决策树
(一)、决策树的简介
决策树(decision tree)是一种基本的分类与回归方法。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是if-then规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。其主要优点是模型具有可读性,分类速度快。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修剪。这些决策树学习的思想主要来源于由Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及由Breiman等人在1984年提出的CART算法。
决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。决策树是一种十分常用的分类回归方法
简单来说决策树就是一棵树,其中跟节点和内部节点是输入特征的判定条件,叶子结点就是最终结果。
优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。
缺点:可能会产生过度
(二)、构造决策树的三种构造方法
1.基于信息增益生成决策树(ID3算法)
信息增益是相对于特征而言的,信息增益越大,特征对最终的分类结果影响也就越大,我们就应该选择对最终分类结果影响最大的那个特征作为我们的分类特征。
提到信息增益必须先解释一下什么是“信息熵”,因为信息增益是基于信息熵而定义的。
信息熵的公式定义:

D:表示当前的数据集合。
k:表示当前数据集合中的第k类,也就是我们目标变量的类型。
这里根据公式算法得出一个数据集的信息熵
def calcShannonEnt(dataSet):
numEntries = len(dataSet)
labelCounts = {
}
for featVec in dataSet:
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelCounts:
prob = float(labelCounts[key]) / numEntries
shannonEnt -= prob * log(prob, 2)
return shannonEnt

信息增益公式:
这里通过ID3算法选择信息增益最大的特征,结果返回信息增益的最大索引。
def splitdataSet(dataSet, axis, value): # 分类数据
retdataSet = []
for featVec in dataSet:
if featVec[axis] == value:
reducedFeatVec = featVec[:axis]
reducedFeatVec.extend(featVec[axis + 1:])
# 去掉对应位置的特征
retdataSet.append(reducedFeatVec)
return retdataSet
def chooseBestFeatureToSplit(dataSet):

本文详细介绍了决策树的三种构造方法:ID3算法基于信息增益,C4.5算法采用信息增益率避免偏好取值多的特征,CART算法则使用基尼指数。通过比较,展示了不同算法在训练模型精度上的差异,C4.5算法表现最优。
最低0.47元/天 解锁文章
333

被折叠的 条评论
为什么被折叠?



