机器学习实战Ch03: 决策树

相比kNN的无脑比较相似度,我们需要一种能够较清晰地给出数据内在含义的分类器。

这一章给出了“决策树”这种选择,这一概念本身不难理解,问题在于 在树的每一层如何划分数据集能达到最好的效果

(书中选用的是ID3算法,虽然不是很理解这个名字,但算法本身不是很难理解)

这里的效果,我们引入信息熵这个概念进行衡量

对于一个数据集中的各个标签特征xi,我们给出该类别信息熵的公式

那么相应的按概率为权重,对数据集计算其信息熵

而对于整个数据集而言,其信息熵是分类特征yi取到的概率p(yi)*H(subDataSet(yi))

其中subDataSet(yi)为dataSet中分类特征对应为yi的子数据集

简单来讲,一个数据集划分后的信息熵为

然后我们开始构建决策树的第一步,寻找当前最佳的划分标准

 1 def chooseBestFeatureToSplit(dataSet):
 2     numFeatures = len(dataSet[0]) - 1
 3     baseEntropy = calcShannonEnt(dataSet)
 4     bestInfoGain = 0.0
 5     bestFeature = -1
 6     for i in range(numFeatures):
 7         #利用推导式提取出dataSet的第i列特征值
 8         featList = [example[i] for example in dataSet]
 9         uniqueVals = set(featList)
10         newEntropy = 0.0
11         for value in uniqueVals:
12             subDataSet = splitDataSet(dataSet, i, value)
13             prob = len(subDataSet)/float(len(dataSet))
14             newEntropy += prob * calcShannonEnt(subDataSet)
15         #比较信息熵的差值,取信息熵下降效果最明显的特征
16         infoGain = baseEntropy - newEntropy
17         if (infoGain > bestInfoGain):
18             bestInfoGain = infoGain
19             bestFeature = i
20     return bestFeature

构建决策树本身的代码并不难理解,只是简单的递归实现

但用字典储存树这种奇技淫巧,可以学习一下

 1 def createTree(dataSet,labels):
 2     classList = [example[-1] for example in dataSet]
 3     if (classList.count(classList[0]) == len(classList)): return classList[0]
 4     if (len(dataSet[0]) == 1): return majorityCnt(classList)
 5     bestFeat = chooseBestFeatureToSplit(dataSet)
 6     bestFeatLabel = labels[bestFeat]
 7     myTree = {bestFeatLabel:{}}
 8     del(labels[bestFeat])
 9     featValues = [example[bestFeat] for example in dataSet]
10     uniqueVals = set(featValues)
11     for value in uniqueVals:
12         subLabels = labels[:]
13         myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value),subLabels)
14     return myTree

注意一下3,4行对应的两种特殊情况

1)标签特征在该子数据集中已经清一色了,没有继续划分的必要了

2)已经用所有特征划分过了数据集,标签特征却还是不是清一色,启动投票机制(少数服从多数)

用pyplot绘制树我决定还是先放着...

好麻烦啊orz

mark一下以后补上

时间: 2024-10-06 00:28:10

机器学习实战Ch03: 决策树的相关文章

机器学习实战精读--------决策树

感觉自己像个学走路的孩子,每一步都很吃力和认真! 机器根据数据集创建规则,就是机器学习. 决策树:从数据集合中提取一系列规则,适用于探索式的知识发现. 决策树本质:通过一系列规则对数据进行分类的过程. 决策树算法核心:构建精度高,数据规模小的决策树. ID3算法:此算法目的在于减少树的深度,但是忽略了叶子数目的研究. C4.5算法:对ID3进行改进,对于预测变量的缺失值处理.剪枝技术.派生规则等方面作了较大改进,既适合分类,又适合回归. 香农熵:变量的不确定性越大,熵也就越大,把它搞清楚所需要的

《机器学习实战》——决策树

