一,背景和任务目标

假设有一个n维数据集,包含k个样本,可以视为n*k矩阵。每个数据维度我们可以视为一个随机变量,此n维数据集则可以视为由n个随机变量构成的系统。我们的目标是从集合数据集中选取一个最具数据代表性的数据维度。怎么算是最具代表性的数据维度呢?一个可行方案是,采用信息论的方法,选择对系统不确定性贡献最大的随机变量X。

关于信息熵,联合熵,条件熵的概念和定义,可以参考:

二, 基于联合熵与条件熵的随机变量选择算法

显然,仅仅计算每个随机变量各自的不确定性(信息熵),并不能确定哪个变量对整个系统的不确定性贡献最大,因为这些随机变量之间很可能存在很大的信息重叠。因此,我们使用考察了信息重叠的联合熵和条件熵来解决问题。具体的解法如下所示:

算法一:先计算整个变量系统的联合熵H(X1, … , Xn)。然后去掉一个变量X1,再计算一下剩余其他变量的联合熵H(X2, … , Xn)。然后计算差值D(X1) =  H(X1, … , Xn) – H(X2, … , Xn) 。以此类推可计算每个随机变量的差值D(Xi)。差值D(Xi)越大,说明Xi对系统的不确定性贡献就越大。这种算法使用联合熵的差值来估计变量Xi对于整个系统的独立信息,而不仅仅是每个随机变量各自的熵,可以涵盖变量间存在很大的信息重叠的情况。

算法二:在算法一的基础上,改计算联合熵差值D(Xi)为信息增益IG(Xi)。每次选择一个变量Xi,系统的剩余不确定性等可以用条件熵表达,即

。而选择变量Xi后系统减少的不确定性被称为信息增益(infomation gain),即系统交叉熵和选择Xi条件熵的差值,信息增益用公式表达如下:

IG(Xi) =

最终,IG(Xi) 最大的变量,对整个系统提供的不确定性越高。这种算法相对第一种更为精确。由于一组变量的联合熵

量化了不确定性的总量,条件熵量化了变量系统中部分变量已知时整个变量系统的剩余不确定性。因此,从信息理论的角度,确定单个变量对整个系统的不确定性的贡献的问题,就成为计算其距离场之间信息重叠的任务。

Hazarika, S., et al 等人的论文中,就采用了这种方法来量化等值线的的重要性。

如上图(c)所示,一共有10个等值线,你可以将其理解为10个变量组成的变量系统。然后按照上文算法2,计算每个等值线对应的信息增益。为了便于为了便于在信息引导下探索各个变量(数据维度),使用了如图(a)所示的信息增益曲线,让用户交互地选择变量并可视化其信息增益。在图(a)中,纵轴表示信息增益,横轴表示10个变量。图上的每个点对应一个数据维度,按其信息增益的降序从左到右排列。我们选择其中信息增益最大的5个变量,也就是图(a)从左到右前5个点,它们累积的信息增益如图(a)中部的垂直黑线表示的那样,是4.42,而全部10个变量的信息量只有4.91。也就是说,目前选中的5个变量包含了系统总信息量的90%。这5个选中的变量对应的等值线如图(b)所示。对比图(b)和(c),可以看到这五个等值线传递的不确定性信息几乎与所有等值线所示的相同。这对于具有大量变量的系统尤其有用,因为它有助于识别与不确定性分析相关的最重要变量。

不得不说这种方法有点像主成分分析(PCA),目的近似,手段不同,最终结果和应用场景也有区别。

三.问题的关键——如何计算多个变量的联合熵

然而多个变量的联合熵计算并不是一个容易的事。首先我们看一下多变量联合熵的计算公式:

(1)

其中p(x1, … , xn)是随机变量X1, … , Xn的联合概率分布。而计算联合概率分布的难度是指数型增长的。假设随机变量X1, … , Xn都是离散型随机变量,均有k种可能取值。那么计算联合概率分布就需要计算n^k次。显然直接计算联合概率分布是有难度的。

但是,如果我们能更巧妙地知道联合概率分布函数,那么计算联合熵就有办法了。那么如何计算联合概率分布函数?一个直接的办法,是计算多变量的联合直方图(joint histogram)。对此,我们需要一整节的内容介绍什么是直方图,再用一整节的内容介绍什么是联合直方图以及如何存储联合直方图,最后再用一节介绍已知联合直方图的情况下怎么计算联合熵和条件熵。

参考文献:Hazarika, S., et al., Information Guided Exploration of Scalar Values and Isocontours in Ensemble Datasets. Entropy, 2018. 20(7): p. 540.

