基于随机变量的熵来进行数据建模和分析

转载请注明出处:http://blog.csdn.net/gamer_gyt

博主微博:http://weibo.com/234654758

Github:https://github.com/thinkgamer


写在前边的话

首次接触信息熵,信息增益的概念是在阅读《机器学习实战》这本书的时候了解到的,那个时候对这几个概念还是一知半解,虽然当时可以理解,但是记忆却保持不了太久,几个月后,再次阅读一个数据专家的代码时发现人家对于用户异常行为检测的算法模型采用的就是随机变量的熵来建模的

  机器学习实战系列博客:http://blog.csdn.net/Gamer_gyt/article/category/5848553

  本文永久地址:http://blog.csdn.net/gamer_gyt/article/details/53729868


何为信息/熵/信息增益

   信息

信息是熵和信息增益的基础概念,引用香农的话就是事物运动状态或存在方式的不确定性的描述,然而当你读完这句话的时候感觉还不如不告诉你呢,当然香农大神的话岂能是那么容易理解的,因为我是从机器学习中的决策树算法知道信息,熵,信息期望这几个概念的,那么我就从分类的角度来看下什么是信息。

  假设现在有一个随机变量X,当我们看到他的一个值时,能给我们带来多少信息呢?这个信息就可称为我们观察到X这个值带来的惊讶程度,我们被告知一个不太可能发生的事情发生了,要比告知一个非常可能发生的事情发生了得到的信息更大。所以信息量的多少依赖于概率分布p(x),所以我们可以使用一个函数来建模信息量h(x)

  我们观察两个相互独立的事件x,y。我们观察他得到的信息量,要和单独观察他们得到的信息量之和相等,即h(x,y)=h(x) + h(y)

  而两个独立的时间x,y的概率关系:p(x,y)=p(x)p(y)

  基于上边的观察,信息量必须和p(x)和log函数有关,所以有h(x)=-log2p(x)

  这里加上负号的原因是保证信息量大于等于0,注意这是一个小概率事件,具有更高的信息量,log底数的选择并没有限制,信息论中大多都选择2,传输这些信息量,需要的二进制的位数。

  直接一点就是:如果待分类的事务可能分在多个分类之中,则符号x的信息定义为h(x)=-log2p(x) p(x)表示选择该分类的概率。

 

   信息熵

熵定义为信息的期望值,即用来接收每条消息中包含的信息的平均值,它是用来度量不确定性的,它可以表示为关于分布p(x)的期望值

           

  这个表达式就被称为信息熵

  在机器学习中,采用比较多的是自然对数形式

          

  对于x=0,由于

 

          

  

  所以我们让p(x)ln(x) = 0

  如果对这些信息量进行编码传输,我们希望概率大的使用较短的编码,概率小的我们采用较长的编码,那么最大熵能够达到最小长度的编码。

  读到这里你或许会不明白,为什么定义概率大的使用较短的编码,概率小的采用较长的编码,就能得到最大熵能够达到最小的编码,下边我们通过数学来验证一下:

  为了便于求导,这里的信息熵公式采用:

 

  假设f(x) = xIn(x),看看图像长什么样,由信息熵的公式及定义,x 这里表示的事件发生的概率,x 属于[0,1],对函数f(x)求导

       

,由此发现f(x)是凸函数,令

由于

,我们定义f(0)=0,所以这里得到的f(x)=xIn(x) 的图像如下:

             

  由于信息熵公式前边带了个负号,所以这里图像应该取反,所以熵最大时,即函数最大时对应最小长度的编码

   信息增益

信息增益在决策树中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好,在概率中定义为:待分类的集合的熵和选定某个特征的条件上之差,在解释这个公式之前,我们先来看下条件熵:

假设有随机变量(X,Y),其联合概率分布为:P(X=xi,Y=yi)=pij,i=1,2,?,n;j=1,2,?,m则条件熵(H(Y∣X))表示在已知随机变量X的条件下随机变量Y的不确定性,其定义为X在给定条件下Y的条件概率分布的熵对X的数学期望:

那么信息增益表示得知特征X的信息后而使得Y的不确定性减少的程度。定义为:


熵和编码长度

网上看到一篇文章解释熵和编码长度的关系特别贴切,举得例子是:假设有个作弊团伙,需要源源不断的向外传递4选1的单选题的答案,直接传输ABCD的ascii编码的话,每个答案需要8个bit的二进制编码,从传输的角度,这显然有些浪费,信息论最初要解决的就是数据传输和压缩的问题,所以这个作弊团伙希望能用更少bit的编码来传输答案,很简单,答案只有四种可能性,所以二进制编码需要的长度就是取2为底的对数log2(4)=2bit就足够进行四个答案的编码了(00,01,10,11)在上面这个例子中,其实隐含了一种假设,就是四个答案出现概率是相等的,均为p=1/4,所以编码需要长度的计算可以理解为如下的形式:

