【风马一族_Python】 决策树
《机器学习实战》第三章 决策树
-------------------------------------
#1 trees.py 计算给定数据集的香农熵
-------------------------------------
1 from math import log 2 3 # 计算给定数据集的香农熵 4 def calcShannonEnt(dataSet): 5 numEnres = len(dataSet) 6 labelCoounts = {} 7 for featVec in dataSet: 8 #为所有可能分类创建字典 9 currentLabel = featVec[-1] 10 if currentLabel not in labelCoounts.keys(): 11 labelCoounts[currentLabel] = 0 12 labelCoounts[currentLabel] += 1 13 shannonEnt = 0.0 14 for key in labelCoounts: 15 prob = float(labelCoounts[key]) / numEnres 16 shannonEnt -= prob * log(prob, 2) #以2为底求对数 17 return shannonEnt 18 19 #用来 得到简单鱼类鉴定数据集 20 def createDataSet(): 21 dataSet = [[1, 1, 'yes'], 22 [1, 1, 'yes'], 23 [1, 0, 'no'], 24 [0, 1, 'no'], 25 [0, 1, 'no']] 26 labels = ['no surfacing', 'flippers'] 27 return dataSet, labels
-------------------------------------
#2 trees.py 划分数据集 待划分的数据集、划分数据集的待征、需要返回的特征的值
-------------------------------------
1 # 划分数据集 待划分的数据集、划分数据集的待征、需要返回的特征的值 2 def splitDataSet(dataSet, axis, value): 3 retDataSet = [] 4 for featVec in dataSet: 5 if featVec[axis] == value: 6 reducedFeatVec = featVec[:axis] 7 reducedFeatVec.extend(featVec[axis + 1:]) 8 retDataSet.append(reducedFeatVec) 9 return retDataSet
-------------------------------------
#3 trees.py 选择最好的数据集划分方式
-------------------------------------
1 # 划分数据集 待划分的数据集、划分数据集的待征、需要返回的特征的值 2 def splitDataSet(dataSet, axis, value): 3 retDataSet = [] 4 for featVec in dataSet: 5 if featVec[axis] == value: 6 reducedFeatVec = featVec[:axis] 7 reducedFeatVec.extend(featVec[axis + 1:]) 8 retDataSet.append(reducedFeatVec) 9 return retDataSet 10 11 12 # 选择最好的数据集划分方式 13 def chooseBestFeatureToSplit(dataSet): 14 numFeatures = len(dataSet[0]) - 1 15 baseEntropy = calcShannonEnt(dataSet) 16 bestInfoGain = 0.0; 17 bestFeature = -1; 18 for i in range(numFeatures): 19 featList = [example[i] for example in dataSet] 20 uniqueVals = set(featList) 21 newEntropy = 0.0; 22 23 for value in uniqueVals: 24 subDataSet = splitDataSet(dataSet, i, value) 25 prob = len(subDataSet) / float(len(dataSet)) 26 newEntropy += prob * calcShannonEnt(subDataSet) 27 28 infoGain = baseEntropy - newEntropy 29 30 if (infoGain > bestInfoGain): 31 bestInfoGain = infoGain 32 bestFeature = i 33 34 return bestFeature
-------------------------------------
#4 trees.py 创建树的函数代码 两个参数:数据集、标签列表
-------------------------------------
1 import operator 2 3 # 创建树的函数代码 两个参数:数据集、标签列表 4 def createTree(dataSet, labels): 5 classList = [example[-1] for example in dataSet] 6 7 # 类别完全相同则停止继续划分 8 if classList.count(classList[0]) == len(classList): 9 return classList[0] 10 11 # 遍历完所有特征时返回出现次数最多的 12 if len(dataSet[0]) == 1: 13 return majorityCnt(classList) 14 15 bestFeat = chooseBestFeatureToSplit(dataSet) 16 bestFeatLabel = labels[bestFeat] 17 myTree = {bestFeatLabel: {}} 18 del (labels[bestFeat]) 19 20 # 得到列表包含的所有属性值 21 featValues = [example[bestFeat] for example in dataSet] 22 uniqueVals = set(featValues) 23 24 # 遍历当前选择特征包含的所有属性值,在每个数据集划分上递归调用函数createTree() 25 for value in uniqueVals: 26 subLabels = labels[:] 27 myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value), subLabels) 28 29 return myTree
转载于:https://www.cnblogs.com/sows/p/5573618.html
【风马一族_Python】 决策树相关推荐
- python的knn算法list_【风马一族_Python】 实施kNN算法
一.在PyCharm 5.0.4(编写python程序的IDE) 编写kNN.py文件的代码 -------------------------- 1. kNN.py 运算符模块 --------- ...
- python pip安装numpy_【风马一族_Python】 安装pip与Numpy
------------------------------------------------------------------------------------------------- 原因 ...
- 【风马一族_php】NO4_php基础知识
原文来自:http://www.cnblogs.com/sows/p/6017018.html(博客园的)风马一族 侵犯版本,后果自负 回顾 运算符:算术运算符.逻辑运算符.比较运算符.位运算符.赋值 ...
- 【风马一族_xml】xmlp之dtd1
什么是XML约束? 在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法 对xml进行 ...
- 【风马一族_C】进制转化
1 #include "stdio.h" 2 #include "Math.h" 3 #define number 50 //设置数组的长度 4 5 int n ...
- android+通过菜单跳转页面,【风马一族_Android】通过菜单的点击,跳转到不同界面...
---恢复内容开始--- 布局的代码:activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?& ...
- 【风马一族_php】NO5_php基础知识_数组
原文来自:http://www.cnblogs.com/sows/p/6032570.html (博客园的)风马一族 侵犯版本,后果自负 回顾 匿名函数 定义: 变量 = function [参数列表 ...
- 【风马一族_php】数组函数
原文来自:http://www.cnblogs.com/sows/p/6045699.html (博客园的)风马一族 侵犯版本,后果自负 2016-11-09 15:56:26 数组 函数 php- ...
- 【风马一族_php】
原文来自:http://www.cnblogs.com/sows/p/6054383.html (博客园的)风马一族 侵犯版本,后果自负 2016-11-11 15:13:51 回顾 数组:分配 ...
最新文章
- 【tomcat】手动部署动态JavaWeb项目到tomcat
- idea设置java scala等代码自动换行
- 电气与计算机学院院长论坛报告,自动化学院分论坛第十、十一次专家报告会圆满成功...
- 以太坊白皮书_以太坊发展历程
- elemntui icon 大小_自定义elementui中的图标
- HDU 2089 不要62(数位DP)
- jquery --- Poshy Tip jQuery Plugin
- Hadoop学习总结之五:Hadoop的运行痕迹
- 三星s6 html5测试分数,魅蓝s6安兔兔跑分有多少
- Table is marked as crashed and should be repaire
- 1075c语言程序设计答案,山东理工大学ACM平台题答案关于C语言 1075 Doubles
- 记录一下自己用STM32完整开发一台双模机械键盘的过程(附代码和原理图)
- MongoDb进阶实践之七 MongoDB的索引入门
- 数组之concat注意事项-不更改原数组
- Django开发微信公众号
- ios safari 模拟器_web测试-ios设备模拟器(iOS Simulator)
- 性能测试连载 (7)-jmeter 压力测试中的难点解析
- echarts系列-带图教你调整左右位置x轴样式网格虚线刻度居中双轴Y轴滚动上下移动文字旋转改分割线颜色部分字体改色折注混合,X轴的颜色,X轴字体颜色,调整柱子颜色,调整小图标图例的大小和位置,鼠标
- 【CISSP备考笔记】第4章:通信与网络安全
- 使用Spark和Pig统计每秒钟微博数量
热门文章
- HarmonyOS:ListContainer实现表格
- svg图片调整大小和颜色
- Bert油管视频学习
- Linux软件开发工程师
- 一起聊一聊数字化,信息化,数据化,数字化转型(建议收藏)
- excel批量生成批处理语句另存为.bat文件批量改名
- Android物理按键功能更改
- 带你认识 M1、UID、CUID、FUID、UFUID
- P4643 [国家集训队]阿狸和桃子的游戏
- ERROR: Cannot uninstall ‘PyYAML‘. It is a distutils installed project and thus we cannot...