当前位置:   article > 正文

Python机器学习:最大熵模型_python求最大熵模型

python求最大熵模型

信息论里,熵是可以度量随机变量的不确定性的,已经证明的:当随机变量呈均匀分布的时候,熵值最大,一个有序的系统有着较小的熵值,无序系统的熵值则较大。

机器学习里面,最大熵原理假设:描述一个概率分布的时候,在满足所有约束条件的情况下,熵值最大的模型是最好的。

我们假设:对于离散随机变量x,假设x有M哥取值,记p_i=P(x=i),那么他的熵就被定义为:

H(p)=-\sum_{i=1}^{M}p_i \ln p_i

对于连续变量x,假设他的概率密度函数是f(x),那么,他的熵就是:

H(f)=\int f(x)\ln f(x)

首先,看最大熵模型的导出:

和之前一样,给定一个大小为m的集合:D=\left \{ (x_1,y_1), (x_2,y_2),\cdots , (x_m,y_m)\right\}假设输入变量为X,输出变量是Y,用频率来代替概率,可以估计出X的边缘分布和(X,Y)的联合分布为:

\left\{\begin{matrix} \widetilde{p}(x,y)=\frac{N_{x,y}}{m} & \\ \widetilde{p}(x)=\frac{N_x}{m}& \end{matrix}\right.

其中,N_{x,y}N_{x}分别表示训练样本中(X=x,Y=y)的出现的频数和X=x出现的频数,在样本量足够大的情况下,我们可以认为\widetilde{p}(x)反映了真实的样本分布,基于这个,最大熵模型可以用条件熵来进行建模,而非最大熵原理中一般意义上的熵,这样就间接起到了缩小模型假设空间的作用。

H(p)=-\sum_{(x,y)\in D}\widetilde{p}(x)P(y|x)\log P(y|x)

根据定义,最大熵模型是在满足一定约束条件下熵最大的模型,其思路就是:从样本集合在使用特征函数f(x,y)来抽取特征,然后希望特征函数f(x,y)关于经验联合分布\widetilde{p}(x,y)的期望,等于特征函数f(x,y)关于模型p(y|x)和经验边缘分布\widetilde{p}(x)的期望。

特征函数关于经验联合分布的期望定义为:

E_{\widehat{p}}(f)=\sum \widehat{p}(x,y)f(x,y)

 特征函数f(x,y)关于模型p(y|x)和经验边缘分布\widetilde{p}(x)的期望:

E_{p}(f)=\sum_{(x,y)\in D}\widetilde{p}(x)p(y|x)f(x,y)

也就是希望:

\widetilde{p}(x,y)=\widetilde{p}(x)p(y|x)

我们称p(x,y)=p(x)p(y|x)为乘法准则,最大熵模型的约束希望在不同的特征函数f(x,y)下通过估计p(y|x)的参数来满足乘法准则。

那么,最大熵模型的学习过程就可以转换成一个最优化问题的求解过程,就是在给定若干特征提取函数f_i(x,y),i=1,2,3,\cdots,M以及y的所有可能值集合C的条件下,求解:

\left\{\begin{matrix} max H(p)=-\sum_{(x,y)\in D}\widetilde{p}(x)p(y|x)\log p(y|x) & \\ s.t. E_{\widetilde{p}}(f_i)=E_p(f_i)&\\ \sum_{y\in C}p(y|x)=1& \end{matrix}\right.

把这个最大化问题转换成最小化问题,即min-H(p),可以用拉格朗日乘子法来求解:

Lag(p,\omega)=-H(p)+\omega_0 (1-\sum_{y\in C}p(y|x))+\sum_{i=1}^{M}\omega_i(E_p(f_i)-E_{\widetilde{p}})(f_i)

其中的Omega是映入的拉格朗日乘子,通过最优化Lag(p,\omega),可以得到:

p_{\omega}(y|x)=\frac{1}{Z_{\omega(x)}}e^{\sum_{i=1}^{M}\omega_if_x(xy)}

其中,

Z_{\omega}(x)=\sum_{y\in C}e^{\sum_{i=1}^{M}\omega_if_i(x,y)}

最大熵模型和逻辑回归之间的关系:对于多分类问题(k不小于2),我们可以定义f_i(x,y=c_k)=\lambda_ik x_i,那么:

p_{\omega}(y=c_k|x)=\frac{1}{Z_\omega(x)}e^{\sum_{i=1}^{M} \omega_i f_i(x,y)}=\frac{1}{Z_\omega(x)}e^{a_k^{T}x}

其中:

\left\{\begin{matrix} Z_\omega(x)=\sum_{y \in C}(\sum_{i=1}^{M}\omega_i f_i(x,y))=\sum_{i=1}^{K}e^{a_k^tX}& \\ a_k^T=(\omega_1\lambda_{1k},\omega_2\lambda_{2k},\cdots,\omega_M\lambda_{Mk})^T& \end{matrix}\right.

这时,,最大熵模型等价于多分类逻辑回归。

最大熵模型可以通过拟牛顿法,梯度下降法等方法学习。

然后我们来看一下书上给额度利用逻辑回归模型实现乳腺癌的预测:

  1. from sklearn.datasets import load_breast_cancer
  2. from sklearn.linear_model import LogisticRegression
  3. from sklearn.model_selection import train_test_split
  4. cancer=load_breast_cancer()
  5. x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.2)
  6. model=LogisticRegression()
  7. model.fit(x_train,y_train)
  8. train_score=model.score(x_train,y_train)
  9. test_score=model.score(x_test,y_test)
  10. print("train score:{train_score:.6f};test score:{test_score:.6f}".format(train_score=train_score,test_score=test_score))
图1:结果展示

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/757562
推荐阅读
相关标签
  

闽ICP备14008679号