程序技术好文:香农熵学习+例子【转载】

简介: 程序技术好文:香农熵学习+例子【转载】

"

转自:

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, labels

def calcShannonEnt(dataSet):#传入数据集

# 在这里dataSet是一个链表形式的的数据集

countDataSet = len(dataSet) # 我们计算出这个数据集中的数据个数,在这里我们的值是5个数据集

labelCounts={} # 构建字典,用键值对的关系我们表示出 我们数据集中的类别还有对应的关系

for featVec in dataSet: #通过for循环,我们每次取出一个数据集,如featVec=【1,1,'yes'】

currentLabel=featVec【-1】 # 取出最后一列 也就是类别的//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjU5MzA2MA==.html

那一类,比如说‘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 shannonEnt

data,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://v.youku.com/v_show/id_XNjQwNjU5MTgzNg==.html

就是所包含的信息量。

//学习了!


"
image.png
相关文章
|
8月前
24考研|高等数学的基础概念定理(三)——第三章|不定积分
24考研|高等数学的基础概念定理(三)——第三章|不定积分
|
8月前
24考研|高等数学的基础概念定理(二)——第二章|导数与微分
24考研|高等数学的基础概念定理(二)——第二章|导数与微分
|
9月前
程序技术好文:等额本息PMT和PPMT推导计算公式
程序技术好文:等额本息PMT和PPMT推导计算公式
124 0
|
9月前
|
Python
程序技术好文:概率论与数理统计图式(第三章多维随机变量)
程序技术好文:概率论与数理统计图式(第三章多维随机变量)
26 0
|
存储 自然语言处理 算法
算法学习 | 从无到有,我为什么要学算法
开启算法学习之旅,对我来说,这是从无到有的过程,让我改变了原本对算法爱恨交织的态度,真是一个好的开始。
161 1
|
机器学习/深度学习 算法 知识图谱
周志华西瓜书-第五章学习总结
周志华西瓜书-第五章学习总结
周志华西瓜书-第五章学习总结
|
机器学习/深度学习
周志华西瓜书-第六章学习总结
周志华西瓜书-第六章学习总结
周志华西瓜书-第六章学习总结
|
算法
重温算法,加深理解
算法在开发中的地位我们都很清楚,但是呢实际上项目里用到的算法并不是很多,虽然不是必须但是我们还是要懂算法,理解算法,运用算法。前几年肝了很多算法,但是这玩意不经常练习就会忘记,今天就重新把算法捡起来吧。
115 0
重温算法,加深理解
|
机器学习/深度学习 算法 Python
通俗易懂!白话朴素贝叶斯
通俗易懂!白话朴素贝叶斯
336 0
通俗易懂!白话朴素贝叶斯
|
算法 机器学习/深度学习
3分钟懂线性回归预测算法(附源码)瞅一眼,懂个概念也值得
线性回归(linear-regression)预测算法C++实现
2951 0