决策树的一般流程

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

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

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

  1. python决策树算法代码_Python3.0 实现决策树算法的流程

    决策树的一般流程 检测数据集中的每个子项是否属于同一个分类 if so return 类标签 Else 寻找划分数据集的最好特征 划分数据集 创建分支 节点 from math import log ...

  2. python实现决策树数据直接赋值导入_决策树在python中的数据实现

    我为python决策树算法实现完成了以下代码:from csv import reader def load_csv(filename): file = open(filename, "rb ...

  3. python决策树 value_机器学习 | 算法笔记(四)- 决策树算法以及代码实现

    概述 上一篇讲述了<机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现>,本篇讲述机器学习算法决策树,内容包括模型介绍及代码实现. 决策树 决策树(Decision Tree)在机 ...

  4. python上传数据到坚果云_django开发环境搭建(参考流程)

    对于一个初学者,在实际的开发环境中,应该采用什么的样的工具来开发django呢? 我想环境至少应该具备的特性有: 多版本python环境的支持 版本控制 自动测试框架 数据库支持迁移 部署的自动化 参 ...

  5. Python之pandas数据加载、存储

    Python之pandas数据加载.存储 0. 输入与输出大致可分为三类: 0.1 读取文本文件和其他更好效的磁盘存储格式 2.2 使用数据库中的数据 0.3 利用Web API操作网络资源 1. 读 ...

  6. 数据分享|PYTHON用决策树分类预测糖尿病和可视化实例

    全文下载链接:http://tecdat.cn/?p=23848 在本文中,决策树是对例子进行分类的一种简单表示.它是一种有监督的机器学习技术,数据根据某个参数被连续分割.决策树分析可以帮助解决分类和 ...

  7. Python 批量处理 Excel 数据后,导入 SQL Server

    作者 | 老表 来源 | 简说Python 1.前言 2.开始动手动脑 2.1 拆解+明确需求 2.2 安装第三方包 2.3 读取excel数据 2.4 特殊数据数据处理 2.5 其他需求 2.6 完 ...

  8. python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案

    [问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...

  9. python处理完数据导入数据库_python操作数据库之批量导入

    python操作数据库之批量导入 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的 ...

最新文章

  1. ListView和RecyclerView的Adapter封装
  2. C#中的三种timer
  3. tomcat架构分析(valve机制)【转】
  4. USACO Training Section 1.2 双重回文数 Dual Palindrom
  5. cad指定服务器名称,配置网络许可服务器 | AutoCAD 2022 | Autodesk Knowledge Network
  6. Python_list部分功能介绍
  7. [翻译]AKKA笔记 - DEATHWATCH -7
  8. linux向脚本传递参数,Linux 使用位置变量向脚本传递参数
  9. LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)
  10. terminated 线程_一个 Java 线程生命周期,我竟然可以扯半小时
  11. 洛谷 P1168 中位数(优先队列)
  12. Android error: “Apostrophe not preceded by \” 解决办法
  13. href传中文参数乱码问题
  14. SAP ABAP ASSIGNED 用法
  15. NFT会接力Defi,成为下一个热点么?
  16. 解决国内 github.com 打不开的最最最准确方法
  17. 使用电子签章确立区块链电子发票的法律效力
  18. html5如何实现拖拽,HTML5 如何实现拖放
  19. android6.0 添加电量百分比
  20. 上海医保系统的三重保障

热门文章

  1. RedHat Enterprise AS4安装步骤
  2. 华为防火墙Edumon1000E配置
  3. oracle实现id自增和设置主键
  4. python 月报_python实践--月报分析之获取jira缺陷数据
  5. python中队列的应用用场景_消息队列应用场景
  6. 如何快速掌握python包_如何快速掌握一个python模块?
  7. 西安石油大学计算机基础考试试题,2017年西安石油大学计算机学院824计算机组成原理考研题库...
  8. [转载] Python3十大经典错误及解决办法
  9. java 方法 示例_Java语言环境getDisplayCountry()方法与示例
  10. 达芬奇linux 与win,抛弃Linux:达芬奇软件WIN版安装及设置.doc