Python机器学习算法实现
Author:louwill
Machine Learning Lab
最大熵原理(Maximum Entropy Principle)是一种基于信息熵理论的一般原理,在机器学习领域也有着广泛的应用价值。基于最大熵原理确定的分类模型也叫最大熵模型。所谓信息熵,即一种描述信息不确定程度的量。而最大熵方法认为熵在由已知信息得到的约束条件下的最大化概率分布是充分利用已知信息并对未知部分作最少的假定的概率分布。
信息熵
已知一个离散型随机变量
,其信息熵可以定义为:
若
为连续型随机变量,其信息熵可定义为:
其中
为分布函数的概率密度函数,
为离散点的概率分布。最大熵方法就是在给定约束条件下求得
或
使得熵
达到最大值,其本质上就是一个求解约束的最优化问题。
最大熵模型
假设目标分类模型是一个条件概率分布
,其中
表示输入,
表示输出,在给定输入
的情况下,以条件概率
输出
。在给定训练数据集的情况下,学习的目标就是选择最大熵模型作为目标模型。
在给定数据集的情况下,可以确定其联合概率分布
的经验分布
和边缘概率分布
的经验分布
。然后我们用特征函数
来描述输入输出之间的一个事实,
的定义为一个0-1函数,即
与
满足某一事实时取值为1,否则取值为0。
特征函数
关于经验分布
的期望值为
:
特征函数
关于模型
经验分布
的期望值为
:
如果模型能够从已知数据中获取足够的信息,我们就可以假设上述两个期望值相等,即有:
具体地:
上式即可作为最大熵模型学习的约束条件,如果有 个特征函数,即有 个约束条件。
假设满足上述特征函数构造的约束条件的模型集合为
,定义在模型集合中的条件熵
最大的模型即为最大熵模型:
给定特征函数条件和概率约束条件的情况下,最大熵模型的学习等价于求解约束最优化问题:
将上述最大化问题改写为最小化问题:
通过拉格朗日乘子法可将上述约束优化转化为无约束最优化问题,并将其原始问题转化为对偶问题进行求解,定义拉格朗日函数
:
最优化的原始问题为:
其对偶问题为:
针对该对偶问题的求解,我们可以先尝试求解其内部的极小化问题
,令:
其中:
将
对
求偏导并令为0,可解得:
其中:
由式
表示的模型即为最大熵模型。
然后即可求解外部极大化问题:
将其解记为
:
最大熵模型可以归结为对偶函数
的极大化,优化求解得到的
即为最终的最大熵模型。
最大熵算法实现
最大熵模型求解本质在于求解凸优化问题。本节就不针对该求解过程提供手写算法实现。借助于maxentropy库我们看以下最大熵模型的基本实现方式。
基于maxentropy的一个简单实现案例:
import numpy as np
import maxentropy
samplespace = np.arange(6) + 1
model = maxentropy.Model(samplespace)
model.verbose = True
# 设置特征期望值
K = [4.5]
# 拟合最大熵模型
model.fit(f, K)
求解过程如下:
查看拟合参数:
model.params
array([ 0.37354745])
实际求解时模型也可能存在不收敛的情况,可以尝试像BFGS等不同的优化算法进行求解。
参考资料:
李航 统计学习方法 第二版
https://pypi.org/project/maxentropy/
往期精彩:
数学推导+纯Python实现机器学习算法27:LDA线性判别分析
一个算法工程师的成长之路
长按二维码.关注机器学习实验室
喜欢您就点个在看!