决策树-机器学习实战h5三公平台安装

决策树h5三公平台安装(h5.hxforum.com) 联系方式170618633533企鹅2952777280 源码出售 房卡出售 后台出租有意者私聊扣扣
决策树模型是一种描述对实例进行分类的树形结构,决策树由节点和有向边组成,节点有两种类型:内部节点和叶节点。内部节点表示一个特征或属性,叶节点表示一个类。
??通常决策树的学习包括3个步骤:特征选择、决策树的生成和决策树的修剪。
??特征选择:选取对训练数据具有分类能力的特征
??通常的准则是信息增益或者信息增益比

  1. 信息增益

熵:表示随机变量不确定性的度量。
??设X是一个取有限个值得离散随机变量,其概率分布为:P(X=xi)=pi,i=1,2,...n, 则X的熵定义为:H(X)=?∑ni=1pilogpi。
熵越大,随机变量的不确定性越大。
计算给定数据集的熵demo:

from math import log

def calcShannonEnt(dataSet):
#实例总数
numEntries = len(dataSet)
#创建字典
labelCounts = {}
for featVec in dataSet:
currentLabel = featVec[-1]
#记录每个类别出现的次数
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelCounts:
#计算每个类别出现的概率
prob = float(labelCounts[key])/numEntries
#计算熵
shannonEnt -= prob * log(prob,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

myDat,labels = createDataSet()
print calcShannonEnt(myDat)

输出结果:
这里写图片描述
条件熵:H(Y|X) 表示在已知随机变量X的条件下随机变量Y的不确定性。
H(Y|X)=?∑ni=1piH(Y|X=xi)。

信息增益: g(D,A)=H(D)?H(D|A)
??经验熵 H(D) 表示对数据集D进行分类的不确定性,经验条件熵H(D|A)表示在特征A给定的条件下对数据集D进行分类的不确定性。(http://yhgj8004.com) (http://www.yhgj8004.com) 两者的差为信息增益,表示由于特征A而使得对数据集D的分类不确定减少的程度。

2.划分数据集

??对每个特征划分数据集的结果计算一次信息熵, 然后判断按照哪个特征划分数据集是最好的划分方式

#按照给定的特征划分数据集
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

注意:

Python语言不用考虑内存分配问题 。

Python语言在函数中传递的是列表的引用, 在函数内部对列表对象的修改, 将会影响该列表对象的整个生存周期。为了消除这个不良影响 ,我们需要在函数的开始声明一个新列表对象。

list.extend()和 list.append()区别
这里写图片描述
执行a.append(b)结果为包含4个元素的list,其中第4个元素也是一个list;
这里写图片描述
执行a.extend(b)结果为包含6个元素的list.

??遍历整个数据集,循环计算熵和splitDataSet函数,找到最好的特征划分方式(信息增益最大的特征)。

#找到信息增益最大的特征
def chooseBestFeaToSplit(dataSet):
numFeas = len(dataSet[0])-1
#计算整个数据集的经验熵
baseEntropy = calcShannonEnt(dataSet)
bestInfoGain = 0.0
bestFeas = -1
#遍历数据集中所有特征
for i in range(numFeas):
#数据集中第i个特征值写入新的list
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
bestFeas = i
return bestFeas

结果返回第0个特征的信息增益最大:
这里写图片描述

3.构建决策树

由于特征值可能多于两个,第一次划分后数据被传递到树分支的下一个节点,在这个节点上,再次划分数据,采用递归的方式处理数据。
递归结束的条件是:遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类,如果所有实例具有相同的分类,则得到一个叶子节点。如果数据集已经处理了所有的属性,但是类标签依然不唯一,通常采用多数表决方法决定叶子节点的分类。

#多数表决
def majorityCnt(classList):
classCount = {}
#记录每个类标签出现的频率
for vote in classList:
if vote not in classCount.keys():
classCount[vote] = 0
classCount[vote] += 1
#排序字典
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]

通过递归构决策树:

#构造决策树
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 = chooseBestFeaToSplit(dataSet)
bestFeatLabel = labels[bestFeat]
#树的信息用字典存储
myTree = {bestFeatLabel: {}}
del(labels[bestFeat])

featValues = [example[bestFeat] for example in dataSet]
uniqueVals = set(featValues)
#遍历当前特征值包含的属性值
for value in uniqueVals:
    #复制类标签存储在新list
    subLabels = labels[:]
    #递归
    myTree[bestFeatLabel][value] = createTree(splitDataSet(dataSet,bestFeat,value),subLabels)
return myTree

返回嵌套字典:其中第一个关键字’no surfacing’是第一个划分的特征,第二个关键字是’no surfacing’划分的数据集,这些关键字的值为’no surfacing’的子节点,值有可能是类标签,也有可能是一个数据字典。

原文地址:http://blog.51cto.com/13588586/2065840

时间: 2024-08-30 07:23:03

决策树-机器学习实战h5三公平台安装的相关文章

微信三公平台安装微信上瘾小程序“跳一跳”撞脸 谁侵权谁尴尬

玩法也非常简单:按压手机屏幕,小橡皮人就会从这个积木块,微信三公平台安装 (h5.hxforum.com) 联系方式170618633533企鹅2952777280 (http://yhgj8004.com) (http://www.yhgj8004.com) 源码出售 房卡出售 后台出租有意者私聊扣扣跳到前方的桌子或纸箱上.只有保持按压时间恰到好处,小橡皮人才不会摔倒,连续不断地跳下去. 简单,却让人"沦陷" "我们都沦陷了." "简直让人欲罢不能.&q

决策树代码《机器学习实战》

22:45:17 2017-08-09 KNN算法简单有效,可以解决很多分类问题.但是无法给出数据的含义,就是一顿计算向量距离,然后分类. 决策树就可以解决这个问题,分类之后能够知道是问什么被划分到一个类.用图形画出来就效果更好了,这次没有学哪个画图的,下次. 这里只涉及信息熵的计算,最佳分类特征的提取,决策树的构建.剪枝没有学,这里没有. 1 # -*- oding: itf-8 -*- 2 3 ''' 4 function: <机器学习实战>决策树的代码,画图的部分没有写: 5 note:

机器学习实战读书笔记(三)决策树

3.1 决策树的构造 优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据. 缺点:可能会产生过度匹配问题. 适用数据类型:数值型和标称型. 一般流程: 1.收集数据 2.准备数据 3.分析数据 4.训练算法 5.测试算法 6.使用算法 3.1.1 信息增益 创建数据集 def createDataSet(): dataSet = [[1, 1, 'yes'], [1, 1, 'yes'], [1, 0, 'no'], [0, 1, 'no'], [0, 1, '

机器学习实战笔记3(决策树)

决策树的优势就在于数据形式非常容易理解,而kNN的最大缺点就是无法给出数据的内在含义. 1:简单概念描述 决策树的类型有很多,有CART.ID3和C4.5等,其中CART是基于基尼不纯度(Gini)的,这里不做详解,而ID3和C4.5都是基于信息熵的,它们两个得到的结果都是一样的,本次定义主要针对ID3算法.下面我们介绍信息熵的定义. 事件ai发生的概率用p(ai)来表示,而-log2(p(ai))表示为事件ai的不确定程度,称为ai的自信息量,sum(p(ai)*I(ai))称为信源S的平均信

[机器学习&amp;数据挖掘]机器学习实战决策树plotTree函数完全解析

在看机器学习实战时候,到第三章的对决策树画图的时候,有一段递归函数怎么都看不懂,因为以后想选这个方向为自己的职业导向,抱着精看的态度,对这本树进行地毯式扫描,所以就没跳过,一直卡了一天多,才差不多搞懂,才对那个函数中的plotTree.xOff的取值,以及计算cntrPt的方法搞懂,相信也有人和我一样,希望能够相互交流. 先把代码贴在这里: import matplotlib.pyplot as plt #这里是对绘制是图形属性的一些定义,可以不用管,主要是后面的算法 decisionNode

Java 8 特性介绍h5炸金花平台安装

1.简介 毫无疑问,Java 8是自Java 5(2004年)发布以来Java语言最大的一次版本升级h5炸金花平台安装(h5.hxforum.com) 联系方式170618633533企鹅2952777280 (http://yhgj8004.com) (http://www.yhgj8004.com) 源码出售  房卡出售 后台出租有意者私聊扣扣,如果不学习,你会怀疑自己面前的代码是不是Java.Java 8带来了很多的新特性,比如编译器.类库.开发工具和JVM(Java虚拟机),但最最主要的

机器学习实战之一---简单讲解决策树

机器学习实战之一---简单讲解决策树 https://blog.csdn.net/class_brick/article/details/78855510 前言:本文基于<机器学习实战>一书,采用python语言,对于机器学习当中的常用算法进行说明. 一. 综述 定义:首先来对决策树进行一个定义,决策树是一棵通过事物的特征来进行判断分支后得到该事物所需要的预测的属性的树. 流程:提取特征à计算信息增益à构建决策树à使用决策树进行预测 关键:树的构造,通过信息增益(熵)得到分支点和分支的方式.

机器学习实战教程(五):朴素贝叶斯实战篇之新浪新闻分类

原文链接: Jack-Cui,https://cuijiahua.com/blog/2017/11/ml_5_bayes_2.html 一.前言 上篇文章机器学习实战教程(四):朴素贝叶斯基础篇之言论过滤器讲解了朴素贝叶斯的基础知识.本篇文章将在此基础上进行扩展,你将看到以下内容: 拉普拉斯平滑 垃圾邮件过滤(Python3) 新浪新闻分类(sklearn) 二.朴素贝叶斯改进之拉普拉斯平滑 上篇文章提到过,算法存在一定的问题,需要进行改进.那么需要改进的地方在哪里呢?利用贝叶斯分类器对文档进行

Spark机器学习实战视频

深入浅出Spark机器学习实战(用户行为分析) 课程观看地址:http://www.xuetuwuyou.com/course/144 课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程目标  熟练掌握SparkSQL的各种操作,深入了解Spark内部实现原理  深入了解SparkML机器学习各种算法模型的构建和运行  熟练Spark的API并能灵活运用  能掌握Spark在工作当中的运用 二.适合人群  适合给,有java,scala基础,想往大数据spark机器