python实现决策树数据直接赋值导入_Python3.0 实现决策树算法的流程

决策树的一般流程

检测数据集中的每个子项是否属于同一个分类

if so return 类标签

Else

寻找划分数据集的最好特征

划分数据集

创建分支 节点

from math import log

import operator

#生成样本数据集

def createDataSet():

dataSet = [[1,1,'yes'],

[1,1,'yes'],

[1,0,'no'],

[0,1,'no'],

[0,1,'no']]

labels = ['no surfacing','flipper']

return dataSet,labels

# 计算香农熵 香农 大神必须要膜拜啊,信息界的根目录人物啊

# no surfacing 指的是 不浮出水面能否生存 1 标识 是 0 指的是否

# flipper 指的是是否有脚

# yes no指的是否是鱼类

def calcShannonEnt(dataSet):

numEntries = len(dataSet) # 用上面的createDataSet dataSet 这个值就是5

#定义标签字典

labelCounts = {}

# 为所有可能的分类创建字典

for featVec in dataSet:

currentLabel = featVec[-1] #这个-1指的是去取最后一个维度 对应数据dataSet 这里取的是yes和no

if currentLabel not in labelCounts.keys():

# 如果当前分类标签不在 标签字典中

labelCounts[currentLabel] = 0

# 其他情况 分类标签分类加1

labelCounts[currentLabel] += 1

#定义香农熵 以2为底数求对数

shannonEnt = 0.0

for key in labelCounts:

#计算 yes 或者No 出现的概率

pro = float(labelCounts[key])/numEntries

# 计算香农熵

shannonEnt -= pro*log(pro,2)

return shannonEnt

#dataSet是待划分的数据集, 划分数据集的特征 axis 特征的返回值value

#最后是创建了一个新的列表对象

def splitDataSet(dataSet, axis , value):

# 创建新list对象

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):

# len(dataSet[0])是计算这一行有多少列,即有多少个特征值

numFeatures = len(dataSet[0])-1 # -1 是最后一个特征值就不要记录在内了,算baseEntrop的时候已经算了最后一个特征值yes no

baseEntropy = calcShannonEnt(dataSet)

bestInfoGain = 0.0

bestFeature = -1

for i in range(numFeatures):

#创建唯一的分类标签列表 也就是说提取dataSet每一行第i个值 就提取dat

featList = [example[i] for example in dataSet]

# 取出有几种特征值

uniqueVals = set(featList)

newEntropy = 0.0

for value in uniqueVals:

#创建特征值的子数据集

subDataSet = splitDataSet(dataSet,i, value)

#计算该特征值数据对总数在数据对总数出现的概率

pro = len(subDataSet)/float(len(dataSet))

#计算分割出来的子集香农熵

newEntropy += pro*calcShannonEnt(subDataSet)

#计算信息增益 得到最好的特征值 这个理论是这样的g(D,A) = H(D)-H(D/A)

infoGain = baseEntropy-newEntropy

#取出最大的信息增益,此时特征值最大

if(infoGain >bestInfoGain):

bestInfoGain = infoGain

bestFeature = i

return bestFeature

'''

#构建决策树是根据特征值的消耗来计算的,如果后面的特征值已经全部用完了

但是还没有分出结果,这个时候就需要使用多数表决方式计算节点分类

最后返回最大的分类

'''

def majorityCnt(classList):

# 分类的字典

classCount = {}

for vote in range(classList):

#如果不在 分类字典中

if vote not in classCount.keys(): classCount[vote] = 0

classCount[vote] += 1

# 根据出现的次数大到小排序

sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)

return sortedClassCount[0][0]

#创建决策树

def createTree(dataSet, labels):

# 获取数据样本每组最后一组的特征值 这里是yes,no

classList = [example[-1] for example in dataSet]

# 如果说这个classList 全部都是 yes 或者全部是no 那肯定子返回yes 或者no

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:{}}

# 删除labels中的一特征值

del(labels[bestFeat])

#找到特征值那一列

featValues = [example[bestFeat] for example in dataSet]