此时已经有些熵的定义了,看上边的熵的分析就是求信息(-log2(p))的期望值

这正是熵,因为ABCD出现的概率均为p=1/4,所以上面式子算出来结果刚好是2。从这个角度,熵就是对每个可能性编码需要长度的期望值。

答案出现概率相等的例子可能并不贴近实际,在中国考试界,坊间传闻:“不知道选什么的时候就蒙C”,这个信息是可以帮助作弊团队改善编码长度的。假设A出现的概率不变仍为1/4,C出现的概率变成了1/2,B和D则分别是1/8:P(A)=1/4,P(B)=1/8,P(C)=1/2,P(D)=1/8。在这种情况下,考虑到传递答案的过程中,C出现的次数(概率)最高,所以可以为C用短一些的编码,而出现次数较少的B和D则可以考虑用长一些的编码。这样的话,平均下来,对于一定的信息总量,需要的编码总长度就会少一些。根据熵的定义的思路,对于出现概率为p的事件,考虑用长度为-log2(p)的二进制进行编码,所以考虑如下编码:

A:10       B:110       C:0      D:111

对照熵的公式计算一下编码的长度的期望值,也就是平均编码长度:

再详细点,假设作弊团伙要传递200个答案出去。为了方便说明,这200个答案中ABCD出现的次数恰好都严格和其出现概率成比例,也就是A:50次,B:25次,C:100次,D:25次。所以传递200个答案一共需要的bit数是:

50×2+25×3+100×1+25×3=350

那么平均下来每个答案耗费了350/200=1.75个bit编码长度。

在实际情况中,并不是每个信息都可以单纯按照上面的两个例子进行二进制编码。比如一个事件出现概率为0.3,那么我们也不知道该如何用一个-log2(0.3)=1.74个bit的二进制编码表示。但是平均编码长度的概念是可以拓展的,代表了对随机变量的平均不确定度的度量。比如ABCD四个答案出现概率相等时,是一种最无序最不确定的状态,谁也蒙不准下一个答案是什么;但是如果C出现概率高了,那么答案出现就不是那么没规律,我们蒙C时的信心就高了一些。


基于随机变量的熵进行数据建模

比如说场景是这样的:某公司又一台服务器,rsyslog中记录着所有用户的访问记录,包括访问时间,访问地点,访问ip三个维度,当时真实场景中并不仅仅是这三哥数据维度,但是这里我们为了举例

假设这里有以下这些数据:

用户姓名 访问时间 访问地点 访问IP
A 8 北京 10.0.0.3
A 9 北京 10.0.0.2
A 10 北京 10.0.0.2
A 14 北京 10.0.0.4

第一步:制定参数

thread=0.95 (经验阈值)

max_bucket=2(遍历属性值的最多数目)

第二步:构建用户肖像

A:{time:{8:0.25,9:0.25 },address:{北京:1},IP:{10.0.0.2:0.5,10.0.0.3:0.25} } }

第三步:异常值计算

针对一条测试数据 A 10 北京 10.0.0.12

遍历测试数据的没个维度:

如果该维度不在 肖像数据中:

计算该维度的概率编码长度(1-sum(该维度对应的概率和))

相加各个不在肖像数据维度值中的编码长度期望值

最终得到一个异常值和,便是该用户的异常指数

这里讲的不是太清楚,主要是公司的业务场景不能透漏,这里主要是进行了简化,如果你感兴趣或者有什么不懂的地方可以加我微信,进行交流



推广一下个人微信公众号:

时间: 2024-08-02 02:49:59

基于随机变量的熵来进行数据建模和分析的相关文章

新的学习路径、学习想法和思路的头脑风暴:基于泰迪云课程,对数据分析和数据建模,机器学习算法进行统筹,接着是基于大数据的数据挖掘、进度、

新的学习路径.学习想法和思路的头脑风暴:基于泰迪云课程,对数据分析和数据建模,机器学习算法进行统筹,接着是基于大数据的数据挖掘.进度. 泰迪云代码已经下载,对相关内容进行应用和学习 想通视频之后对代码进行研究 专家经验.优秀经验工程师经验转化. 从论文中第三四大章,读取 设计和解决问题流程 找论文.使用benchmark 上有收录论文.找到论文.不建议自己先去想. 以后一定 偏分析,偏挖掘.偏决策的.不是执行者,执行者是最low的,最强的解决方案,都按论文来找. 高端会议.每年会出来十多篇研究成

