Machine Learning Series No.7 -- Max Entropy

最大熵模型

1.它是一个判别模型,最终目的是为了建模 p(y|x) p ( y | x )

2.原理

认为学习模型时,认为条件熵最大的模型是最好的模型。

其原理可由以下博客说明,其隐含的意思是指最好的模型是在满足已有约束的条件下,不做任何主观臆测的模型是最好的模型。

https://www.cnblogs.com/ooon/p/5677098.html

3.推导

Ep~(f)=x,yp~(x,y)f(x,y) E p ~ ( f ) = ∑ x , y p ~ ( x , y ) f ( x , y )

Ep(f)=x,yp(x,y)f(x,y) E p ( f ) = ∑ x , y p ( x , y ) f ( x , y )

条件熵:

H(Y|X)=H(X,Y)H(X)=x,yp(x,y)logp(x,y)+xp(x)logp(x) H ( Y | X ) = H ( X , Y ) − H ( X ) = − ∑ x , y p ( x , y ) log ⁡ p ( x , y ) + ∑ x p ( x ) log ⁡ p ( x )

=x,yp(x,y)logp(x,y)+x,yp(x,y)logp(x) = − ∑ x , y p ( x , y ) log ⁡ p ( x , y ) + ∑ x , y p ( x , y ) log ⁡ p ( x )

=x,yp(x,y)logp(x,y)p(x)=x,yp(x,y)logp(y|x) = − ∑ x , y p ( x , y ) log ⁡ p ( x , y ) p ( x ) = − ∑ x , y p ( x , y ) log ⁡ p ( y | x )

=x,yp~(x)p(y|x)logp(x,y) = ∑ x , y p ~ ( x ) p ( y | x ) log ⁡ p ( x , y )

在最后一步注意是为了建模 p(y|x) p ( y | x ) .

所以最终的优化问题可以转化为:

maxpx,yp~(x)p(y|x)logp(x,y) max p ∑ x , y p ~ ( x ) p ( y | x ) log ⁡ p ( x , y )

s.t.    Ep~(fi)=Ep(fi) s . t .         E p ~ ( f i ) = E p ( f i )

yp(y|x)=1 ∑ y p ( y | x ) = 1

最终转化为拉格朗日优化法求解:


这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在调用 `scipy.stats.entropy` 函数时,如果出现 `-inf` 的错误,很可能是因为你传入的概率分布数组中存在概率值为0的情况。这会导致计算信息熵的时候出现无限大的负数。为了避免这种情况,可以在计算之前将数组中的概率值都加上一个很小的数,例如1e-10。这样可以避免概率值为0的情况,同时也不会对计算结果造成太大的影响。 例如: ``` p = [0.5, 0.5] entropy(p) # Output: -inf p = [0.5, 0.5] + 1e-10 entropy(p) # Output: 0.6931471805599453 ``` ### 回答2: 当使用Python中的scipy.stats库中的entropy函数时,可能会遇到返回-inf(负无穷大)的情况。这是由于输入的概率分布有问题造成的。 entropy函数用于计算给定概率分布的熵(entropy)。熵是对随机变量的不确定性的度量,它取决于概率分布的形状和离散程度。如果概率分布中存在概率为0的事件,entropy函数就会返回-inf。 一种可能的情况是,当概率分布中的某些事件的概率为0时,entropy函数会返回-inf。这意味着这些事件是确定性事件,概率是零,因此它们对整体的不确定性没有贡献。 解决这个问题的方法是检查输入概率分布,确保每个事件都有非零的概率。如果发现有概率为0的事件,可以通过增加一个很小的非零概率来修复它们,以避免entropy函数返回-inf。 另一种可能的情况是输入的概率分布不是标准概率分布,即概率之和不等于1。在这种情况下,经过调整的概率分布可能会导致entropy函数返回-inf。要解决这个问题,需要确保概率分布的总和为1,可以通过归一化概率分布来实现。 总之,当使用Python中的scipy.stats库的entropy函数时,遇到-inf的问题是由于输入的概率分布有误导致的。检查概率分布中是否存在概率为0的事件,并通过增加一个很小的非零概率来修复它们,或者确保概率分布的总和为1,可以解决这个问题。 ### 回答3: 当使用Python调用`from scipy.stats import entropy`时,如果出现`-inf`的情况,可能是由于输入的概率分布中存在概率为零的事件导致的。 熵是概率分布的一个度量,它衡量了该分布的不确定性或信息量。在计算熵时,需要通过传递一个概率分布数组作为输入。 如果概率分布中存在概率为零的事件,即某个事件的概率为0,就会导致熵的计算结果为`-inf`。这是因为在信息论中,概率为零的事件被认为是绝对确定性的事件,因此它不会提供任何信息,熵也就变为负无穷。 为了避免出现`-inf`的情况,需要确保输入的概率分布中没有概率为零的事件。可以检查传递给`entropy`函数的概率分布数组,查看是否存在概率为零的元素。如果存在,可以尝试调整输入的概率分布,确保所有的概率都大于零或非零,并再次进行计算。 另外,还可以检查代码中是否存在其他问题,比如使用了不正确的数据类型或输入格式,这些问题也可能导致`-inf`的结果。 综上所述,当Python调用`from scipy.stats import entropy`时出现`-inf`的情况,可能是因为输入的概率分布中存在概率为零的事件,需要检查并调整概率分布,确保输入的概率都大于零或非零。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值