熵的定义

  • 熵(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时概率均等,熵最大

机器学习之熵【从定义到代码】相关推荐

  1. 机器学习--决策树(熵、信息增益(ID3)、C4.5、多方式源码实战)

    谈决策树之前先做一些预备性知识: 1.什么是信息?如何衡量信息的多少?怎么衡量? 信息:从广义上讲,是事物运动时发出的信号所带来的消息,是事物存在方式和运动规律的一种表现形式.不同的事物具有不同的存在 ...

  2. ML与math:机器学习与高等数学基础概念、代码实现、案例应用之详细攻略——基础篇

    ML与math:机器学习与高等数学基础概念.代码实现.案例应用之详细攻略--基础篇 目录 一.ML与高等数学 0.基础数学 1.导数.方向导数.梯度 1.1.概念简介 1.2.代码实现 2.Taylo ...

  3. 吴恩达《机器学习》学习笔记十一——神经网络代码

    吴恩达<机器学习>学习笔记十一--神经网络代码 数据准备 神经网络结构与代价函数· 初始化设置 反向传播算法 训练网络与验证 课程链接:https://www.bilibili.com/v ...

  4. 机器学习的概率统计模型(附代码)(一)

    目录 概率论 1.1 离散随机变量分布 1)伯努利分布 2)二项分布 3)泊松分布 1.2 连续随机变量分布 1)均匀分布 2)指数分布 3)正态分布 总结 系列文章目录 概率论 概率论,是研究随机现 ...

  5. 机器学习的概率统计模型(附代码)(二)

    目录 数理统计 2.1 抽样分布 1)卡方(​​​)分布 2)t分布 3)F分布 2.2 大数定律 2.3中心极限定理 总结 系列文章目录 数理统计 数理统计是数学的一个分支,分为描述统计和推断统计. ...

  6. 熵的定义(很好的方法论工具尤其第三熵增益的计算)

    熵的定义 https://www.cnblogs.com/wkang/p/10068475.html 信息熵与信息熵增益 https://www.cnblogs.com/dengdan890730/p ...

  7. 皮尔逊相关系数 定义+python代码实现 (与王印讨论公式)

    皮尔逊相关系数 定义+python代码实现 (与王印讨论公式) 标签: python相关性系数皮尔逊系数 2016-10-25 20:59 153人阅读 评论(0) 收藏 举报  分类: 集体智慧编程 ...

  8. ML与math:机器学习与高等数学基础概念、代码实现、案例应用之详细攻略——进阶篇

    ML与math:机器学习与高等数学基础概念.代码实现.案例应用之详细攻略--进阶篇 目录 人工智能数学基础综合 人工智能数学基础之高等数学 1.哈夫曼编码Huffman Coding简介及代码实现 人 ...

  9. 58 SD配置-科目分配-定义科目代码

    业务背景:定义科目代码 事务码:SPRO SPRO路径:SPRO->销售和分销->基本功能->科目分配/成本->收入帐户确定->定义科目代码 第1步,SPRO进入 第2步 ...

最新文章

  1. mxmkc编译器参数!
  2. 【BZOJ】1574: [Usaco2009 Jan]地震损坏Damage
  3. 题目:三个售票员 卖出 30张票 || 多线程编程的企业级套路+模板||synchronized与Lock的区别
  4. 1803无法升级到2004_微软向win10 1803以后版本推送新的Edge浏览器更新 安装后不再支持直接卸载...
  5. 学成在线--17.我的课程
  6. 多层协议解析 c语言,基于DPI的应用层协议书解析.doc
  7. win7计算机双击空白,win7系统控制面板“打开或关闭Windows 功能”空白没有任何选项的解决方法...
  8. JAVA的延时函数使用
  9. 每天一道剑指offer-删除链表中的 重复结点
  10. 电商平台系统架构设计案例分析
  11. advanced部署vsto到wps-兼容office和wps
  12. 西门子atch指令详解_西门子plc指令中文详解
  13. chrome open axure 自动跳转到axure插件
  14. GlobalMapper 脚本应用(持续更新)
  15. Model性能相关操作:select_related
  16. ThingJS:次时代3D城市大屏,2款工具3分钟搭建完成!
  17. 网站运营中活动组织的三项注意
  18. 神秘的程序员头像包 第二发
  19. 网络安全初学者工具安装:Kali,Windows xp虚拟机,pikachu靶场,burpsuite安装配置,phpstudy安装(学习笔记)
  20. Android来电,显示悬浮窗

热门文章

  1. mysql 深入视图和索引
  2. CSV文件在Python中的几种处理方式
  3. DSP5509项目之用FFT识别钢琴音调(5)之开始傅里叶变换
  4. iOS开发--一步步教你彻底学会『iOS应用间相互跳转』
  5. git 常用指令 -
  6. Matlab-Octave中绘制网格图和等高线:mesh 和 surf
  7. VC中将bmp作为资源文件写入EXE或DLL,然后内部调用(转)
  8. 记珠海一日游2008-5-2
  9. centos cron 自动执行脚本异常 命令不生效的解决办法
  10. c语言:最长对称子串(3种解决方案)