《机器学习实战》第三章 决策树

-------------------------------------

#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】 决策树相关推荐

  1. python的knn算法list_【风马一族_Python】 实施kNN算法

    一.在PyCharm 5.0.4(编写python程序的IDE) 编写kNN.py文件的代码 -------------------------- 1. kNN.py  运算符模块 --------- ...

  2. python pip安装numpy_【风马一族_Python】 安装pip与Numpy

    ------------------------------------------------------------------------------------------------- 原因 ...

  3. 【风马一族_php】NO4_php基础知识

    原文来自:http://www.cnblogs.com/sows/p/6017018.html(博客园的)风马一族 侵犯版本,后果自负 回顾 运算符:算术运算符.逻辑运算符.比较运算符.位运算符.赋值 ...

  4. 【风马一族_xml】xmlp之dtd1

    什么是XML约束? 在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法 对xml进行 ...

  5. 【风马一族_C】进制转化

    1 #include "stdio.h" 2 #include "Math.h" 3 #define number 50 //设置数组的长度 4 5 int n ...

  6. android+通过菜单跳转页面,【风马一族_Android】通过菜单的点击,跳转到不同界面...

    ---恢复内容开始--- 布局的代码:activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?& ...

  7. 【风马一族_php】NO5_php基础知识_数组

    原文来自:http://www.cnblogs.com/sows/p/6032570.html (博客园的)风马一族 侵犯版本,后果自负 回顾 匿名函数 定义: 变量 = function [参数列表 ...

  8. 【风马一族_php】数组函数

    原文来自:http://www.cnblogs.com/sows/p/6045699.html (博客园的)风马一族 侵犯版本,后果自负  2016-11-09 15:56:26 数组 函数 php- ...

  9. 【风马一族_php】

    原文来自:http://www.cnblogs.com/sows/p/6054383.html  (博客园的)风马一族 侵犯版本,后果自负 2016-11-11   15:13:51 回顾 数组:分配 ...

最新文章

  1. 【tomcat】手动部署动态JavaWeb项目到tomcat
  2. idea设置java scala等代码自动换行
  3. 电气与计算机学院院长论坛报告,自动化学院分论坛第十、十一次专家报告会圆满成功...
  4. 以太坊白皮书_以太坊发展历程
  5. elemntui icon 大小_自定义elementui中的图标
  6. HDU 2089 不要62(数位DP)
  7. jquery --- Poshy Tip jQuery Plugin
  8. Hadoop学习总结之五:Hadoop的运行痕迹
  9. 三星s6 html5测试分数,魅蓝s6安兔兔跑分有多少
  10. Table is marked as crashed and should be repaire
  11. 1075c语言程序设计答案,山东理工大学ACM平台题答案关于C语言 1075 Doubles
  12. 记录一下自己用STM32完整开发一台双模机械键盘的过程(附代码和原理图)
  13. MongoDb进阶实践之七 MongoDB的索引入门
  14. 数组之concat注意事项-不更改原数组
  15. Django开发微信公众号
  16. ios safari 模拟器_web测试-ios设备模拟器(iOS Simulator)
  17. 性能测试连载 (7)-jmeter 压力测试中的难点解析
  18. echarts系列-带图教你调整左右位置x轴样式网格虚线刻度居中双轴Y轴滚动上下移动文字旋转改分割线颜色部分字体改色折注混合,X轴的颜色,X轴字体颜色,调整柱子颜色,调整小图标图例的大小和位置,鼠标
  19. 【CISSP备考笔记】第4章:通信与网络安全
  20. 使用Spark和Pig统计每秒钟微博数量

热门文章

  1. HarmonyOS:ListContainer实现表格
  2. svg图片调整大小和颜色
  3. Bert油管视频学习
  4. Linux软件开发工程师
  5. 一起聊一聊数字化,信息化,数据化,数字化转型(建议收藏)
  6. excel批量生成批处理语句另存为.bat文件批量改名
  7. Android物理按键功能更改
  8. 带你认识 M1、UID、CUID、FUID、UFUID
  9. P4643 [国家集训队]阿狸和桃子的游戏
  10. ERROR: Cannot uninstall ‘PyYAML‘. It is a distutils installed project and thus we cannot...