信息论里,熵是可以度量随机变量的不确定性的,已经证明的:当随机变量呈均匀分布的时候,熵值最大,一个有序的系统有着较小的熵值,无序系统的熵值则较大。
机器学习里面,最大熵原理假设:描述一个概率分布的时候,在满足所有约束条件的情况下,熵值最大的模型是最好的。
我们假设:对于离散随机变量x,假设x有M哥取值,记
,那么他的熵就被定义为:
对于连续变量x,假设他的概率密度函数是
,那么,他的熵就是:
首先,看最大熵模型的导出:
和之前一样,给定一个大小为m的集合:
假设输入变量为X,输出变量是Y,用频率来代替概率,可以估计出X的边缘分布和
的联合分布为:
其中,
和
分别表示训练样本中
的出现的频数和X=x出现的频数,在样本量足够大的情况下,我们可以认为
反映了真实的样本分布,基于这个,最大熵模型可以用条件熵来进行建模,而非最大熵原理中一般意义上的熵,这样就间接起到了缩小模型假设空间的作用。
根据定义,最大熵模型是在满足一定约束条件下熵最大的模型,其思路就是:从样本集合在使用特征函数
来抽取特征,然后希望特征函数
关于经验联合分布
的期望,等于特征函数
关于模型
和经验边缘分布
的期望。
特征函数关于经验联合分布的期望定义为:
特征函数
关于模型
和经验边缘分布
的期望:
也就是希望:
我们称
为乘法准则,最大熵模型的约束希望在不同的特征函数
下通过估计
的参数来满足乘法准则。那么,最大熵模型的学习过程就可以转换成一个最优化问题的求解过程,就是在给定若干特征提取函数
以及y的所有可能值集合C的条件下,求解:
把这个最大化问题转换成最小化问题,即min-H(p),可以用拉格朗日乘子法来求解:
其中的Omega是映入的拉格朗日乘子,通过最优化
,可以得到:
其中,
最大熵模型和逻辑回归之间的关系:对于多分类问题(k不小于2),我们可以定义
,那么:
其中:
这时,,最大熵模型等价于多分类逻辑回归。
最大熵模型可以通过拟牛顿法,梯度下降法等方法学习。
然后我们来看一下书上给额度利用逻辑回归模型实现乳腺癌的预测:
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
cancer=load_breast_cancer()
x_train,x_test,y_train,y_test=train_test_split(cancer.data,cancer.target,test_size=0.2)
model=LogisticRegression()
model.fit(x_train,y_train)
train_score=model.score(x_train,y_train)
test_score=model.score(x_test,y_test)
print("train score:{train_score:.6f};test score:{test_score:.6f}".format(train_score=train_score,test_score=test_score))
图1:结果展示