[Elasticsearch] 数据建模 - 处理关联关系

数据建模(Modeling Your Data) ES是一头不同寻常的野兽,尤其是当你来自SQL的世界时.它拥有很多优势:性能,可扩展性,准实时的搜索,以及对大数据的分析能力.并且,它很容易上手!只需要下载就能够开始使用它了. 但是它也不是魔法.为了更好的利用ES,你需要了解它从而让它能够满足你的需求. 在ES中,处理实体之间的关系并不像关系型存储那样明显.在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用.在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点.

NoSQL数据建模技术

原文来自“NoSQL Data Modeling Techniques”,由酷壳网陈皓编译<NoSQL数据建模技术>.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西.总体来说,我觉得NoSQL更适合做Cache. 下面是正文: NoSQL数据库经常被用作很多非功能性的地方,如,扩展性,性能和一致性的地方.这些NoSQL的特性在理论和实践中都正在被大众广泛地研究着,研究的

数据仓库建设中的数据建模方法(转)

简介: 本文的主要内容不是介绍现有的比较流行的主要行业的一些数据模型,而是将笔者在数据仓库建设项目中的一些经验,在这里分享给大家.希望帮助大家在数据仓库项目建设中总结出一套能够合乎目前业界规范的,满足大部分行业数据仓库建设标准的一种方法. 所谓水无定势,兵无常法.不同的行业,有不同行业的特点,因此,从业务角度看,其相应的数据模型是千差万别的.目前业界较为主流的是数据仓库厂商主要是 IBM 和 NCR,这两家公司的除了能够提供较为强大的数据仓库平台之外,也有各自的针对某个行业的数据模型. 例如,在

浅谈数据仓库建设中的数据建模方法

所谓水无定势,兵无常法.不同的行业,有不同行业的特点,因此,从业务角度看,其相应的数据模型是千差万别的.目前业界较为主流的是数据仓库厂商主要是 IBM 和 NCR,这两家公司的除了能够提供较为强大的数据仓库平台之外,也有各自的针对某个行业的数据模型.       例如,在银行业,IBM 有自己的 BDWM(Banking data warehouse model),而 NCR 有自己的 FS-LDM 模型.在电信业,IBM 有 TDWM(Telecom Data warehouse model)

NoSQL 数据建模技术(转)

本文转载自:http://coolshell.cn/articles/7270.html ================================================ 全文译自墙外文章"NoSQL Data Modeling Techniques",译得不好,还请见谅.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是,关系型数据库想把一致性,完整性,索引,CRUD都干好,NoSQL只干某一种事,但是牺牲了很多别的东西.总体来说,我觉得NoSQL

[转] [Elasticsearch] 数据建模 - 处理关联关系(1)

[Elasticsearch] 数据建模 - 处理关联关系(1) 标签: 建模elasticsearch搜索搜索引擎 2015-08-16 23:55 6958人阅读 评论(0) 收藏 举报 分类: Search(43) Elasticsearch(43) 目录(?)[+] 数据建模(Modeling Your Data) ES是一头不同寻常的野兽,尤其是当你来自SQL的世界时.它拥有很多优势:性能,可扩展性,准实时的搜索,以及对大数据的分析能力.并且,它很容易上手!只需要下载就能够开始使用它了

[转] - 浅谈数据分析和数据建模

大数据应用有几个方面,一个是效率提升,帮助企业提升数据处理效率,降低数据存储成本.另外一个是对业务作出指导,例如精准营销,反欺诈,风险管理以及业务提升.过去企业都是通过线下渠道接触客户,客户数据不全,只能利用财务数据进行业务运营分析,缺少围绕客户的个人数据,数据分析应用的领域集中在企业内部经营和财务分析. 数字时代到来之后,企业经营的各个阶段都可以被记录下来,产品销售的各个环节也被记录下来,客户的消费行为和网上行为都被采集下来.企业拥有了多维度的数据,包括产品销售数据.客户消费数据.客户行为数据

DataUML 数据建模 介绍

DataUml Design 是面向开发人员使用的一个永久免费的软件,提高软件的开发效率和代码的规范度.它主要包括三大功能,数据模型.代码生成和UML建模,数据模型功能类似于PowerDesigner软件,代码生成类似于动软的代码生成器. 1.什么是DataUml Design     DataUml Design是采用WPF开发的一款软件,该软件功能包括实体类建模.数据库设计.模型与数据库同步.数据库与模型同步.代码生成.文档生成.数据库生成 实体模型等功能.以往的软件修改模型之后还得修改数据