目录
---------------------------------------------------------------------------------------------------------------------------------
前言
提示:通过自建数据集,创建决策树对天气和身体状态是否适合去运动进行预测。
提示:以下是本篇文章正文内容,下面案例可供参考
一、决策树原理
决策树是一个预测判别模型。它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,每个分支路径代表某个可能的属性值,每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。.决策树是从训练数据中学习得出一个树状模型,通过做出一系列决策(选择)来对数据进行划分,这类似于针对一系列问题进行选择。决策树的决策过程就是从根节点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,直到叶子结点,将叶子结点存放的类别作为决策结果。属于监督学习算法,属性选择的度量是决策树的关键。
决策树由结点和有向边组成。结点有两种类型:内部结点和叶节点。内部结点表示一个特征或属性,叶节点表示一个分类结果。
例如:根据声音和头发判断一个人的性别。
测试员A:先根据头发判断,再根据声音判断,头发长、声音粗为男生,头发长、声音细为女生;头发短、声音粗为男生,头发短、声音细为女生;于是得到如下决策树。
测试员B:首先判断声音,声音细是女生,声音粗、头发短是男生,声音粗、头发长是女生。得到如下决策树:
这时我们发现两种决策树都可以用来判断,但是哪种最优呢?这就要度量那个特征获得的收益最高,就将他作为最佳划分特征。
二、实验过程
2.1.最优决策属性的选择
2.1.1信息熵
划分数据集的大原则是:将无序的数据变得有序。如果我们能测量数据的复杂度,对比按
“信息熵”是度量样本集合纯度最常用的一种指标,假定 当前样本集合D中第k类样本所占的比例为pk (K=1, 2, ..., |y|)
,则D的信息熵定义为:
Ent(D)的值越小,则D的纯度越高
• 计算信息熵时约定:若p = 0,则plog2p=0
• Ent(D)的最小值为0,最大值为log2|y|
例如:
计算信息熵的代码如下:
#计算给定数据集的香农熵
def calcShannonEnt(dataSet):
'''
计算给定数据集的香农熵
:param dataSet: 数据集
:return: 香农熵
'''
# 返回数据集的行数,样本容量
numEntries = len(dataSet)
# 保存每个标签出现出现次数的字典
labelCounts = {}
#对每组特征向量进行统计
for featVec in dataSet:
#提取标签(label)信息
currentLabel = featVec[-1]
#如果存在标签没有放入统计次数的字典,则将其添加
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
#label计数
labelCounts[currentLabel] += 1
#香农熵赋初值
shannonEnt = 0.0
for key in labelCounts:
#选择该标签的概率
prob = float(labelCounts[key])/numEntries
shannonEnt -=prob * log(prob,2)
return shannonEnt