博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
香农熵学习+例子[转载]
阅读量:6281 次
发布时间:2019-06-22

本文共 1691 字,大约阅读时间需要 5 分钟。

转自: 

1.在决策树算法中,就是根据信息论的方法找到最合适的特征来划分数据集。在这里,我们首先要计算所有类别的所有可能值的香农熵,根据香农熵来我们按照取最大信息增益(information gain)的方法划分我们的数据集。

2.香农熵计算公式

 

3.使用的数据集

 

4.测试代码

 

# 代码功能:计算香农熵from math import log #我们要用到对数函数,所以我们需要引入math模块中定义好的log函数(对数函数)def createDataSet():    dataSet = [[1,1,'yes'],              [1,1,'yes'],              [1,0,'no'],              [0,1,'no'],              [0,1,'no']] # 我们定义了一个list来表示我们的数据集,这里的数据对应的是上表中的数据    labels = ['no surfacing','flippers']    return dataSet, labelsdef calcShannonEnt(dataSet):#传入数据集# 在这里dataSet是一个链表形式的的数据集    countDataSet = len(dataSet) # 我们计算出这个数据集中的数据个数,在这里我们的值是5个数据集    labelCounts={} # 构建字典,用键值对的关系我们表示出 我们数据集中的类别还有对应的关系    for featVec in dataSet: #通过for循环,我们每次取出一个数据集,如featVec=[1,1,'yes']        currentLabel=featVec[-1] # 取出最后一列 也就是类别的那一类,比如说‘yes’或者是‘no’        if currentLabel not in labelCounts.keys():            labelCounts[currentLabel] = 0        labelCounts[currentLabel] += 1#统计这个类别出现了多少次。    print(labelCounts) # 最后得到的结果是 {'yes': 2, 'no': 3}    shannonEnt = 0.0 # 计算香农熵, 根据公式    for key in labelCounts:        prob = float(labelCounts[key])/countDataSet        shannonEnt -= prob * log(prob,2)    return shannonEntdata,labels=createDataSet();se=calcShannonEnt(data);print(se);print(labels);

 

运行结果:

{
'yes': 2, 'no': 3}0.9709505944546686['no surfacing', 'flippers']

5.将dataset改变

dataSet = [[1,1,'yes'],              [1,1,'yes'],              [1,0,'no'],              [0,1,'no'],              [0,1,'no'],            [0,1,'maybe']] # 我们定义了一个list来表示我们的数据集,这里的数据对应的是上表中的数据

 

多加入了最后一种,运行结果:

{
'yes': 2, 'no': 3, 'maybe': 1}1.4591479170272448['no surfacing', 'flippers']

 

很明显,香农熵是增加的,因为它的含义就是所包含的信息量。

//学习了!

转载于:https://www.cnblogs.com/BlueBlueSea/p/9983415.html

你可能感兴趣的文章
爆牙齿的Web标准面试考题II(iPhone SMS/iChat UI的Web标准实现)
查看>>
XMOVE3.0手持终端——软件介绍(二):在2KB内存的单片机上实现的彩屏GUI控件库
查看>>
MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)
查看>>
找小于N 的所有质数
查看>>
Windows下的Jupyter Notebook 的介绍(写给新手)(图文详解)
查看>>
iOS开发-CocoaPods实战
查看>>
JS组件系列——Bootstrap 树控件使用经验分享
查看>>
HTML-color:rgb()-颜色渐进
查看>>
数据库实例: STOREBOOK > 表空间 > 编辑 表空间: UNDOTBS1
查看>>
Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)...
查看>>
Javascript防冒泡事件与Event对象
查看>>
managed domain与unmanaged domain
查看>>
《中国人工智能学会通讯》——11.47 领域文本中的实体链接技术
查看>>
刚毕业不久,就在人工智能上做出这样大贡献
查看>>
中国人工智能学会通讯——迎接深度学习的“大”挑战(下) 1.2 深度学习的挑战和机遇...
查看>>
不可不看!即将发布的浪潮高端存储
查看>>
锐捷工程师:深夜敲击键盘的样子,很燃
查看>>
数据中心未来的商业化系统
查看>>
《算法技术手册》一2.3 最好、最坏和平均情况下的性能分析
查看>>
LTE-Hi渐行渐近 有望打破4G深度覆盖局限
查看>>