zoukankan      html  css  js  c++  java
  • 信息熵和条件熵

    引言

    今天在逛论文时突然看到信息熵这个名词,我啪的一下就记起来了,很快啊!!这不是我大一第一节信息资源管理概论课讲到的第一个专业名词吗,信息熵我可熟了,章口就来,信息熵是负熵 .......淦,负熵又是啥。好家伙,一整门课的知识都还给老师了,只记得老师给我们大肆推荐的《JinPingMei》...... orz,对不起老师我错了,快逃!!

    为了赎罪,求生欲满满的我马上、很快啊,就把信息熵给复习了一遍,连带条件熵都给复习了,真不戳!
    好吧,开个玩笑。因为前段时间在看一篇新词发现的论文时注意到里面的算法模型将信息熵作为了一个特征向量作为输入来进行挖掘。才发现原来信息熵在文本挖掘领域也有应用吗?仔细一想,自然语言和信息论有交叉好像也挺正常的,后来百度一看,好家伙,原来在机器学习里也是有广泛应用的。突然记起学决策树时模型参数选择算法时就有熵(Entropy)和基尼系数的概念,原来我还是有认真听课的好吗?好的,其实当时只知道对应ID3和CART算法,至于原理?(算了算了太烧脑了,做个调参侠不好吗,哪个精度高用哪个管那么多干嘛......别学我!看看我眼里的眼泪你就知道了~)
    翻出当时的作业???好家伙,这波DDL截止前5分钟写出来的结论就很强,果然DDL可以让我们有勇气把shit交给老师是真理!(本人实践检验过的,还在不断实践中)
    image.png
    回到正题,原理还是要懂的,万一哪天就可以吹牛逼了呢!!!

    信息熵

    说到信息熵,首先先了解一下什么是信息量?
    信息量顾名思义信息的量,我们可以理解作信息量是信息的度量单位,就和我们可以用秒来度量时间一样,用一生来度量爱一样......掌嘴,整天不务正业想啥呢)
    信息量和事件的概率相关,发生概率越大的事说明信息量越小,反之,发生概率越小的事说明信息量越大。这其实很好理解,我们说太阳从东边升起了,那不是常识吗,还用你说?这句话信息量就很小了。但如果你说,太阳从西边升起了,我们第一反应肯定是???的确,信息量很大,要不是方位感有问题就是世界末日了哈哈哈
    当然,信息量肯定是不能为负的,但是可以为0。(看什么看,别整什么无中生有暗渡成仓了,尽说废话)

    由此,我们可以大致归纳为:一个事件的信息量是与其发生概率呈负相关的,且不能为负。

    抛开信息量,我们先上一下信息熵的公式
    假设P(Xi) 表示随机事件X为 Xi 的概率,那么此时事件X的信息熵为:
    image.png
    其实这个公式并不复杂,不要一看到公式就懵好吗?
    我们可以很明显的看到,信息熵H(X)和事件概率P(X)的对数相关。

    回到信息量,假如有2个不相关事件x,y,我们可以推出:
    我们从两个事件中得到的信息量总和h(x,y) = h(x)+h(y)
    由于两个事件不相关,其事件概率P(x,y) = P(x)P(y)
    这个时候,其实可以初步看出h(x)和P(x)的对数是相关的(对数中的相乘的真数求导后是相加形式)
    进一步推导,我们可以得到公式:**h(x) = -log
    2*P(x)**

    是不是又懵逼了,为啥有个负号???为啥底数是2???
    不慌,看了一下大佬的解释瞬间开窍:

    • 负号是为了确保信息量保持一个非负的状态(毕竟你要求导嘛!!)
    • 底数为2:因为我们只需要满足低概率事件高信息量的公式需求,此时对数的选择其实是不限的。但遵循信息论的普遍传统,我们使用2作为对数的底(不要问我信息论的普遍传统哪冒出来的,我也不知道啊哈哈哈)

    好了,信息熵和信息量的公式都出啦,相信大家也都很明显察觉到它们的相似之处了。总结一下:
    信息量度量的是一个事件发生所带来的信息,而信息熵则是在事件结果出来之前对可能产生的信息量的一个期望
    即: H(x) = sum(P(x)h(x)) = -sum(P(x)log2P(x))
    转换一下,即为:

    条件熵

    什么是条件熵呢?
    百度百科告诉我们:条件熵_H(X|Y)_表示在已知随机变量_Y_的条件下,随机变量 X 的不确定性。
    直接上公式:
    image.png

    是不是,感受到扑面而来的概率论的气息,好像知道又不确? 来,上例子:
    假如有一个黑箱子,里面有10个球,6个白球,4个黑球,其中有7个球球面是光滑的,其中白球都为光滑,外加一个黑球,其他3个黑球球面是粗糙的,很明显:
    摸到白球的概率为:6/10=3/5
    摸到黑球的概率为:4/10=2/5
    摸到球面光滑的概率为:7/10=7/10
    摸到球面粗糙的概率为:3/10=3/10
    我们把摸到的球的颜色作为事件Y, 我们再假设事件X为摸到的球的球面是否光滑为事件X
    那么此时
    H(Y|X=球面) = p(X =光滑)H(Y|X=光滑)+p(X =粗糙)H(Y|X=粗糙) (1)
    又已知事件Y的信息熵H(Y) = -3/5log3/5 -2/5log2/5 (2)
    p(X =光滑)=7/10; (3)
    p(X =粗糙)=3/10; (4)
    H(Y|X=光滑)= -6/7log6/7 -1/7log1/7 (7个光滑的球中6个白球,1个黑球) (5)
    H(Y|X=粗糙)= -log1 (3个粗糙的球都为黑球) (6)

    将(2)、(3)、(4)、(5)、(6)代入(1)中,即可得到答案!!!
    (是不是有种高考解题既视感hhh,老师说公式列完整,解没求出来只扣2分,可以拿98分)


    此文首发于:https://www.wujunchao.top/?p=134

    一半是现实,一半是梦想~ 一念花开,一念花落~
  • 相关阅读:
    Registering an Application to a URI Scheme
    Promise相关网址
    设置table的td宽度,不随文字变宽
    Promise实现原理
    【转】编写高质量代码改善C#程序的157个建议——建议117:使用SSL确保通信中的数据安全
    【转】编写高质量代码改善C#程序的157个建议——建议116:避免用非对称算法加密文件
    【转】编写高质量代码改善C#程序的157个建议——建议115:通过HASH来验证文件是否被篡改
    【转】编写高质量代码改善C#程序的157个建议——建议114:MD5不再安全
    【转】编写高质量代码改善C#程序的157个建议——建议113:声明变量前考虑最大值
    【转】编写高质量代码改善C#程序的157个建议——建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间
  • 原文地址:https://www.cnblogs.com/wujunchao/p/14856007.html
Copyright © 2011-2022 走看看