由于上一例的实现中只针对了离散数据,为了扩充处理范围,我实现了一下对线性数据的简单处理,在其中我选择用中位数作为指标,平均数、众数等等其他数据在我看来异曲同工,最终也都会有较相似的结构。

  • 求连续数据的香农熵
def calcLinerData(dataSet):
num=len(dataSet)
count={1:0,0:0}
shannonEnt=0.0
for i in range(num):
feature = [ example[-1] for example in dataSet]
feature2 = sorted( feature )
flag = feature[int(num/2)]
for i in range(num):
if feature[i]>= flag:
feature[i]=1
count[1]+=1
else:
feature[i]=0
count[0]+=1
for i in [0,1]:
prob = float(count[i])/num
shannonEnt -= prob * log(prob,2)
return shannonEnt

与离散数据的处理极其相似,不过在我看来使用上并不会太多,毕竟我们在分类的时候一般不会还是在用如此繁琐连续的数据进行比对。

简单来说,就是建立一个字典,把通过指标分类的数据分别计数(在这里是大于等于指标一类,剩余为另一类),最后再使用计算香农熵的方法正常计算,变化并不大,只是有了中间一步分类的过度。

  • 求连续数据指标:中位数
def getLinerFlag(dataSet,axis):
num=len(dataSet)
for i in range(num):
feature = [ example[axis] for example in dataSet]
feature2 = sorted( feature )
flag = feature[int(num/2)]
return flag

这个函数并不重要启示,毕竟实际上有更多更好的衡量分类指标,这里只是一个简单和偷懒的衡量方法。其他方法在我看来整体结构上应该类似,可能只是公式不同。

  • 线性划分
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 chooseLinerSplit(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
if len(uniqueVals)>5:
f=getLinerFlag(dataSet,i)
datah,datal=LinerSplit(dataSet,i,f)
newEntropy = len(datal)/float(len(dataSet))*calcShannonEnt(datah)+\
len(datah)/float(len(dataSet))*calcShannonEnt(datal)
else:
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

毕竟离散数据连续数据混用应该是常态,这里我索性就综合的进行了架构。其中我对于连续以及离散的判断非常简单,就是一个属性的分类如果超过了5个,就判定为线性(或者说还得是数字?),可能不是那么的科学,不过...先这样吧。

f=getLinerFlag(dataSet,i)
datah,datal=LinerSplit(dataSet,i,f)
newEntropy = len(datal)/float(len(dataSet))*calcShannonEnt(datah)+\
len(datah)/float(len(dataSet))*calcShannonEnt(datal)

理解起来应该也非常通俗易懂,先求得大于等于以及小于划分指标的两个集合,之后计算此划分的香农熵,就可以正常比对了。

Python实现——决策树(部分函数/连续数据)的更多相关文章

  1. Python实现——决策树实例(离散数据/香农熵)

    决策树的实现太...繁琐了. 如果只是接受他的原理的话还好说,但是要想用代码去实现比较糟心,目前运用了<机器学习实战>的代码手打了一遍,决定在这里一点点摸索一下该工程. 实例的代码在使用上 ...

  2. Python 数据处理之对 list 数据进行数据重排(为连续的数字序号)

    Python 数据处理之对 list 数据进行数据重排(为连续的数字序号) # user ID 序号重新排,即,原来是 1,3,4,6 ,排为 1,2,3,4 # item ID 序号重新排,too ...

  3. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

  4. python操作txt文件中数据教程[2]-python提取txt文件

    python操作txt文件中数据教程[2]-python提取txt文件中的行列元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果-将txt中元素提取并保存在c ...

  5. Python调用matplotlib实现交互式数据可视化图表案例

    交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...

  6. python利用决策树进行特征选择

    python利用决策树进行特征选择(注释部分为绘图功能),最后输出特征排序: import numpy as np import tflearn from tflearn.layers.core im ...

  7. 用python+sklearn(机器学习)实现天气预报数据 模型和使用

    用python+sklearn机器学习实现天气预报 模型和使用 项目地址 系列教程 0.前言 1.建立模型 a.准备 引入所需要的头文件 选择模型 选择评估方法 获取数据集 b.建立模型 c.获取模型 ...

  8. 使用Python将Excel中的数据导入到MySQL

    使用Python将Excel中的数据导入到MySQL 工具 Python 2.7 xlrd MySQLdb 安装 Python 对于不同的系统安装方式不同,Windows平台有exe安装包,Ubunt ...

  9. Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据

    背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...

随机推荐

  1. 关于python3 发送邮件

    一:发送文本信息 from email.mime.text import MIMEText from email.header import Header from smtplib import SM ...

  2. 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 2——逻辑回归

    作业说明 Exercise 2,Week 3,使用Octave实现逻辑回归模型.数据集  ex2data1.txt ,ex2data2.txt 实现 Sigmoid .代价函数计算Computing ...

  3. 22-从零玩转JavaWeb-代码块

    配套详解视频 局部代码块与初始化代码块 面向对象-静态代码块 代码块总结 组合关系与类的加载 静态代码块及字段初始化练习 一.什么是代码块 在类中或方法当中 使用{}括起来的一段代码 就称它是一个代码 ...

  4. Linux awk&sed

    awk AWK是强大的文本处理工具,擅长对日志文件迚行快速分析. 它丌仅用亍 Linux ,也是任何环境中现有的功能最强大的数据处理引擎之一. 名称得自亍它的发明者 Alfred Aho .Pet ...

  5. iOS与HTML5交互方法总结(修正)

    摘要 看了不少别人写的博客或者论坛,关于iOS与HTML5交互方法大概主要有5种方式: 1. 利用WKWebView进行交互(系统API) 2. 利用UIWebView进行交互(系统API) 3. 苹 ...

  6. Python PyPI中国镜像

    from:http://blog.makto.me/post/2012-11-01/pypi-mirror from:http://www.pypi-mirrors.org/ from:http:// ...

  7. 类型或命名空间名称“Interop”在类或命名空间“Microsoft.Office”中不存在(是否缺少程序集引用?)

    准备用C#编写Web程序,生成Excel报表,在使用下面语句时报错. using Microsoft.Office.Interop.Excel; 报错信息:类型或命名空间名称“Interop”在类或命 ...

  8. 基于Ubuntu16搭建Hadoop大数据完全分布式环境

    [目的]:学习大数据 在此记录搭建大数据的过程. [系统环境] 宿主机操作系统:Win7 64位 虚拟机软件:Vmware workstation 12 虚拟机:Ubuntu 16 64位桌面版 [步 ...

  9. 黑盒测试实践--Day7 12.1

    黑盒测试实践--Day7 12.1 今天完成任务情况: 录制小组作业中的自动化测试工具实践视频 汇总大家提交的各种作业模块,打包完成小组共同作业 小组成员完成个人情况说明后在截止时间前分别提交作业 小 ...

  10. javascript总结13:循环语句

    1 While循环 While(条件表达式){ 只要条件表达式结果为true,循环一直执行,当条件表达式结果为false的时候,循环终止 } While循环语句需现在循环体外定义变量. 2 for循环 ...