- 浏览: 2653699 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
刚看完HMM,因为有个ME-HMM方法,所以再看看最大熵模型,最后再把CRF模型看看,这一系列理论大体消化一下,补充一下自己的大脑,方便面试什么的能够应付一些问题。
多读书,多思考,肚子里才有东西。
==========
什么是熵?咱们这里只看信息以及自然界的熵吧。《Big Bang Theory》中Sheldon也经常把这个熵挂在嘴边。在咱们的生活中,你打碎了一块玻璃,或者洒落了一盒火柴,很自然的事情就是玻璃碎的一塌糊涂,根 本没有规律可言。火柴也是,很乱,你难道从中找到规律么?规律是什么东西?规律的反面是什么?其实很有意思的事情就是自然界的东西尽可能的互补以及平衡, 火柴很乱,那就规律性很小。
乱+序=1.
既然=1,那么这个乱也能描述啦?这就是熵的概念,熵是描述事物无序性的参数,熵越大则无序性越强。
我们更关注的是信息熵,怎么用熵来描述信息,不确定性等等。怎么用数学式子进行形式化描述呢?前人已经做了很多工作了:
设随机变量ξ ,他有A 1 、A 2 ....A n 共n 个不同的结果,每个结果出现的概率为p 1 ,p 2 ....p n ,那么ξ 的不确定度,即信息熵为:
H ( ξ ) = ∑ i = 1 n p i log 1 p i = − ∑ i = 1 n p i log p i
熵越大,越不确定。熵为0,事件是确定的。例如抛硬币,每次事件发生的概率都是1/2的话,那么熵=1:H(X)=-(0.5log0.5+0.5log0.5)=1。
那么这个式子是怎么来的呢?为什么会用log表示?我也不知道啊,查查文献。不过【参考5】中举了几个简单的例子来说明一下过程,这里引用下。
==========
例子:称硬币的问题,说有5个硬币,其中有一个是假的,这个假硬币的重量很轻,所以打算用一个天平称称,问需要最少称几次就能够保证 把这个假硬币给找出来?这个问题其实是一个很经典的问题,也有另外一个类似的问题是毒水和白鼠的问题,5瓶水其中一瓶有毒,用最少几只白鼠能够保证把毒水找出来?
其实这个问题有个统一的解法就是对半分呗,二叉树,二进制等。
拿硬币的例子,可以取四个放在天平两端,如果相等那么剩下的那个就是假的。如果不相等,把轻的一端的两个硬币再称一次就知道假的了。因为这样称两次就能够保证把假硬币找出来了。这里称的事件是有三个结果的:左边重、相等、右边重。
拿小白鼠的例子,小白鼠只有活着和中毒两种状态,咱们这里人性一点儿,有解药可以解毒的,只要实验达到目的就行。那么把水分成两组,一组两瓶,一组 三瓶,让一只小白鼠和一组,如果中毒,假设是三瓶的那一组,那么再递归的讲这三瓶分组,最坏情况下是用3只小白鼠。这里小白鼠的事件只有两个结果:中毒、 健康。
我们假设x是那瓶毒水的序号,x ∈ X = { 1 , 2 , 3 , 4 , 5 } ,y是第i只小白鼠的症状,y ∈ Y = { 1 , 2 } ,,1表示健康,2表示中毒。
用二进制的思想的话就是设计编码y 1 y 2 . . . y n 使他能够把x全部表示出来。因为一个y只有两个状态,所以要有三个y并列起来才能表示2 × 2 × 2 = 2 3 = | Y | 3 = 8 > 5 。所以是用三只小白鼠。上面称硬币的问题由于一个y可以表示三个状态,所以需要两个3 ∗ 3 = 9 > 5 就可以表示完所有的x了。
思想是这样的,从上面的分析可以看出,我们只用到的是x ,y 的状态,而没有用x ,y 的内容以及意义。也就是说只用了X 的“总不确定度”以及Y 的“描述能力”。
拿小白鼠和毒水的例子,X 的"总不确定度":H ( X ) = log | X | = log 5 。Y 的“描述能力”为:H ( Y ) = log | Y | = log 2 。
所以至少要用多少个Y才能够完全准确的把X表示出来呢?
H ( X ) H ( Y ) = log 5 log 2 = 2.31
所以得用三只小白鼠。称硬币那个问题由于Y 的表示能力强啊,l o g 3 的表示能力,所以表示X 的时候仅仅需要1.46的y就行了,所以就是称2次。【这样子思考貌似有问题。。。】
那么为什么用l o g 来表示“不确定度”和“描述能力”呢?前面已经讲过了,假设一个Y 的表达能力是H ( Y ) 。显然,H ( Y ) 与Y 的具体内容无关,只与| Y | 有关。所以像是log | Y | n 这种形式,把n就可以拿出来了,因为关系不大所以扔掉n就剩下log | Y | 了。
“不确定度”和“描述能力” 都表达了一个变量所能变化的程度。在这个变量是用来表示别的变量的时候,这个程度是表达能力。在这个变量是被表示变量的时候,这个程度是不确定度。而这个可变化程度,就是一个变量的熵(Entropy) 。显然:熵与变量本身含义无关,仅与变量的可能取值范围有关。
==========
下面看称硬币以及小白鼠毒水问题的一个变种:
(1)已知第一个硬币是假硬币的概率是三分之一;第二个硬币是假硬币的概率也是三分之一,其他硬币是假硬币的概率都是九分之一。(2)毒水也是,第一瓶是毒水的概率是1/3。。。以此类推。
最后求称次数或者小白鼠数量n的期望。因为第一个、第二个硬币是假硬币的概率是三分之一,比其他硬币的概率大,我们首先“怀疑”这两个。第一次可以把这两个做比较。成功的概率是三分之二。失败的概率是三分之一。如果失败了,第二次称剩下的三个。所以,期望值是:
1 3 × log 3 log 3 + 1 3 × log 3 log 3 + 1 9 × log 9 log 3 + 1 9 × log 9 log 3 + 1 9 × log 9 log 3 = 4 3
小白鼠的也可以同理求出来。为什么分子会有log 3 、log 9 呢?其实分子的log 3 、log 9 表示的都是“不确定度”。事件发生的确定性为1/3,那么不确定度可以理解为log 3 = log 1 1 / 3 ,再除以y的“表达能力”,就是每一次猜测的输出结果了,再根据期望公式∑ i x i p i 就可以求一下期望。不知道理解的对不对?
==========
更广泛的,如果一个随机变量x的可能取值为X = { x 1 , x 2 , . . . , x k } ,要用n位y : y 1 y 2 . . . y n 表示出X来,那么n的期望是:
∑ i = 1 k p ( x = x i ) log 1 p ( x = x i ) log | Y | = ∑ i = 1 k p ( x = x i ) log 1 p ( x = x i ) log | Y |
其实分子式不确定度,分母就是表达能力。那么X 的信息量为:
H ( X ) = ∑ i = 1 k p ( x = x i ) log 1 p ( x = x i )
这就是熵的定义了是吧?我们就算凑出来了。X的具体内容跟信息量无关,我们只关心概率分布,于是H(X)可以写成:
H ( X ) = ∑ i = 1 k p ( x ) log 1 p ( x )
==========
有时候我们知道x,y变量不是相互独立的,y的作用会影响x的发生,举个例子就是监督学习了,有了标记y之后肯定会对x的分布有影响,生成x的概率就会发生变化,x的信息量也会变化。那么此时X的不确定度怎么表示呢?
H ( X | Y ) = ∑ ( x , y ) ∈ X × Y p ( x , y ) log 1 p ( x | y )
这个其实就是条件熵Conditional Entropy。很显然,Y加入进来进行了标记之后,就引入了知识了,所以会减小X的不确定性,也就是减小了熵。所以知识能够减小熵。
那么有了部分标记,我们就有了知识,就可以预测一部分模型,这个模型对未知的知识还是保留着熵,只是这个熵被减少了。但是我们知道熵越大,数据分布越均匀,越趋向于自然。
所以我们就想,能够弄出个模型,在符合已知知识的前提下,对未知事物不做任何假设,没有任何偏见。也就是让未知数据尽可能的自然。这就是最大熵模型(Maximum Entropy Models)了。
发表评论
-
ConcurrentHashMap 的实现原理
2016-06-12 15:37 609概述 我们在之前的博文中了解到关于 HashMap 和 ... -
BloomFilter——大规模数据处理利器
2016-04-25 15:09 596参考:http://www.cnblogs.com/hea ... -
Base64笔记
2014-05-08 16:32 680原文:http://www.ruanyif ... -
运算符的优先级
2014-02-21 22:06 974很久没有去深究运算符的优先级了,今天写SQL解析思考了一下。 ... -
beansdb使用的压缩算法-Quicklz压缩算法
2014-02-09 20:17 0据这里http://blog.yufeng.i ... -
跳表SkipList的原理和实现
2014-02-07 17:29 1011参考:跳表SkipList的原理和实现 -
一种高效无锁内存队列的实现
2014-02-06 10:59 2014原文:http://www.searchtb. ... -
拆分文件统计topN的问题
2014-01-20 18:48 1041如果对一个只包含ip地址文件进行统计,需要求出频率最高的前 ... -
Integer的numberOfLeadingZeros方法解释
2014-01-13 20:42 1149int numberOfLeadingZeros(int i ... -
rank排名算法整理
2014-01-07 13:44 11511.Delicious.com 热门书签排行榜 按照&q ... -
利用switch判断各种case
2013-12-27 16:35 0String env = "daily" ... -
如何创建一个短链服务
2013-12-26 16:23 0参考: http://stackoverflow.com ... -
HAProxy的独门武器:ebtree
2013-12-07 18:57 999原文:http://tech.uc.cn/?p= ... -
统计单词出现频率
2013-10-07 20:58 929这里有一个大文本,文件请从 http://10.125.9 ... -
Reddit评论排名算法
2013-03-16 00:48 1638上一篇文章介绍了Reddit的排名算法,今天继续上一篇文章 ... -
大数据量,海量数据 处理方法总结
2013-01-13 23:46 1161大数据量的问题是很多面试笔试中经常出现的问题,比如bai ... -
STL系列
2013-01-13 23:42 962STL系列之一 deque双向队列 STL系 ... -
java Map排序(按key和按value)
2012-12-10 15:54 94671、按照key排序 对于java中Map的排序,有排序Map ... -
算法文档集合
2012-11-24 15:59 907Treelink算法介绍 一些基础算法介绍 ... -
各种进制基础知识
2012-11-06 14:37 100810进制是人类最熟悉的数字计算 2进制是机器最基本的单位 ...
相关推荐
机器学习是人工智能的一个重要分支, maximum entropy 模型(最大熵模型)是一个基本的机器学习算法。本文将通过 Python 实现最大熵模型,揭开机器学习的面纱。 一、最大熵模型简介 最大熵模型是一种常用的机器...
最大熵模型,全称为最大熵马尔科夫模型(MaxEnt Markov Model,简称M3),是统计学习方法中的一种,常用于自然语言处理、文本分类等任务。它基于概率论中的最大熵原理,该原理指出在所有可能的概率分布中,熵最大的...
Maxent最大熵模型是一种广泛应用的生态学预测工具,主要用于研究物种分布、生态系统的适生区以及环境变量对这些分布的影响。这个压缩包包含了运行Maxent模型所需的各种组件,包括Java安装包、Maxent模型的执行文件...
【最大熵模型(MaxEnt)】是概率统计和机器学习领域的一种重要模型,全称为最大熵马尔可夫模型(Maximum Entropy Markov Model)。它基于熵的最大化原则,在所有可能的概率分布中选择最不确定的那个,同时满足已知的...
最大熵模型(maximum entropy model, MaxEnt)也是很典型的分类算法了,它和逻辑回归类似,都是属于对数线性分类模型。在损失函数优化的过程中,使用了和支持向量机类似的凸优化技术。而对熵的使用,让我们想起了决策...
参考论文 https://www.docin.com/p-1506185737.html( MAXENT最大熵模型在预测物种潜在分布范围方面的应用_张路) 双击.bat 文件就可以使用,只需要传入 物种和坐标的 csv 文件 和 生物气候变量地图.asc 文件就可以...
最大熵模型(MaxEnt,全称为Maximum Entropy Modeling)是一种统计学方法,广泛应用于各种领域,包括信息检索、自然语言处理、生物信息学等。在生态学中,它被用作物种分布模型(Species Distribution Models,SDMs...
麦克森Maxent是用于对物种地理分布建模的独立Java应用程序。 这个开放源代码存储库使Maxent社区可以使用Maxent的Java源代码并为之做出贡献。 有关更多信息和最新的Maxent软件版本,请访问美国自然历史博物馆的Maxent...
标题中的"maxent3.4.1.zip"指的是一个MaxEnt(最大熵模型)软件的压缩包文件,版本为3.4.1。这个软件主要用于机器学习和统计建模领域,特别是自然语言处理和生物信息学中,通过最大化熵来估计概率分布。 描述中的...
在Python编程环境中,最大熵模型(MaxEnt,Maximum Entropy Model)和最小散度模型(Minimum Divergence Model)是两种常用的统计建模方法,尤其在自然语言处理、信息检索、分类问题等领域有广泛应用。本压缩包...
在数据科学和机器学习领域,最大熵模型(MaxEnt Model)是一种非常重要的概率模型。本讲义将深入探讨这一概念及其在实际应用中的价值。最大熵模型的基本思想是,在满足已知先验信息的情况下,选择最不确定的分布,即...
最大熵模型(MaxEnt Model)是一种在统计学习理论中广泛使用的概率模型,特别是在自然语言处理领域,用于诸如文本分类、词性标注、句法分析等任务。它的核心思想是通过最大化熵来寻找最不确定但又与观测数据一致的...
最大熵模型,全称为最大熵马尔科夫模型(MaxEnt Markov Model),是一种在概率模型中广泛应用的统计学习方法。该模型的核心思想是,在所有可能的概率分布中,选择熵最大的那个,以此来保证模型的预测不确定性最小,...
最大熵模型(MaxEnt Model)是一种在统计学和机器学习领域广泛应用的概率模型。它基于最大熵原理,即在满足一定约束条件的情况下,选择具有最大熵的分布,因为最大熵的分布对未知信息提供了最少的假设,体现了“无偏...
最大熵模型(MaxEnt,Maximal Entropy Model)是一种在概率论和统计学中广泛应用的理论框架,尤其在信息检索、自然语言处理、机器学习等领域。这个模型基于熵最大化的原则,熵是衡量一个随机变量不确定性的重要度量...
【最大熵模型】是概率建模领域的一种方法,它的核心思想是寻找在满足特定约束条件下的最不确定(或最大熵)的概率分布。这种模型在处理不确定性问题时特别有用,尤其在自然语言处理、图像识别和地理信息系统(GIS)...
Maxent模型,全称为最大熵模型(Maximum Entropy Model),是一种在统计学和机器学习领域广泛应用的概率模型。这个模型基于信息论中的熵概念,旨在在满足已知约束条件的情况下,选择具有最大不确定度(即最大熵)的...
最大熵模型(MaxEnt)是一种基于最大熵原理的物种分布模型,广泛应用于生态学领域,如濒危物种保护、外来物种入侵研究、气候变化对物种分布影响的预测等。MaxEnt模型以其简洁的构建过程、精准的预测能力和清晰的结果...
最大熵模型(MaxEnt,Maximun Entropy Model)是一种广泛应用在自然语言处理、机器学习、信息检索等领域的概率模型。这个模型基于信息论中的最大熵原理,即在所有可能的概率分布中,熵最大的分布是最不确定的,也最...