先说明一下:本篇博客不是关于最大熵模型的介绍,只是对模型结果的理解。更准确地讲,是对张乐博士的maxent开源库的理解。所以,读者应按其所需选择是否继续。
最大熵模型就是要在满足下面式子的前提下使得整个解的信息熵最大化。式子如下:
\sum \tilde P(x) P(y|x) f(x,y) = \sum \tilde P(x,y) f(x,y)
因为这里的博客似乎不支持数学公式的编写,所以我这里简单说明一下:\sum表示的是求和符号,它表示对所有实例进行求和,\tilde P表示的是训练数据集的真实概率,而P则表示理论计算的概率。x是特征,y是打的标签。x与y的同时出现表示一个可统计的特征,此时f(x,y)=1,否则为0。 下面我们就用此式来理解一下maxent出来的结果:
比如,训练样本是:
P tb
P tb
P ta
P ta
N ta
N ta
N ta
N ta
N tb
P和N是两个标签,意思分别是正例和反例。ta和tb是两个特征。这时,跑出来的结果是:
P(P | ta) = 0.429
P(P | tb) = 0.667
用上面的公式不难理解:
\tilde P(ta) = 0.7
\tilde P(ta, P) = 0.3
所以,0.7 * P(P | ta) = 0.3 ===> P(P | ta) = 0.429
同理可推出P(P | tb)
如果某些实例有多个特征,那么在计算时我们对每个特征分别进行计算。比如,下面的训练数据:
P tb
P tb
P ta
P ta
N ta
N ta
N ta
N ta tb
N tb
此时,\tilde P(ta) = 0.5; \tilde P(tb) = 0.3; \tilde P(ta, tb) = 0.2
在考察ta特征时:
0.5 * P(P | ta) + 0.2 * P(P | ta, tb) = \tilde P(ta, P) = 0.3 (同时出现ta和P的实例一共3个)
而在考察tb特征时:
0.3 * P(P | tb) + 0.2 * P(P | ta, tb) = \tilde P(tb, P) = 0.3 (同时出现tb和P的实例一共3个)
我们运行的结果是: