我们经常使用决策树处理分类问题,近年来的调查表明决策树也是经常使用的数据挖掘算法

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实现小样例相关推荐

  1. 两个决策树例题经典案例-代码示例

    以下是两个经典的决策树案例: 餐厅顾客流失预测: 假设你是一家餐厅的经理,想要预测哪些客户可能会流失,以便你可以采取措施来留住他们.为了解决这个问题,你可以使用决策树来构建一个分类模型. 在这个案例中 ...

  2. 决策树分析例题经典案例_8决策树例题解析.ppt

    8决策树例题解析,决策树例题经典案例,决策树例题,决策树算法例题,管理学决策树算法例题,决策树例题及答案,决策树分析法例题,决策树法例题,管理学决策树例题,决策树计算例题及答案 例: 某农业企业有耕地 ...

  3. python编程入门经典百度云-python电子书学习资料打包分享百度云资源下载

    [300dpi高清版] Python基砒教程(第2版)LHD,pdf Head. First. Python中文版pdf [ Python3程序开发指南第二版pdf [ thon编程第4版)]( Pr ...

  4. 用通俗易懂的方式讲解:决策树模型及案例(Python 代码)

    文章目录 1 决策树模型简介 2 Gini系数(CART决策树) 3 信息熵.信息增益 4 决策树模型代码实现 4.1 分类决策树模型(DecisionTreeClassifier) 4.2 回归决策 ...

  5. python决策树 value_直播案例 | 决策树、随机森林和 AdaBoost 的 Python 实现

    获取案例链接.直播课件.数据集在本公众号内发送"机器学习". 本案例使用 Python 逐步实现了三种基于树的模型:分类回归决策树(CART).随机森林和 AdaBoost .在实 ...

  6. 决策树分析例题经典案例_决策树例题分析及解答

    决策树例题分析及解答 1,例: 某农业企业有耕地面积33.333公顷,可供灌水量6300立方米,在生产忙季可供工作日2800个,用于种植玉米.棉花和花生三种作物.预计三种作物每公顷在用水忙季用工日数. ...

  7. python经典案例-Python递归的经典案例

    目录 : 一.递归的简介 二.递归的经典应用 2.1 递归求阶乘 2.2 递归推斐波那契数列 2.3 二分法找有序列表指定值 2.4 递归解汉诺塔 前言: 当我们碰到诸如需要求阶乘或斐波那契数列的问题 ...

  8. python编程基础与案例集锦,python经典程序实例代码

    你都用Python 来做什么? 当我知道可以做这些之后,我特别想会.因为论文查阅.答案确认查询:想知道豆瓣8分以上电影,或者穿越类的电影.处理工资数据考核表等. 可以干什么1.上学吧答案神器 主要实现 ...

  9. python编程入门经典 评分-关于 Python 的经典入门书籍有哪些?

    很多人在问,学习Python读什么书,这其实是一个非常通用的问题,学习分为三种方式:看书.上课.培训,而读书学习是最实惠也是最高效的一种,下面我们推荐6本高分书籍给大家,希望大家学习愉快: 1.Pyt ...

  10. python三本经典书籍-《python编程入门经典》python之父推荐这三本书让你更快入门...

    在学习python的时候,我们不得不看一些书籍来辅助.有哪些书籍是比较经典的呢?python之父给大家推荐这3本书,其中又2本是属于一个系列,即<Python核心编程>第二版和第三版,一本 ...

最新文章

  1. 技术网站 --websystique.com
  2. 应用系统中交互式报表功能解析
  3. layui table is not a valid module
  4. Java基础:面向对象
  5. 山东大学继续教育计算机3,山东大学继续教育数字电子技术基础试题3及答案.doc...
  6. 编译实验(一)词法分析
  7. linux下使用sftp
  8. 解决Redmi 6 pro底部出现黑边问题
  9. unity, 颜色随高度渐变shader
  10. Java笔记-使用BindingResult把表单错误传出来
  11. MySQL安装后默认自带数据库的作用
  12. 用计算机里可以加50度电,一台电脑一天用多少度电 节电节能的建议和措施
  13. 数据库系统概论——事务
  14. python在视频上方加字_如何用python 在视频上添加自己的logo
  15. 汇编语言:写一个简单的音乐程序
  16. 微信公众号里的视频下载
  17. 华硕重装后进入bios_重装系统以后,开机自动进bios,进不了系统怎么办
  18. 基本系统调用性能lmbench测试方法和下载
  19. 黑客或可完全控制设备,苹果紧急发布补丁!
  20. 读书笔记 - 《枪炮、病菌与钢铁》

热门文章

  1. 安卓双摄像头录像_USB双摄像头app手机版下载-USB双摄像头apk安卓版下载 - 口袋手机站...
  2. 2023年1月编程语言流行度排名
  3. 2019年博客排名前十
  4. 关于checkbox的removeClass属性
  5. C# 中的多线程和异步编程
  6. 10_传智播客iOS视频教程_NSString
  7. python判断为空行_Python pandas.DataFrame 找出有空值的行
  8. Windows10中,如何改变鼠标光标(指针)的大小和颜色?
  9. CTF unserialize3
  10. 学计算机的是不是都非常木讷,北大学神韦东奕​是正常人吗?内向木讷是缺点​,拿不出手?​...