之前作为scipy.maxentropy提供的最大熵建模代码
项目描述
scipy-maxentropy:最大熵模型
这是之前在SciPy(至版本0.10.1)中可用的scipy.maxentropy
包。由于维护不足,后来在SciPy 0.11中被移除。现在,为了向后兼容,它作为一个独立的包提供。
对于新项目,请考虑使用maxentropy包,它提供了一个更现代的scikit-learn兼容API。
目的
此包拟合“指数族”模型,包括最大熵模型和对其他模型的最小KL散度模型,同时受任意特征统计预期的线性约束。应用包括自然语言处理和理解的语料库模型、机器翻译、环境物种建模、图像重建等。
快速入门
以下是一个基于Berger等人在1996年《计算语言学》上发表的论文《自然语言处理的最大熵方法》中的简单机器翻译示例的快速使用示例。
考虑将英语单词“in”翻译成法语。假设我们在平行文本语料库中注意到以下事实
(1) p(dans) + p(en) + p(à) + p(au cours de) + p(pendant) = 1
(2) p(dans) + p(en) = 3/10
(3) p(dans) + p(à) = 1/2
此代码在这些约束下找到最大熵的概率分布。
from scipy_maxentropy import Model # previously scipy.maxentropy
samplespace = ['dans', 'en', 'à', 'au cours de', 'pendant']
def f0(x):
return x in samplespace
def f1(x):
return x=='dans' or x=='en'
def f2(x):
return x=='dans' or x=='à'
f = [f0, f1, f2]
model = Model(f, samplespace)
# Now set the desired feature expectations
b = [1.0, 0.3, 0.5]
model.verbose = False # set to True to show optimization progress
# Fit the model
model.fit(b)
# Output the distribution
print()
print("Fitted model parameters are:\n" + str(model.params))
print()
print("Fitted distribution is:")
p = model.probdist()
for j in range(len(model.samplespace)):
x = model.samplespace[j]
print(f" x = {x + ':':15s} p(x) = {p[j]:.3f}")
# Now show how well the constraints are satisfied:
print()
print("Desired constraints:")
print(" sum(p(x)) = 1.0")
print(" p['dans'] + p['en'] = 0.3")
print(" p['dans'] + p['à'] = 0.5")
print()
print("Actual expectations under the fitted model:")
print(f" sum(p(x)) = {p.sum():.3f}")
print(f" p['dans'] + p['en'] = {p[0] + p[1]:.3f}")
print(f" p['dans'] + p['à'] = {p[0] + p[2]:.3f}")
可用的模型
以下模型类可用
scipy_maxentropy.Model
:用于离散、可枚举的样本空间上的模型scipy_maxentropy.ConditionalModel
:用于离散、可枚举的样本空间上的条件模型scipy_maxentropy.BigModel
:用于样本空间既可以是连续的(可能高维)也可以是离散但太大而无法枚举的模型,如自然语言中所有可能的句子。此模型使用条件蒙特卡洛方法(主要是重要性抽样)。
背景
本包适用于以下指数形式的概率模型
$$ p(x) = \frac{p_0(x) \exp(\theta^T f(x))}{Z(\theta; p_0)} $$
其中 $\theta$ 是一个长度为 $n$ 的实参数向量,与特征统计量 $f(x) = \left(f_1(x), ..., f_n(x)\right)$ 的长度相同。
这是在以下特征期望的附加约束条件下,与先验模型 $p_0$ “最接近”的模型(从最小化KL散度或“相对熵”的角度来说):
E f_1(X) = b_1
...
E f_n(X) = b_n
对于某些常数 $b_i$,例如从数据集中估计的统计量。
在 $p_0$ 是均匀分布的特殊情况下,这是在约束条件下“最平坦”的模型,即在具有 最大熵 的意义上。
更多背景信息,请参阅,例如,Cover和Thomas(1991)的《信息论要素》。
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
scipy_maxentropy-1.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 715413e8233f5689078507ff26228df156f1503e5f0569abeaa22ffdb5244877 |
|
MD5 | 48dcee82214c124f1faccf8f06d13997 |
|
BLAKE2b-256 | 5e3914d67a5ddd03acfc424006c0ad9769fa1ede953e0c72367db6f5e01411ef |
scipy_maxentropy-1.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2cd3c1d95b3aadee3ec1d081e19a5dfec74bd9c2ca8208950c9263110f836174 |
|
MD5 | ebcdf3f161b9d5248ff30ec4c7299d06 |
|
BLAKE2b-256 | ad3dfd110f1aafc99a27030bd585fd27829abd88cbe5b73e362f31b244d7f159 |