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

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

"

转自:

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月前
|
算法 开发者 Python
惊呆了!Python算法设计与分析,分治法、贪心、动态规划...这些你都会了吗?不会?那还不快来学!
【7月更文挑战第10天】探索编程巅峰,算法至关重要。Python以其易读性成为学习算法的首选。分治法,如归并排序,将大问题拆解;贪心算法,如找零问题,每步求局部最优;动态规划,如斐波那契数列,利用子问题解。通过示例代码,理解并掌握这些算法,提升编程技能,面对挑战更加从容。动手实践,体验算法的神奇力量吧!
95 8
|
5月前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
225 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
4月前
|
算法
”回溯算法“框架及练习题
”回溯算法“框架及练习题
64 0
|
8月前
|
算法 索引 Python
逆袭算法界!Python分治法、贪心算法、动态规划深度剖析,带你走出算法迷宫!
【7月更文挑战第8天】分治法,如快速排序,将大问题分解并合并解;贪心算法,选择局部最优解,如活动选择;动态规划,利用最优子结构避免重复计算,如斐波那契数列。Python示例展示这些算法如何解决实际问题,助你精通算法,勇闯迷宫。
73 1
|
9月前
|
数据可视化
程序技术好文:欧几里得空间
程序技术好文:欧几里得空间
58 0
|
9月前
|
Python
程序技术好文:概率论与数理统计图式(第三章多维随机变量)
程序技术好文:概率论与数理统计图式(第三章多维随机变量)
26 0
|
网络协议 定位技术 数据处理
第1章 计算机网络的基本概念练习题答案(第三版)
第1章 计算机网络的基本概念练习题答案(第三版)
236 0
|
算法 C语言 索引
算法为何重要(《数据结构与算法图解》by 杰伊•温格罗)(下)
算法为何重要(《数据结构与算法图解》by 杰伊•温格罗)
152 0
|
人工智能 Python
Python100道题从“无”到“有”,每日监督打卡学习第四期:31-40题,思路分享+心路历程
Python100道题从“无”到“有”,每日监督打卡学习第四期:31-40题,思路分享+心路历程
190 0
|
程序员 编译器 C语言
第六章 循环《C语言程序设计现代方法(第2版)》读书笔记(二)
第六章 循环《C语言程序设计现代方法(第2版)》读书笔记(二)
第六章 循环《C语言程序设计现代方法(第2版)》读书笔记(二)