机器学习之熵【从定义到代码】
熵的定义
- 熵(entropy)的本质是一个系统“内在的混乱程度”,原是热力学概念,被香农引用到信息论中,被称为香农熵;
- 熵在热力学中可以理解为能量转换过程中变为新状态(浪费掉的、无法再利用的)能量称为熵, 这部分能量转换会让系统的混乱度增加,熵就是系统的混乱度;如图中冰块融化为液态水,有序排列的分子吸收能量后变得无序,状态可变,系统更混乱,因此它的熵更高;
- 熵在信息论中也成为香农熵或信息熵,解决了信息的度量问题,对于某个变量(如得世界杯冠军),其不确定性越大,熵也就越大,搞清楚它所需信息量也越大。
信息量
- 所谓信息量是指从N个相等可能事件中选出一个事件所需要的信息度量或含量,也就是在辩识N个事件中特定的一个事件的过程中所需要提问"是或否"的最少次数. 如一个汉字的信息量是多少呢? 假设常用汉字1024个,那么选中每个字概率为1/1024, 信息量为10bit,没错单位就是bit比特,利用二分查找你需要询问10次可以定位这个汉字!
- 计算公式
熵的计算
- 整个概率分布对应的信息量的平均值.这个平均值就叫做随机变量x的熵
- 熵的计算公式如下: 即信息量的期望值
熵的代码实现与分析
# -*- coding: utf-8 -*- # @Time : 2018/4/19 17:04 # @Author : mjautoman # @Site : # @File : tree.py # @Software: PyCharm from math import log def calcEntropy(dataSet): numEntries = len (dataSet) labelDic = {} for vec in dataSet: currentLabel = vec[-1] # 最后一列 if not labelDic.has_key(currentLabel): labelDic[currentLabel] = 1 else: labelDic[currentLabel] += 1 entropy = 0.0 for key in labelDic: pi = float(labelDic[key]) / numEntriesentropy -= pi * log(pi,2) return entropy
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/4/19 16:53 # @Author : mjautoman # @Site : # @File : entropy.py # @Software: PyCharm from tree import calcEntropy import numpy as np import matplotlib.pyplot as plt''' 概率x服从正态分布时,对x * log2(x)在(0,1)区间积分,得到香农熵曲线图 x = np.arange(0, 1, 0.01) y = -x * np.log2(x) - (1 - x) * np.log2(1 - x) plt.plot(x, y) plt.show() ''' dataSet = [[1,1,'1'], [1,0,'3'], [0,1,'1'], [0,1,'1'], [1,1,'2'], [1,0,'1'], [0,1,'1'], [0,1,'1']] entropy = calcEntropy(dataSet) print(entropy)
- 修改dataSet 最后一列的分类结果,当全为“1”这一种分类时,得到entropy熵值为0,因为分类结果100%确定为“1”,不确定性为0;
- 修改dataSet 最后一列的分类结果,分类结果为数量相等的几类如8个“1”或4个“1”4个“2”,得到entropy熵值为3.0即log2(8),因为分类结果概率均等,不确定性最大;
- 概率x服从正态分布时,对x * log2(x)在(0,1)区间积分,得到香农熵曲线图如下,表明p=0或1时,没有不确定性,此时熵值为0,p=0.5时概率均等,熵最大
机器学习之熵【从定义到代码】相关推荐
- 机器学习--决策树(熵、信息增益(ID3)、C4.5、多方式源码实战)
谈决策树之前先做一些预备性知识: 1.什么是信息?如何衡量信息的多少?怎么衡量? 信息:从广义上讲,是事物运动时发出的信号所带来的消息,是事物存在方式和运动规律的一种表现形式.不同的事物具有不同的存在 ...
- ML与math:机器学习与高等数学基础概念、代码实现、案例应用之详细攻略——基础篇
ML与math:机器学习与高等数学基础概念.代码实现.案例应用之详细攻略--基础篇 目录 一.ML与高等数学 0.基础数学 1.导数.方向导数.梯度 1.1.概念简介 1.2.代码实现 2.Taylo ...
- 吴恩达《机器学习》学习笔记十一——神经网络代码
吴恩达<机器学习>学习笔记十一--神经网络代码 数据准备 神经网络结构与代价函数· 初始化设置 反向传播算法 训练网络与验证 课程链接:https://www.bilibili.com/v ...
- 机器学习的概率统计模型(附代码)(一)
目录 概率论 1.1 离散随机变量分布 1)伯努利分布 2)二项分布 3)泊松分布 1.2 连续随机变量分布 1)均匀分布 2)指数分布 3)正态分布 总结 系列文章目录 概率论 概率论,是研究随机现 ...
- 机器学习的概率统计模型(附代码)(二)
目录 数理统计 2.1 抽样分布 1)卡方()分布 2)t分布 3)F分布 2.2 大数定律 2.3中心极限定理 总结 系列文章目录 数理统计 数理统计是数学的一个分支,分为描述统计和推断统计. ...
- 熵的定义(很好的方法论工具尤其第三熵增益的计算)
熵的定义 https://www.cnblogs.com/wkang/p/10068475.html 信息熵与信息熵增益 https://www.cnblogs.com/dengdan890730/p ...
- 皮尔逊相关系数 定义+python代码实现 (与王印讨论公式)
皮尔逊相关系数 定义+python代码实现 (与王印讨论公式) 标签: python相关性系数皮尔逊系数 2016-10-25 20:59 153人阅读 评论(0) 收藏 举报 分类: 集体智慧编程 ...
- ML与math:机器学习与高等数学基础概念、代码实现、案例应用之详细攻略——进阶篇
ML与math:机器学习与高等数学基础概念.代码实现.案例应用之详细攻略--进阶篇 目录 人工智能数学基础综合 人工智能数学基础之高等数学 1.哈夫曼编码Huffman Coding简介及代码实现 人 ...
- 58 SD配置-科目分配-定义科目代码
业务背景:定义科目代码 事务码:SPRO SPRO路径:SPRO->销售和分销->基本功能->科目分配/成本->收入帐户确定->定义科目代码 第1步,SPRO进入 第2步 ...
最新文章
- mxmkc编译器参数!
- 【BZOJ】1574: [Usaco2009 Jan]地震损坏Damage
- 题目:三个售票员 卖出 30张票 || 多线程编程的企业级套路+模板||synchronized与Lock的区别
- 1803无法升级到2004_微软向win10 1803以后版本推送新的Edge浏览器更新 安装后不再支持直接卸载...
- 学成在线--17.我的课程
- 多层协议解析 c语言,基于DPI的应用层协议书解析.doc
- win7计算机双击空白,win7系统控制面板“打开或关闭Windows 功能”空白没有任何选项的解决方法...
- JAVA的延时函数使用
- 每天一道剑指offer-删除链表中的 重复结点
- 电商平台系统架构设计案例分析
- advanced部署vsto到wps-兼容office和wps
- 西门子atch指令详解_西门子plc指令中文详解
- chrome open axure 自动跳转到axure插件
- GlobalMapper 脚本应用(持续更新)
- Model性能相关操作:select_related
- ThingJS:次时代3D城市大屏,2款工具3分钟搭建完成!
- 网站运营中活动组织的三项注意
- 神秘的程序员头像包 第二发
- 网络安全初学者工具安装:Kali,Windows xp虚拟机,pikachu靶场,burpsuite安装配置,phpstudy安装(学习笔记)
- Android来电,显示悬浮窗