""

"""

import numpy as np

from math import log

import operator

import json

#生成海洋生物数据

def createData():

data = [[1,1,'yes'],

[1,1,'yes'],

[1,0,'no'],

[0,1,'no'],

[0,1,'no']]

labels=['不浮出水面可生存','脚蹼']

return data, labels

#生产西瓜数据

# =============================================================================

# 色泽: 浅白 青绿 乌黑

# 根蒂: 蜷缩 稍蜷 硬挺

# 敲声: 浊响 沉闷 清脆

# 纹理: 清晰 稍糊 模糊

# 脐部: 凹陷 稍凹 平坦

# 触感: 硬滑 软粘

# =============================================================================

def createWatermelonData():

data = [['青绿','蜷缩','浊响','清晰','凹陷','硬滑','好'],

['乌黑','蜷缩','沉闷','清晰','凹陷','硬滑','好'],

['乌黑','蜷缩','浊响','清晰','凹陷','硬滑','好'],

['青绿','蜷缩','沉闷','清晰','凹陷','硬滑','好'],

['浅白','蜷缩','浊响','清晰','凹陷','硬滑','好'],

['青绿','稍蜷','浊响','清晰','稍凹','软粘','好'],

['乌黑','稍蜷','浊响','稍糊','稍凹','软粘','好'],

['乌黑','稍蜷','浊响','清晰','稍凹','硬滑','好'],

['乌黑','稍蜷','沉闷','稍糊','稍凹','硬滑','坏'],

['青绿','硬挺','清脆','清晰','平坦','软粘','坏'],

['浅白','硬挺','清脆','模糊','平坦','硬滑','坏'],

['浅白','蜷缩','浊响','模糊','平坦','软粘','坏'],

['青绿','稍蜷','浊响','稍糊','凹陷','硬滑','坏'],

['浅白','稍蜷','沉闷','稍糊','凹陷','硬滑','坏'],

['乌黑','稍蜷','浊响','清晰','稍凹','软粘','坏'],

['浅白','蜷缩','浊响','模糊','平坦','硬滑','坏'],

['青绿','蜷缩','沉闷','模糊','稍凹','硬滑','坏']]

labels=['色泽','根蒂','敲声','纹理','脐部','触感']

return data, labels

#计算熵

def calcEnt(data):

num = len(data)

labelCounts = {}

for item in data:

label = item[-1]

if label not in labelCounts.keys():labelCounts[label] = 0

labelCounts[label] += 1

ent = 0

for key in labelCounts:

prob = labelCounts[key]*1.0/num

ent -= prob * log(prob,2)

return ent

#划分数据 根据某一特征axis 取出该特征某一特定值value的数据

def splitData(dataSet,axis,value):

retData=[]

for item in dataSet:

if item[axis]==value:

newItem = item[:axis]

newItem.extend(item[axis+1:])

retData.append(newItem)

return retData

#从特种中选择最好的方式 增益最高

def chooseBestFeature(dataSet):

numFeat = len(dataSet[0]) - 1

## 初始化 信息熵 最佳信息增益 最佳特征

baseEnt = calcEnt(dataSet)

bestGain = 0

bestFeat = -1

for i in range(numFeat):

##获取第i个特征的所有取值

uniFeats = set([item[i] for item in dataSet])

newEnt = 0

##计算按第i个特征分类的熵

for value in uniFeats:

##第i个特征值 外汇常见问题的概率

subData = splitData(dataSet,i,value)

prob = float(len(subData))/len(dataSet)

newEnt += prob * calcEnt(subData)

gain = baseEnt - newEnt

if gain>bestGain:

bestGain = gain

bestFeat = i

return bestFeat

## 返回类别最高的分类

def majorityCnt(classList):

classCount={}

for vote in 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):

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

##只包含一种分类 返回该分类

if len(set(classList))==1:

return classList[0]

if len(dataSet[0])==1:

return majorityCnt(classList)

bestFeat = chooseBestFeature(dataSet)

bestFeatLabel = labels[bestFeat]

##以最佳分类标签为节点 以字典形式保存

myTree={bestFeatLabel:{}}

del(labels[bestFeat])

uniFeats = set([item[bestFeat] for item in dataSet])

for value in uniFeats:

subLabels = labels[:]

##根据不同的value 继续建立子分支

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

return myTree

data,labels = createWatermelonData()

ret=createTree(data,labels)

print(json.dumps(ret,sort_keys=True, indent=2,ensure_ascii=False))

{

"纹理": {

"模糊": "坏",

"清晰": {

"根蒂": {

"硬挺": "坏",

"稍蜷": {

"色泽": {

"乌黑": {

"触感": {

"硬滑": "好",

"软粘": "坏"

}

},

"青绿": "好"

}

},

"蜷缩": "好"

}

},

"稍糊": {

"触感": {

"硬滑": "坏",

"软粘": "好"

}

}

}

}

原文链接:https://blog.csdn.net/zkt286468541/article/details/103372686

决策树(Decision Tree)算法 python简单实现的更多相关文章

  1. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  2. 数据挖掘 决策树 Decision tree

    数据挖掘-决策树 Decision tree 目录 数据挖掘-决策树 Decision tree 1. 决策树概述 1.1 决策树介绍 1.1.1 决策树定义 1.1.2 本质 1.1.3 决策树的组 ...

  3. GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法

    GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...

  4. (ZT)算法杂货铺——分类算法之决策树(Decision tree)

    https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html 3.1.摘要 在前面两篇文章中,分别介绍和讨论了朴素贝叶斯分 ...

  5. 决策树decision tree原理介绍_python sklearn建模_乳腺癌细胞分类器(推荐AAA)

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  6. 用于分类的决策树(Decision Tree)-ID3 C4.5

    决策树(Decision Tree)是一种基本的分类与回归方法(ID3.C4.5和基于 Gini 的 CART 可用于分类,CART还可用于回归).决策树在分类过程中,表示的是基于特征对实例进行划分, ...

  7. 机器学习方法(四):决策树Decision Tree原理与实现技巧

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面三篇写了线性回归,lass ...

  8. 决策树Decision Tree 及实现

    Decision Tree 及实现 标签: 决策树熵信息增益分类有监督 2014-03-17 12:12 15010人阅读 评论(41) 收藏 举报  分类: Data Mining(25)  Pyt ...

  9. 机器学习-决策树 Decision Tree

    咱们正式进入了机器学习的模型的部分,虽然现在最火的的机器学习方面的库是Tensorflow, 但是这里还是先简单介绍一下另一个数据处理方面很火的库叫做sklearn.其实咱们在前面已经介绍了一点点sk ...

随机推荐

  1. 2019年React学习路线图

    作者|javinpaul 译者|无明 之前我们已经介绍了 2019 年 Vue 学习路线图,而 React 作为当前应用最广泛的前端框架,在 Facebook 的支持下,近年来实现了飞越式的发展,我们 ...

  2. jQuery遍历之向上遍历

    1.parent $(document).ready(function(){ $("a").parent().css({border:"4px solid black&q ...

  3. css 设置背景图片透明

    最终效果: 背景图片css不变,再背景图片的里层元素设置css样式即可 opacity:0.4; filter:alpha(opacity=40); /* 针对 IE8 以及更早的版本 */

  4. ambari安装hadoop

    前言 hadoop除了社区版之外,还有两个主流的分支,一个是cdh版本,一个是hdp版本,其中ambari是hdp版本的部署工具 1.ambari安装准备 https://docs.hortonwor ...

  5. shell 逐行比较两个文件的内容是否一样(行数相同)

    file1="1.txt" file2="2.txt" lines=`cat $file1 | wc -l` ;i<=$lines;i++)) do li ...

  6. vue实现前后台交互

    首先需要前台先安装一个包 cnpm install axios --save 第二还需要解决跨域问题 在settings中添加一条中间件 MIDDLEWARE = [“corsheders.middl ...

  7. AcWing 231. 天码 (容斥)打卡

    题目:https://www.acwing.com/problem/content/233/ 题意:给你n个不同的数,让你选取一个四元组,gcd为1,让你求这样的四元组数量是多少 思路:我们单独直接去 ...

  8. 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】05、Shiro集成

    1.POM文件中加入Shiro和fastJSON依赖 <dependency> <groupId>org.apache.shiro</groupId> <ar ...

  9. 94、tensorflow实现语音识别0,1,2,3,4,5,6,7,8,9

    ''' Created on 2017年7月23日 @author: weizhen ''' #导入库 from __future__ import division,print_function,a ...

  10. VTemplate模板引擎的使用--进阶篇

    1.<vt:template>与<vt:include>标签的不同 <vt:template>和<vt:include> 标签都包含file属性,如果这 ...