python决策树例题经典案例-决策树python实现小样例
我们经常使用决策树处理分类问题,近年来的调查表明决策树也是经常使用的数据挖掘算法
K-NN可以完成多分类任务,但是它最大的缺点是无法给出数据的内在含义,决策树的主要优势在于数据形式非常容易理解
决策树的优缺点:
优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据
缺点:可能会产生过度匹配问题
适用数据类型:数值型和标称型
在构造决策树时,我们需要解决的第一个问题是,当前数据集上哪个特征在划分数据分类时起决定性作用。
为了找到决定性的特征,划分出最好的结果,我们必须评估每个特征。完成测试之后,原始数据集就被划
分为几个数据子集。这些数据子集会分布在第一个决策点的所有分支上,如果某个分支下的数据属于同一
类型,则当前无需阅读的垃圾邮件已经正确地划分数据分类,无需进一步对数据集进行分割。如果数据子
集内的数据不属于同一类型,则需要重复划分数据子集的过程。如何划分数据子集的算法和划分原始数据集
的方法相同,直到所有具有相同类型的数据均在一个数据子集内
决策树的一般流程
(1)收集数据:可以使用任何方法
(2)准备数据:树构造算法只适用于标称型数据,因此数值型数据必须离散化
(3)分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期
(4)训练算法:构造树的数据结构
(5)测试算法:使用经验树计算错误率
(6)使用算法:此步骤可以适用于任何监督学习算法,而适用决策树可以更好地理解数据的内在含义
从数据集构造决策树算法所需要的子功能模块,其工作原理如下:得到原始数据集,然后基于
最好的属性值划分数据集,由于特征值可能多余两个,因此可能存在大于两个分支的数据集划
分,第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再
次划分数据。
1 计算给定数据集的香农熵2 from math importlog3 importoperator4 importtreePlotter5
6
7 defcalcShannonEnt(dataSet):8 #计算数据集的实例总数
9 numEntries =len(dataSet)10 labelCounts ={}11 #创建一个字典,他的键值是最后一列的数值,如果当前键值不存在,则扩展字典并将当前键值加入字典。
12 #每个键值都记录了当前类别出现的次数。最后,使用所有类标签的发生频率计算类别出现的概率。我们
13 #将用这个概率计算香农熵,统计所有类标签发生的次数。
14 for featVec in dataSet: #the the number of unique elements and their occurance
15 #为所有可能分类创建字典
16 currentLabel = featVec[-1]17 if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] =018 labelCounts[currentLabel] += 1
19 shannonEnt = 0.0
20 for key inlabelCounts:21 prob = float(labelCounts[key]) /numEntries22 #以2为底求对数,香农定理
23 shannonEnt -= prob * log(prob, 2) #log base 2
24 returnshannonEnt25 defcreateDataSet():26 dataSet = [[1, 1, "yes"],27 [1, 1, "yes"],28 [1, 0, "no"],29 [0, 1, "no"],30 [0, 1, "no"]]31 labels = ["no surfacing","flippers"]32 #change to discrete values
33 returndataSet, labels34
35 #按照给定特征划分数据集
36 #三个输入参数:待划分的数据集、划分数据集的特征、特征的返回值。
37 #注:python不考虑内存分配的问题
38 defsplitDataSet(dataSet, axis, value):39 #创建新的list对象
40 retDataSet =[]41 for featVec indataSet:42 if featVec[axis] ==value:43 #抽取
44 reducedFeatVec = featVec[:axis] #chop out axis used for splitting
45 reducedFeatVec.extend(featVec[axis+1:])46 retDataSet.append(reducedFeatVec)47 returnretDataSet48
49 #选择最好的数据集划分方式
50 defchooseBestFeatureToSplit(dataSet):51 numFeatures = len(dataSet[0]) - 1 #the last column is used for the labels
52 #计算了整个数据集的香农熵
53 baseEntropy =calcShannonEnt(dataSet)54 bestInfoGain = 0.0; bestFeature = -1
55 for i in range(numFeatures): #iterate over all the features
56 #创建唯一的分类标签列表
57 featList = [example[i] for example in dataSet]#create a list of all the examples of this feature
58 uniqueVals = set(featList) #get a set of unique values
59 newEntropy = 0.0
60 for value inuniqueVals:61 #计算每种划分方式的信息熵
62 subDataSet =splitDataSet(dataSet, i, value)63 prob = len(subDataSet)/float(len(dataSet))64 newEntropy += prob *calcShannonEnt(subDataSet)65 infoGain = baseEntropy - newEntropy #calculate the info gain; ie reduction in entropy
66 if (infoGain >bestInfoGain):67 #计算最好的增益compare this to the best gain so far
68 bestInfoGain = infoGain #if better than current best, set to best
69 bestFeature =i70 returnbestFeature71
72 #这与投票代码非常类似,该函数使用分类名称的列表,然后创建键值为classList中唯一值的数据字典,字典对象
73 #存储了classList中每个类标签出现的频率,最后利用operator操作键值排序字典,并返回出现次数最多的分类名称。
74 defmajorityCnt(classList):75 classCount={}76 for vote inclassList:77 if vote not in classCount.keys(): classCount[vote] =078 classCount[vote] += 1
79 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)80 returnsortedClassCount[0][0]81
82 #创建树的函数代码
83 """
84 两个输入参数:数据集和标签列表85 """
86 defcreateTree(dataSet,labels):87 classList = [example[-1] for example indataSet]88 #类别完全相同则停止继续划分
89 if classList.count(classList[0]) ==len(classList):90 return classList[0]#stop splitting when all of the classes are equal
91 #遍历完所有特征时,返回出现次数最多的
92 if len(dataSet[0]) == 1: #stop splitting when there are no more features in dataSet
93 returnmajorityCnt(classList)94 bestFeat =chooseBestFeatureToSplit(dataSet)95 bestFeatLabel =labels[bestFeat]96 myTree ={bestFeatLabel:{}}97 del(labels[bestFeat])98 #得到列表包含的所有属性值
99 featValues = [example[bestFeat] for example indataSet]100 uniqueVals =set(featValues)101 for value inuniqueVals:102 subLabels = labels[:] #copy all of labels, so trees don"t mess up existing labels
103 myTree[bestFeatLabel][value] =createTree(splitDataSet(dataSet, bestFeat, value),subLabels)104 returnmyTree105
106 #使用决策树分类函数
107 defclassify(inputTree,featLabels,testVec):108 firstStr =list(inputTree.keys())[0]109 secondDict =inputTree[firstStr]110 featIndex =featLabels.index(firstStr)111 key =testVec[featIndex]112 valueOfFeat =secondDict[key]113 ifisinstance(valueOfFeat, dict):114 classLabel =classify(valueOfFeat, featLabels, testVec)115 else: classLabel =valueOfFeat116 returnclassLabel117
118
119 myDat,label=createDataSet()120
121 print("数据集"+str(myDat))122 print("labels"+str(label))123 #A=calcShannonEnt(myDat)
124 #print("香农熵"+str(A))
125 #B=splitDataSet(myDat,0,1)
126 #print("按给定特征划分数据集"+str(B))
127 #C=chooseBestFeatureToSplit(myDat)
128 #print("最好的增益"+str(C))
129 """
130 # 结果告诉我们,第0个特征是最好的用于划分数据集的特征。131 # 如果我们按照第一个特征属性划分数据,也就是说第一个特征是1的放在一组,132 # 第一个特征是0的放在另一组133 #"""
134 mytree=treePlotter.retrieveTree(0)135 D=classify(mytree,label,[1,0])136 print(D)
python决策树例题经典案例-决策树python实现小样例相关推荐
- 两个决策树例题经典案例-代码示例
以下是两个经典的决策树案例: 餐厅顾客流失预测: 假设你是一家餐厅的经理,想要预测哪些客户可能会流失,以便你可以采取措施来留住他们.为了解决这个问题,你可以使用决策树来构建一个分类模型. 在这个案例中 ...
- 决策树分析例题经典案例_8决策树例题解析.ppt
8决策树例题解析,决策树例题经典案例,决策树例题,决策树算法例题,管理学决策树算法例题,决策树例题及答案,决策树分析法例题,决策树法例题,管理学决策树例题,决策树计算例题及答案 例: 某农业企业有耕地 ...
- python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载
[300dpi高清版] Python基砒教程(第2版)LHD,pdf Head. First. Python中文版pdf [ Python3程序开发指南第二版pdf [ thon编程第4版)]( Pr ...
- 用通俗易懂的方式讲解:决策树模型及案例(Python 代码)
文章目录 1 决策树模型简介 2 Gini系数(CART决策树) 3 信息熵.信息增益 4 决策树模型代码实现 4.1 分类决策树模型(DecisionTreeClassifier) 4.2 回归决策 ...
- python决策树 value_直播案例 | 决策树、随机森林和 AdaBoost 的 Python 实现
获取案例链接.直播课件.数据集在本公众号内发送"机器学习". 本案例使用 Python 逐步实现了三种基于树的模型:分类回归决策树(CART).随机森林和 AdaBoost .在实 ...
- 决策树分析例题经典案例_决策树例题分析及解答
决策树例题分析及解答 1,例: 某农业企业有耕地面积33.333公顷,可供灌水量6300立方米,在生产忙季可供工作日2800个,用于种植玉米.棉花和花生三种作物.预计三种作物每公顷在用水忙季用工日数. ...
- python经典案例-Python递归的经典案例
目录 : 一.递归的简介 二.递归的经典应用 2.1 递归求阶乘 2.2 递归推斐波那契数列 2.3 二分法找有序列表指定值 2.4 递归解汉诺塔 前言: 当我们碰到诸如需要求阶乘或斐波那契数列的问题 ...
- python编程基础与案例集锦,python经典程序实例代码
你都用Python 来做什么? 当我知道可以做这些之后,我特别想会.因为论文查阅.答案确认查询:想知道豆瓣8分以上电影,或者穿越类的电影.处理工资数据考核表等. 可以干什么1.上学吧答案神器 主要实现 ...
- python编程入门经典 评分-关于 Python 的经典入门书籍有哪些?
很多人在问,学习Python读什么书,这其实是一个非常通用的问题,学习分为三种方式:看书.上课.培训,而读书学习是最实惠也是最高效的一种,下面我们推荐6本高分书籍给大家,希望大家学习愉快: 1.Pyt ...
- python三本经典书籍-《python编程入门经典》python之父推荐这三本书让你更快入门...
在学习python的时候,我们不得不看一些书籍来辅助.有哪些书籍是比较经典的呢?python之父给大家推荐这3本书,其中又2本是属于一个系列,即<Python核心编程>第二版和第三版,一本 ...
最新文章
- 技术网站 --websystique.com
- 应用系统中交互式报表功能解析
- layui table is not a valid module
- Java基础:面向对象
- 山东大学继续教育计算机3,山东大学继续教育数字电子技术基础试题3及答案.doc...
- 编译实验(一)词法分析
- linux下使用sftp
- 解决Redmi 6 pro底部出现黑边问题
- unity, 颜色随高度渐变shader
- Java笔记-使用BindingResult把表单错误传出来
- MySQL安装后默认自带数据库的作用
- 用计算机里可以加50度电,一台电脑一天用多少度电 节电节能的建议和措施
- 数据库系统概论——事务
- python在视频上方加字_如何用python 在视频上添加自己的logo
- 汇编语言:写一个简单的音乐程序
- 微信公众号里的视频下载
- 华硕重装后进入bios_重装系统以后,开机自动进bios,进不了系统怎么办
- 基本系统调用性能lmbench测试方法和下载
- 黑客或可完全控制设备,苹果紧急发布补丁!
- 读书笔记 - 《枪炮、病菌与钢铁》
热门文章
- 安卓双摄像头录像_USB双摄像头app手机版下载-USB双摄像头apk安卓版下载 - 口袋手机站...
- 2023年1月编程语言流行度排名
- 2019年博客排名前十
- 关于checkbox的removeClass属性
- C# 中的多线程和异步编程
- 10_传智播客iOS视频教程_NSString
- python判断为空行_Python pandas.DataFrame 找出有空值的行
- Windows10中,如何改变鼠标光标(指针)的大小和颜色?
- CTF unserialize3
- 学计算机的是不是都非常木讷,北大学神韦东奕​是正常人吗?内向木讷是缺点​,拿不出手?​...