uniqueVals = set(featValues)

for value in uniqueVals:

# labels列表的赋值

subLabels = labels[:]

myTree[bestFeatLabel][value]=createTree(splitDataSet(dataSet,bestFeat,value),subLabels)

return myTree

dataSet,lables = createDataSet()

shannonEnt= calcShannonEnt(dataSet)

my = createTree(dataSet,lables)

print(my)

总结

以上所述是小编给大家介绍的Python3.0 实现决策树算法的流程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本文标题: Python3.0 实现决策树算法的流程

本文地址: http://www.cppcns.com/jiaoben/python/267738.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux oracle em使用,Linux平台下启动oracle 11g EM控制台

http://blog.csdn.net/webajax/article/details/6702233配置EM具体步骤一、配置EM dbconsole的步骤信息emca -config dbcontrol db -repos recreateEMCA 开始于 2007-10-12 11:16:40EM Configuration Assistant 10.2.0.1.0 正式版版权所有 (c) 2003, 2005, Oracle。保留所有权利…

源码里没有configure_深入源码理解.NET Core中Startup的注册及运行

开发.NET Core应用,直接映入眼帘的就是Startup类和Program类,它们是.NET Core应用程序的起点。通过使用Startup,可以配置化处理所有向应用程序所做的请求的管道,同时也可以减少.NET应用程序对单一服务器的依赖性,使我们…

天龙源码框架分析_天龙八部源码描述【转】

天龙八部(武侠世界)的源码很可能是天龙八部代码流出后改写的,因为在看了代码中可以找到一些证据,整个客户端分为:一个是编辑器,一个是客户端,采用OGREcegui自写的简单的物理碰撞检测FMOD自写的网络库。服务器端代码目前…

oracle查询慢怎么优化,Oracle查询优化-怎样建立索引优化下面的查询语句啊

