【风马一族_Python】 决策树
《机器学习实战》第三章 决策树
-------------------------------------
#1 trees.py 计算给定数据集的香农熵
-------------------------------------
from math import log # 计算给定数据集的香农熵
def calcShannonEnt(dataSet):
numEnres = len(dataSet)
labelCoounts = {}
for featVec in dataSet:
#为所有可能分类创建字典
currentLabel = featVec[-1]
if currentLabel not in labelCoounts.keys():
labelCoounts[currentLabel] = 0
labelCoounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelCoounts:
prob = float(labelCoounts[key]) / numEnres
shannonEnt -= prob * log(prob, 2) #以2为底求对数
return shannonEnt #用来 得到简单鱼类鉴定数据集
def createDataSet():
dataSet = [[1, 1, 'yes'],
[1, 1, 'yes'],
[1, 0, 'no'],
[0, 1, 'no'],
[0, 1, 'no']]
labels = ['no surfacing', 'flippers']
return dataSet, labels
-------------------------------------
#2 trees.py 划分数据集 待划分的数据集、划分数据集的待征、需要返回的特征的值
-------------------------------------
# 划分数据集 待划分的数据集、划分数据集的待征、需要返回的特征的值
def splitDataSet(dataSet, axis, value):
retDataSet = []
for featVec in dataSet:
if featVec[axis] == value:
reducedFeatVec = featVec[:axis]
reducedFeatVec.extend(featVec[axis + 1:])
retDataSet.append(reducedFeatVec)
return retDataSet
-------------------------------------
#3 trees.py 选择最好的数据集划分方式
-------------------------------------
# 划分数据集 待划分的数据集、划分数据集的待征、需要返回的特征的值
def splitDataSet(dataSet, axis, value):
retDataSet = []
for featVec in dataSet:
if featVec[axis] == value:
reducedFeatVec = featVec[:axis]
reducedFeatVec.extend(featVec[axis + 1:])
retDataSet.append(reducedFeatVec)
return retDataSet # 选择最好的数据集划分方式
def chooseBestFeatureToSplit(dataSet):
numFeatures = len(dataSet[0]) - 1
baseEntropy = calcShannonEnt(dataSet)
bestInfoGain = 0.0;
bestFeature = -1;
for i in range(numFeatures):
featList = [example[i] for example in dataSet]
uniqueVals = set(featList)
newEntropy = 0.0; for value in uniqueVals:
subDataSet = splitDataSet(dataSet, i, value)
prob = len(subDataSet) / float(len(dataSet))
newEntropy += prob * calcShannonEnt(subDataSet) infoGain = baseEntropy - newEntropy if (infoGain > bestInfoGain):
bestInfoGain = infoGain
bestFeature = i return bestFeature
-------------------------------------
#4 trees.py 创建树的函数代码 两个参数:数据集、标签列表
-------------------------------------
import operator # 创建树的函数代码 两个参数:数据集、标签列表
def createTree(dataSet, labels):
classList = [example[-1] for example in dataSet] # 类别完全相同则停止继续划分
if classList.count(classList[0]) == len(classList):
return classList[0] # 遍历完所有特征时返回出现次数最多的
if len(dataSet[0]) == 1:
return majorityCnt(classList) bestFeat = chooseBestFeatureToSplit(dataSet)
bestFeatLabel = labels[bestFeat]
myTree = {bestFeatLabel: {}}
del (labels[bestFeat]) # 得到列表包含的所有属性值
featValues = [example[bestFeat] for example in dataSet]
uniqueVals = set(featValues) # 遍历当前选择特征包含的所有属性值,在每个数据集划分上递归调用函数createTree()
for value in uniqueVals:
subLabels = labels[:]
myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet, bestFeat, value), subLabels) return myTree
【风马一族_Python】 决策树的更多相关文章
- 【风马一族_Python】 实施kNN算法
一.在PyCharm 5.0.4(编写python程序的IDE) 编写kNN.py文件的代码 -------------------------- 1. kNN.py 运算符模块 --------- ...
- 【风马一族_Python】 安装pip与Numpy
------------------------------------------------------------------------------------------------- 原因 ...
- 【风马一族_Python】 更替pip的版本
替换电脑上python中的pip的版本 例子: 下载的文件:pip-8.1.1-py2.py3-none-any.whl 下载地址:https://pypi.python.org/pypi/pip/# ...
- 【风马一族_php】NO1_用php发出一声 Hi
原文来自:http://www.cnblogs.com/sows/p/5990157.html (博客园的)风马一族 侵犯版本,后果自负 第一步 安装WEB服务器 http://www.cnblog ...
- 【风马一族_php】NO0_搭建web服务器
原文来自:http://www.cnblogs.com/sows/p/5977996.html (博客园的)风马一族 侵犯版本,后果自负 安装apache apache是一种B/S结构的软件,apa ...
- 【风马一族_Android】通过菜单的点击,跳转到不同界面
---恢复内容开始--- 布局的代码:activity_main.xml <?xml version="1.0" encoding="utf-8"?> ...
- 【风马一族_xml】xmlp之dtd1
什么是XML约束? 在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法 对xml进行 ...
- 【风马一族_git_github】使用Github搭建个人网站
个人网站 访问 https://用户名.github.io ( 风马一族的Github网站 ) 搭建步骤 1)创建个人站点-->新建仓库(注:仓库名必须是[用户名.github.io]) 2) ...
- 【风马一族_C】进制转化
#include "stdio.h" #include "Math.h" #define number 50 //设置数组的长度 int num10; //十进 ...
随机推荐
- LeetCode33 Search in Rotated Sorted Array
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- hadoop2 作业执行过程之map过程
在执行MAP任务之前,先了解一下它的容器和它容器的领导:container和nodemanager NodeManager NodeManager(NM)是YARN中每个节点上的代理,它管理Hadoo ...
- IOS开发UI篇--使用CAShapeLayer实现复杂的View的遮罩效果
一.案例演示 最近在整理一个聊天的项目的时候,发送图片的时候,会有一个三角的指向效果,指向这张图片的发送者.服务端返回给我们的图片只是一张矩形的图片,我们如何把一张矩形的图片或者View,加上一层自定 ...
- EF——继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子 05 (转)
EF里的继承映射关系TPH.TPT和TPC的讲解以及一些具体的例子 本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF ...
- nodejs(一) 简单登录验证 使用mongoose 操作MongoDB
---恢复内容开始--- 开发使用webstorm 9 新建nodejs+express 项目 newfarmer 文章目录 配置Mongoose 创建目录及文件 插入数据,POST提交JSON增加 ...
- struts1.3设置编码三种方法
本文所写涉及的struts的版本是1.3x. 一.改写struts的ActionServlet. 重写process()方法: 配置相应的web.xml文件 三.通过Chain来处理: 使用cha ...
- 01. 把存储过程结果集SELECT INTO到临时表
在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种. 一. SELECT INTO 1. 使用select into会自动生成临时表,不需要事先创建 select * into #tem ...
- LeetCode 287
Find the Duplicate Number Given an array nums containing n + 1 integers where each integer is betwee ...
- spring项目中如何添加定时器以及在定时器中自动生成sprng注入对象
最近做了一个java的项目,部门领导给了一套代码让我尽快掌握,说心里话本人真心不喜欢java的这种项目方式,各种配置各种xml文件简直头都大了,下面就将我遇到的其中一个我认为是坑的地方整理出来,希望能 ...
- 表数据转换为insert语句
/* 对象:导出物理表数据为Insert语句 描述:可以传递条件精确导出sql 加条件的前提是只知道相应的字段名及类型 */ from sysobjects where name ='proc_ins ...