原理(ID3): 依次选定每个特征,计算信息增益(基本信息熵-当前信息熵),选择信息增益最大的一个作为最佳特征: 以该特征作为树的根节点,以该最佳特征的每一个值作为分支,建立子树: 重复上述过程,直到:1) 所有类别一致 2) 特征用尽 优点: 简单容易理解: 可处理有缺失值的特征.非数值型数据: 与训练数据拟合很好,复杂度小 缺点: 选择特征时候需要多次扫描与排序,适合常驻内存的小数据集: 容易过拟合: 改进: ID3算法偏向取值较多的特征(宽且浅的树),适合离散型数据,难处理连续型数据.香农

机器学习实战笔记--决策树

tree.py代码 1 #encoding:utf-8 2 from math import log 3 import operator 4 import treePlotter as tp 5 6 7 def createDataSet(): #简单测试数据创建 8 dataSet = [[1, 1, 'yes'], 9 [1, 1, 'yes'], 10 [1, 0, 'no'], 11 [0, 1, 'no'], 12 [0, 1, 'no']] 13 labels = ['no surf

机器学习实战python3 决策树ID3

代码及数据:https://github.com/zle1992/MachineLearningInAction 决策树 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 创建分支的伪代码函数createBranch()如下所示:检测数据集中的每个子项是否属于同一分类:if so return 类标签; Else 寻找划分数据集的最好特征 划分数据集 创建分支节点 for 每个划分的子集 调用函

3.机器学习实战之决策树

返回目录 上一篇:k-近邻算法 1. 简单理论介绍 决策树的类型有很多,有CART.ID3和C4.5等,其中CART是基于基尼不纯度(Gini)的,这里不做详解,而ID3和C4.5都是基于信息熵的,它们两个得到的结果都是一样的,本次定义主要针对ID3算法.下面我们介绍信息熵的定义. 1.1 熵 设D为用类别对训练集进行的划分,则D的熵(entropy)表示为: 其中m表示训练集中标签种类的个数:pi表示第i个类别在整个训练集中出现的概率,可以用属于此类别元素的数量除以训练集合元素总数量作为估计:

《机器学习实战》-决策树

目录 决策树 决策树简介 决策树的构造 信息增益 划分数据集 递归构建决策树 在 Python 中使用 Matplotlib 注解绘制树形图 Matplotlib 注解 构造注解树 测试和存储分类器 测试算法:使用决策树执行分类 使用算法:决策树的存储 示例:使用决策树预测隐形眼镜类型 总结 决策树 决策树简介 在数据集中度量一致性 使用递归构造决策树 使用 Matplotlib 绘制树形图 决策树简介 让我们来玩一个游戏,你现在在你的脑海里想好某个事物,你的同桌向你提问,但是只允许问你20个问

决策树代码《机器学习实战》

22:45:17 2017-08-09 KNN算法简单有效,可以解决很多分类问题.但是无法给出数据的含义,就是一顿计算向量距离,然后分类. 决策树就可以解决这个问题,分类之后能够知道是问什么被划分到一个类.用图形画出来就效果更好了,这次没有学哪个画图的,下次. 这里只涉及信息熵的计算,最佳分类特征的提取,决策树的构建.剪枝没有学,这里没有. 1 # -*- oding: itf-8 -*- 2 3 ''' 4 function: <机器学习实战>决策树的代码,画图的部分没有写: 5 note:

《机器学习实战》基于信息论的三种决策树算法(ID3,C4.5,CART)

============================================================================================ <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记,包含对其中算法的理解和算法的Python代码实现 另外博主这里有机器学习实战这本书的所有算法源代码和算法所用到的源文件,有需要的留言 如需转载请注明出处,谢谢 ======================================

机器学习实战读书笔记(三)决策树

3.1 决策树的构造 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 一般流程: 1.收集数据 2.准备数据 3.分析数据 4.训练算法 5.测试算法 6.使用算法 3.1.1 信息增益 创建数据集 def createDataSet(): dataSet = [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, '