下面是转换出来的查询语句SELECT *FROM (SELECT "Project1"."C1" AS "C1","Project1"."ID" AS "ID","Project1"."NVC_ORDERBY" AS "NVC_ORDERBY","Project1"."I_ST…

复试情报准备

英语自我介绍,介绍完老师会根据你的回答用英语问你问题,比如介绍一下你的本科学校,或者家乡什么的。计网过一遍,会问两道题。接下来是重点,我当时是根据我成绩单,问了我本科学过的科目,比如pyth…

chrome切换前端模式_Chrome调试工具developer tool技巧 - 轩枫阁

Chrome这个浏览器赞的不能再赞了,给前端的开发调试工作带来了极大的效率提升。Chrome的简洁、快速吸引了无数人,它的启动速度、页面解析速度都很快,同时得益于Google V8的快速,Javascript执行速度也飞快。而且它对HTML5和CSS3的支…

oracle创建索引01652,建立数据表快照导致ora-01652异常

建立数据表快照导致ora-01652错误由于源表过大,数据查询速度较慢,在做后台的相关查询的时候较慢,于是决定创建数据快照,提高查询速度,快照创建语句如下:CREATE SNAPSHOT sn_ydmobilebankREFRESH COMPLETE S…

linux上安装python2.6.9_在Linux CentOS 6.6上安装Python 2.7.9

CentOS 6.6自带的是Python 2.6.6,而编译llvm需要Python 2.7以上。checking for python... /usr/bin/pythonchecking for python > 2.7... not foundconfigure: error: found python 2.6.6 (/usr/bin/python); required > 2.7yum中最新的也是Python 2.6.6&…

用python批量下载网络图片_python 批量下载网页里的图片

import requests import sys,re #设置提取图片url 的正则表达式 imgre re.compile(r" #存放找到的 图片url的列表 all_img_urls [] #图片下载后存放位置 save_path r‘/root‘ #获取指定网页中的图片url def get_img_url(tmpurl,tmpre,allimgurl,timeout10): headers …

php中cnum函数,PHP vprintf() 函数

更多实例例子 1使用格式值 %f&#xff1a;<?php $num1 123;$num2 456;vprintf("%f%f",array($num1,$num2));?>例子 2使用占位符&#xff1a;<?php $number 123;vprintf("有两位小数&#xff1a;%1\$.2f没有小数&#xff1a;%1\$u",array($n…

alter table add column多个字段_利用Python将多个excel合并到一个文件中

数据岗位的小伙伴可能经常会遇到这样一个问题&#xff1a;多个来源返回的数据怎么整合到一个文件中&#xff1f;手动经常会出错&#xff0c;下面介绍一种利用Python处理的方式&#xff1a;前期准备&#xff1a;1、多个excel需要进行数据整理&#xff0c;保证文件的结构一致&…

单链表操作实现getelem_c语言实现--带头结点单链表操作

可能是顺序表研究的细致了一点&#xff0c;单链表操作一下子就实现了。这里先实现带头结点的单链表操作。大概有以下知识点.1;结点&#xff1a;结点就是单链表中研究的数据元素&#xff0c;结点中存储数据的部分称为数据域&#xff0c;存储直接后继地址的部分称为指针域。2;结点…

php ouput buffer,Redis配置详解-客户端缓冲区 output buffer

客户端缓冲区 output buffer大概已经知道Redis是一个内存数据库&#xff0c;这意味着所有的数据都由RAM直接管理和提供的。因此Redis有着卓越的交付性能&#xff0c;Redis可以以亚毫秒级的延迟处理几万、几十万的请求。Redis&#xff0c;如同它的名字和设计&#xff0c;是一个移…

python布尔测试_Python布尔函数:用真值优化代码

Python布尔类型是Python的内置数据类型之一。它用来表示表达式的真实值。例如&#xff0c;表达式1<2为True&#xff0c;而表达式01为False。了解Python布尔值的行为对于在Python中良好编程是非常重要的。Python布尔类型Python布尔类型只有两个可能的值&#xff1a;TrueFalse…

结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?

作者&#xff1a;Tarun Telang 来源&#xff1a;https://dzone.com/articles/arraylist-or-linkedlist本文为Java开发人员选择适当的顺序数据结构提供指导。ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口…

python 公开课_python公开课视频(11~20)

Python基础教程视频教程 各集内容简介 通俗易懂&#xff0c;语言简练&#xff0c;保证入门。 11. Python基础教程视频教程 第 11 集 Python的分支语句if基础 本集主要讲述Python条件分支语句if的基本使用和语法结构&#xff0c;if嵌套和多分支if语句程序设计等问题。 12. Pytho…

oracle 随机排列,oracle的随机排序

oracle的随机排序项目里一个功能要用到随机排序&#xff0c;但是后来又因为数据量大的原因&#xff0c;要分页去查询数据&#xff0c;结果导致查询出来的数据出现重复。原sql如下select * from ( select row_.*, rownum rownum_ from(select * from tble order by dbms_random.…

c# 低功耗蓝牙_c# - 如何使用C#手动绑定到WinForm中的蓝牙低能耗设备? - 堆栈内存溢出...

我想到了。 我走在正确的轨道上。使用以下连接后&#xff1a;var dev await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);您需要执行自定义配对&#xff1a;var prslt await device.DeviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds…

python字典求平均值_Python - 字典中各个键的每个值的均值

我在跨整个字典进行迭代时遇到问题&#xff0c;无法对键的值中的每个元素进行简单的汇总统计&#xff08;平均值&#xff09;。Python - 字典中各个键的每个值的均值 我的字典由那些号码清单键和值&#xff1a; test_dict{NJ:[20,50,70,90,100],NY:[10,3,0,99,57],CT:[90,1000,…

数字填图问题matlab上机实验报告,数学建模实验报告数字填图问题

数字填图问题一、实验目的及意义本实验旨在通过生活中几个常见的数字填图问题的探究&#xff0c;探究这类问题的逻辑推理解法和计算机解法&#xff0e;二、实验内容1. 数字填图的逻辑推理&#xff1b;2. 数字填图的计算机解法。三、实验步骤1.开启软件平台——MA TLAB&#xff…