用c语言求信息熵条件熵,信息熵应用随笔1:利用条件熵筛选数据维度相关推荐

  1. c语言求圆周率 . 4,C语言求圆周率π(三种方法)(4页)-原创力文档

    C语言求圆周率π(三种方法) 题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止.题目2) 根据公式②,用前100项之积计算π的值.题目1)提供了一种解法,题目2)提供了两种 ...

  2. C语言求3x3数组对角线元素之和

    C语言求3x3数组对角线元素之和 #include <stdio.h> int main() {int i, j,sum=0;int a[3][3];for (i = 0; i < ...

  3. 图的深度搜索c语言,求图的深度优先搜索!该怎么处理

    当前位置:我的异常网» C语言 » 求图的深度优先搜索!该怎么处理 求图的深度优先搜索!该怎么处理 www.myexceptions.net  网友分享于:2013-03-16  浏览:12次 求图的 ...

  4. c语言有参有类最小公倍数,C语言求最大公约数和最小公倍数算法

    C 语言求最大公约数和最小公倍数算法 C 语言求最大公约数和最小公倍数可以说是C 语言编程学习中一个重点和难点,它常常作为计算机专业学生参加各种考试必须要把握的内容.其算法方面除常用的辗转相除法外.还 ...

  5. c语言十万以内超级素数,用C语言求素数的优化

    用C语言求素数的优化 这个程序运行了8个小时,求一亿以内的素数和超级素数. 大家帮忙看看,我求一亿以内的素数和超级素数.从下午5:30开始,一直到零晨0点30才结束.我的电脑配置也可以.INTER E ...

  6. c语言产生随机数_C语言 求的近似值

    点击上方"蓝字"关注我们 愉快的一天,不得不做的三件事: 种田,锄地,整代码!!! [题目] 用循环方法实现. (1)请利用"正多边形逼近"的方法求出π的近似值 ...

  7. c语言编程矩阵主对角线相同,急求!c语言 求N*N矩阵中主对角线和次对角线的元素之和...

    急求!c语言 求N*N矩阵中主对角线和次对角线的元素之和 來源:互聯網  2010-02-24 23:29:06  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 ...

  8. 小学 n 阶乘的后面包含多少零c语言,C语言---求n的阶乘后面有多少个连续的0

    C语言---求n的阶乘后面有多少个连续的0 题目描述:给定一个正整数n,返回n的阶乘尾部连续0的个数. 例如:(5,5*4*3*2*1=120,则返回1),(10,10*9*8*7*6*5*4*3*2 ...

  9. c语言求n到m之间的素数和

    c语言求n到m之间的素数和 要实现的功能如下 完整源代码实现如下 要实现的功能如下 求n到m所有的素数,并对素数进行求和. 完整源代码实现如下 #include <stdio.h> #in ...

最新文章

  1. 基于开源、混合云 惠普Helion开年3款新品发布
  2. js设置radio选中
  3. html中立体丝带菜单,使用CSS3实现绚丽的飘带样式菜单方法介绍
  4. 洗点,现金1100G
  5. 邮件服务器IMail教程(2)
  6. mybatis3.2.2的一些测试
  7. php生成随机汉字,PHP随机生成中文段落示例【测试网站内容时使用】
  8. 【SQL Server 优化性能的几个方面】(转)
  9. iWebOffice2009问题
  10. w ndows10备份,Win10备份工具哪个最好?轻松备份会让你知道
  11. 《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述
  12. 【一句日历】2019年1月
  13. 遇见未来 | 对话朱贤文: PostgreSQL是一匹即将发力的黑马
  14. R语言相关性分析及步骤
  15. python(进阶篇)——自动化操作Excel(xlrd和xlwt)
  16. 一文读懂无线充电技术(附方案选型及原理分析)
  17. SpringBoot项目在IDEA上实现热部署
  18. IBM联手农业科技公司通过区块链推动非洲农业企业发展
  19. day6——css3
  20. L1-4 1.01的365次方 (5 分)

热门文章

  1. win10的redis主从配置
  2. 植绿“童”行 巧手绘林
  3. 算法初步---基本的数据结构(java为例)
  4. 从 4 个面试题了解「浏览器的垃圾回收」
  5. html网页怎么设置背景照片墙,照片墙.html
  6. [附源码]计算机毕业设计基于Springboot作业查重系统
  7. python常用库大全(总结)
  8. php 全局变量 $global 跨文件,PHPGlobal全局变量 - 米扑博客
  9. 计算机领域著名的国际会议
  10. 计算机毕业设计ssm基于J2EE的山西旅游网站的设计与实现iiqmx系统+程序+源码+lw+远程部署