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

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

"

转自:

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
相关文章
|
9月前
|
数据可视化
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(1)
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(1)
108 0
|
9月前
|
分布式计算 数据可视化 内存技术
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(2)
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(2)
89 0
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(2)
|
9月前
|
分布式计算 数据可视化 内存技术
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(3)
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(3)
62 0
UCB Data100:数据科学的原理和技巧:第十一章到第十二章(3)
|
4月前
|
Python
【10月更文挑战第11天】「Mac上学Python 21」小学奥数篇7 - 二元一次方程组求解
本篇将通过 Python 和 Cangjie 双语讲解如何求解二元一次方程组。通过这道题,学生将学会如何使用代数方法和编程逻辑求解方程组中的未知数。
111 1
|
8月前
|
Python
程序技术好文:概率论与数理统计图式(第三章多维随机变量)
程序技术好文:概率论与数理统计图式(第三章多维随机变量)
23 0
|
8月前
程序技术好文:等额本息PMT和PPMT推导计算公式
程序技术好文:等额本息PMT和PPMT推导计算公式
120 0
|
算法
Plant(快速幂+数学分析(没想到吧,数学无处不在))
Plant(快速幂+数学分析(没想到吧,数学无处不在))
81 0
|
机器学习/深度学习 数据采集 算法
乳腺癌预测的黑科技!一起探索 R 语言和随机森林算法的奇妙之处!
本文旨在综述R语言和随机森林算法在乳腺癌研究中的应用,探讨其在乳腺癌预测、诊断和个性化治疗中的作用。通过对相关文献和实例的分析,该研究将提供关于使用R语言和随机森林算法改进乳腺癌研究的新见解,并对未来的发展方向和挑战进行讨论。
263 0
|
算法
算法为什么这么难学
算法为什么这么难学
213 0
|
机器学习/深度学习 人工智能 算法
ELM超限学习机:填补罗森布拉特的神经网络梦想和冯·诺依曼对生物学习困惑之间的空白
摘要:本文总结被神经网络前辈和著名经济学家 Halbert White 认为「Sexy」的超限学习机(Extreme Learning Machines, ELM)的「Sexy」之处和之所以被称为「超限学习机(ELM)」的原因。在超限学习机的理论框架下,机器(Machine, Devices, Sensors)和生物脑可以看成一致的,只是构造的基本材料和硬件不同而已。有机的「机器」(生物学习系统)也有千万种,并且还在一直自我演化。但我们坚信两者之间可以拥有一个共同的「基本粒子」级(或称为「基本单元」级)的学习结构和学习算法,那就是超限学习机。
472 0
ELM超限学习机:填补罗森布拉特的神经网络梦想和冯·诺依曼对生物学习困惑之间的空白