跳转到主要内容

之前作为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 (27.1 kB 查看哈希)

上传时间

构建分布

scipy_maxentropy-1.0-py3-none-any.whl (27.7 kB 查看哈希)

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面