2021-02-21 13:51:58
用于表示和处理概率信息的类。
这个 FreqDist 类用于编码“频率分布”,它计算实验的每个结果发生的次数。
这个 ProbDistI 类为“概率分布”定义了一个标准接口,该接口对实验的每个结果的概率进行编码。概率分布有两种类型:
“导出概率分布”是根据频率分布创建的。他们试图模拟产生频率分布的概率分布。“分析概率分布”直接由参数(如方差)创建。
这个 ConditionalFreqDist 类和 ConditionalProbDistI 接口用于对条件分布进行编码。条件概率分布可以推导或分析;但目前唯一的实现是 ConditionalProbDistI 接口是 ConditionalProbDist ,派生分布。
nltk.probability.ConditionalFreqDist(cond_samples=None)[源代码]基类:collections.defaultdict
在不同条件下运行的单个实验的频率分布集合。条件频率分布用于记录每个样本发生的次数,给定实验运行的条件。例如,条件频率分布可以用来记录文档中每个单词(类型)的频率(给定其长度)。形式上,条件频率分布可以定义为一个函数,在该条件下从每个条件映射到实验的频率分布。
条件频率分布通常是通过在各种条件下重复运行一个实验,并在适当条件下增加样本结果计数来构建的。例如,下面的代码将生成一个条件频率分布,该分布编码每种单词类型发生的频率(给定该单词类型的长度):
>>> from nltk.probability import ConditionalFreqDist >>> from nltk.tokenize import word_tokenize >>> sent = "the the the dog dog some other words that we do not care about" >>> cfdist = ConditionalFreqDist() >>> for word in word_tokenize(sent): ... condition = len(word) ... cfdist[condition][word] += 1
这样做的等效方法是使用初始值设定项:
>>> cfdist = ConditionalFreqDist((len(word), word) for word in word_tokenize(sent))
使用索引运算符访问每个条件的频率分布:
>>> cfdist[3]
FreqDist({'the': 3, 'dog': 2, 'not': 1})
>>> cfdist[3].freq('the')
0.5
>>> cfdist[3]['dog']
2
当使用索引运算符访问以前未访问过的条件的频率分布时, ConditionalFreqDist 为该条件创建新的空freqdist。
N()[源代码]返回此记录的样本结果总数 ConditionalFreqDist .
int
conditions()[源代码]返回为此访问的条件列表 ConditionalFreqDist . 使用索引运算符访问给定条件的频率分布。注意,某些条件下的频率分布可能包含零样本结果。
list
plot(*args, **kwargs)[源代码]根据条件频率分布绘制给定样本。对于累积图,指定cumulative=true。(需要安装Matplotlib。)
samples (list) -- 要绘制的样本
title (str) -- 图表的标题
conditions (list) -- 要绘制的条件(默认为全部)
tabulate(*args, **kwargs)[源代码]将条件频率分布中给定的样本制成表格。
samples (list) -- 要绘制的样本
conditions (list) -- 要绘制的条件(默认为全部)
cumulative -- 用于指定频率是否累积的标志(默认值=假)
nltk.probability.ConditionalProbDist(cfdist, probdist_factory, *factory_args, **factory_kw_args)[源代码]基类:nltk.probability.ConditionalProbDistI
一个条件概率分布模型的实验,用来产生一个条件频率分布。ConditionalProbDist由 ConditionalFreqDist 和A ProbDist 工厂:
这个 ConditionalFreqDist 指定每个条件的频率分布。
这个 ProbDist 工厂是一个函数,它接受一个条件的频率分布,并返回其概率分布。一 ProbDist 类的名称(例如 MLEProbDist 或 HeldoutProbDist )可用于指定该类的构造函数。
第一个论点 ProbDist factory是应该建模的频率分布;其余参数由 factory_args 参数 ConditionalProbDist 构造函数。例如,以下代码构造 ConditionalProbDist ,其中每个条件的概率分布是 ELEProbDist 有10个箱子:
>>> from nltk.corpus import brown
>>> from nltk.probability import ConditionalFreqDist
>>> from nltk.probability import ConditionalProbDist, ELEProbDist
>>> cfdist = ConditionalFreqDist(brown.tagged_words()[:5000])
>>> cpdist = ConditionalProbDist(cfdist, ELEProbDist, 10)
>>> cpdist['passed'].max()
'VBD'
>>> cpdist['passed'].prob('VBD')
0.423...
nltk.probability.ConditionalProbDistI[源代码]基类:dict
在不同条件下运行的单个实验的概率分布集合。条件概率分布是用来估计每一个样本的可能性,给定的条件下,实验运行。例如,根据单词类型的长度,可以使用条件概率分布来估计文档中每个单词类型的概率。形式上,条件概率分布可以定义为从每个条件映射到 ProbDist 在那种条件下的实验。
conditions()[源代码]返回由此表示的条件列表 ConditionalProbDist . 使用索引运算符访问给定条件的概率分布。
list
nltk.probability.CrossValidationProbDist(freqdists, bins)[源代码]实验概率分布的交叉验证估计用于生成一组频率分布。样本概率的“交叉验证估计”是通过平均每对频率分布中样本的保留估计得出的。
discount()[源代码]返回计数平均折扣率:c*/c
float
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.DictionaryConditionalProbDist(probdist_dict)[源代码]基类:nltk.probability.ConditionalProbDistI
另一种条件probdist,它只包装probdist的字典,而不是从freqdist创建这些字典。
nltk.probability.DictionaryProbDist(prob_dict=None, log=False, normalize=False)[源代码]一种概率分布,其概率由给定的字典直接规定。给定的字典将样本映射到概率。
logprob(sample)[源代码]返回给定样本概率的底2对数。
sample (any) -- 应返回其概率的样本。
float
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.ELEProbDist(freqdist, bins=None)[源代码]基类:nltk.probability.LidstoneProbDist
用于生成频率分布的实验概率分布的预期似然估计。“预期可能性估计”用计数来近似一个样本的概率。 c 从一个实验 N 结果与 B 箱作为 (c+0.5)/(N+B/2) . 这相当于在每个存储单元的计数中加上0.5,并对产生的频率分布进行最大似然估计。
nltk.probability.FreqDist(samples=None)[源代码]基类:collections.Counter
实验结果的频率分布。频率分布记录了每一个实验结果发生的次数。例如,频率分布可以用来记录文档中每种单词类型的频率。从形式上讲,频率分布可以定义为从每个样本到样本作为结果出现的次数的函数映射。
频率分布通常是通过运行一些实验来构建的,并且每次作为一个实验的结果时,增加一个样本的计数。例如,以下代码将生成一个频率分布,该频率分布编码文本中每个单词的出现频率:
>>> from nltk.tokenize import word_tokenize >>> from nltk.probability import FreqDist >>> sent = 'This is an example sentence' >>> fdist = FreqDist() >>> for word in word_tokenize(sent): ... fdist[word.lower()] += 1
这样做的等效方法是使用初始值设定项:
>>> fdist = FreqDist(word.lower() for word in word_tokenize(sent))
B()[源代码]返回计数大于零的样本值(或“bin”)的总数。对于记录的样本结果总数,使用 FreqDist.N() . (freqdist.b()与len(freqdist)相同。)
int
N()[源代码]返回此freqdist记录的样本结果总数。对于计数大于零的唯一样本值(或箱)的数量,请使用 FreqDist.B() .
int
Nr(r, bins=None)[源代码]freq(sample)[源代码]返回给定样本的频率。样本频率定义为该样本的计数除以该freqdist记录的样本结果总数。样本计数定义为此freqdist记录样本结果的次数。频率总是范围内的实数 [0, 1] .
sample (any) -- 应返回其频率的样本。
float
hapaxes()[源代码]返回一次出现的所有样本的列表(hapax legomena)
list
max()[源代码]返回此频率分布中结果数量最多的样本。如果两个或多个样本具有相同数量的结果,则返回其中一个;返回的样本未定义。如果在这个频率分布中没有发生任何结果,则返回none。
在这个频率分布中具有最大结果数的样本。
any or None
pformat(maxlen=10)[源代码]返回此freqdist的字符串表示形式。
maxlen (int) -- 要显示的最大项目数
string
plot(*args, **kwargs)[源代码]从频率分布中绘制样本,首先显示最频繁的样本。如果提供了一个整数参数,请在绘制了这么多样本后停止。对于累积图,指定cumulative=true。(需要安装Matplotlib。)
title (bool) -- 图表的标题
cumulative -- 用于指定绘图是否累积的标志(默认值=假)
pprint(maxlen=10, stream=None)[源代码]将此freqdist的字符串表示形式打印到“stream”
maxlen (int) -- 要打印的最大项目数
stream -- 要打印到的流。默认为标准输出
r_Nr(bins=None)[源代码]返回字典映射r到nr,即频率为r的样本数,其中nr>0。
bins (int) -- 可能的样本结果数。 bins 用于计算nr(0)。特别是,nr(0)是 bins-self.B() . 如果 bins 未指定,默认为 self.B() (因此nr(0)将为0)。
int
setdefault(key, val)[源代码]重写 Counter.setdefault() 使缓存的n无效
tabulate(*args, **kwargs)[源代码]将频率分布(累积)中给定的样本制成表格,首先显示最频繁的样本。如果提供了一个整数参数,请在绘制了这么多样本后停止。
samples (list) -- 要绘制的样本(默认为所有样本)
cumulative -- 用于指定频率是否累积的标志(默认值=假)
update(*args, **kwargs)[源代码]重写 Counter.update() 使缓存的n无效
nltk.probability.HeldoutProbDist(base_fdist, heldout_fdist, bins=None)[源代码]实验概率分布的Heldout估计用于生成两个频率分布。这两种频率分布称为“Heldout频率分布”和“基频分布”。“Heldout估计”使用“Heldout频率分布”预测每个样本的概率,给定其在“基频分布”中的频率。
特别是,Heldout估计近似于样本发生的概率。 r 基本分布中的时间,作为所有样本Heldout分布中的平均频率 r 基本分布中的时间。
这个平均频率是 [Tr[r]/(Nr[r].N)] ,其中:
[Tr[R]] 是heldout分布中发生的所有样本的总数 r 基本分布中的时间。
[NR[R]] 是发生的样本数 r 基本分布中的时间。
N 是Heldout频率分布记录的结果数。
为了提高 prob 成员函数, [Tr[r]/(Nr[r].N)] 为每个值预计算 r 当 HeldoutProbDist 创建。
_estimate -- 列表映射来自 r ,样本在基本分布中出现的次数,到该样本的概率估计。 _estimate[r] 计算方法是求出所有样本的Heldout分布的平均频率。 r 基本分布中的时间。特别地, _estimate[r] = [Tr[r]/(Nr[r].N)] .
_max_r -- 任何样本在基分布中出现的最大次数。 _max_r 用来决定有多大 _estimate 必须是。
discount()[源代码]返回计数平均折扣率:c*/c
float
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.ImmutableProbabilisticMixIn(**kwargs)[源代码]基类:nltk.probability.ProbabilisticMixIn
set_logprob(prob)[源代码]将与此对象关联的日志概率设置为 logprob . 即,将与此对象关联的概率设置为 2**(logprob) .
logprob (float) -- 新的对数概率
set_prob(prob)[源代码]将与此对象关联的概率设置为 prob .
prob (float) -- 新概率
nltk.probability.KneserNeyProbDist(freqdist, bins=None, discount=0.75)[源代码]Kneser-Ney概率分布的估计。这是一个后退的版本,计算一个n-gram在训练中被看到的可能性。扩展probdist接口,需要在trigram freqdist实例上进行训练。或者,可以指定不同于默认折扣值的值。默认折扣设置为0.75。
discount()[源代码]返回对计数进行折扣的值。默认设置为0.75。
float
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(trigram)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
set_discount(discount)[源代码]将计数的折扣值设置为折扣值。
discount (float (preferred, but int possible)) -- 折扣的新值按
None
nltk.probability.LaplaceProbDist(freqdist, bins=None)[源代码]基类:nltk.probability.LidstoneProbDist
拉普拉斯估计用于产生频率分布的实验的概率分布。“拉普拉斯估计”用计数近似一个样本的概率。 c 从一个实验 N 结果与 B 箱作为 (c+1)/(N+B) . 这相当于在每个存储单元的计数中添加一个,并对生成的频率分布进行最大似然估计。
nltk.probability.LidstoneProbDist(freqdist, gamma, bins=None)[源代码]用于产生频率分布的实验概率分布的Lidstone估计。“Lidstone估计”由实数参数化。 伽马 ,通常在0到1之间。Lidstone估计近似于具有计数的样本的概率。 c 从一个实验 N 结果与 B 箱作为 c+gamma)/(N+B*gamma) . 这相当于添加 伽马 对每个存储单元进行计数,并对得到的频率分布进行最大似然估计。
discount()[源代码]返回计数平均折扣率:c*/c
float
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.MLEProbDist(freqdist, bins=None)[源代码]用于产生频率分布的实验概率分布的最大似然估计。“最大似然估计”将每个样本的概率近似为频率分布中该样本的频率。
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.MutableProbDist(prob_dist, samples, store_logs=True)[源代码]一种可变的概率分布,其概率很容易被修改。这只需复制现有probdist,将概率值存储在可变字典中,并提供更新方法。
logprob(sample)[源代码]返回给定样本概率的底2对数。
sample (any) -- 应返回其概率的样本。
float
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
update(sample, prob, log=True)[源代码]更新给定样本的概率。这可能导致对象不再是有效的概率分布-用户必须确保更新样本概率,使所有样本的概率都在0和1之间,并且所有概率总和为1。
sample (any) -- 更新概率的样本
prob (float) -- 新概率
log (bool) -- 概率已经记录了吗
nltk.probability.ProbDistI[源代码]基类:object
实验结果的概率分布。概率分布指定了一个实验有任何给定结果的可能性。例如,概率分布可用于预测文档中令牌具有给定类型的概率。形式上,概率分布可以定义为从样本到非负实数的函数映射,这样函数范围内每个数字的和为1.0。一 ProbDist 通常用来模拟实验的概率分布,用来产生频率分布。
discount()[源代码]返回计数平均折扣率:c*/c
float
generate()[源代码]从这个概率分布中返回随机选择的样本。返回每个样本的概率 samp 等于 self.prob(samp) .
logprob(sample)[源代码]返回给定样本概率的底2对数。
sample (any) -- 应返回其概率的样本。
float
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.ProbabilisticMixIn(**kwargs)[源代码]基类:object
将概率与其他类(树、规则等)关联在一起的类中的混合。使用 ProbabilisticMixIn 类,定义从现有类和ProbabilityMixin派生的新类。您需要为新类定义一个新的构造函数,它显式地调用两个父类的构造函数。例如:
>>> from nltk.probability import ProbabilisticMixIn >>> class A: ... def __init__(self, x, y): self.data = (x,y) ... >>> class ProbabilisticA(A, ProbabilisticMixIn): ... def __init__(self, x, y, **prob_kwarg): ... A.__init__(self, x, y) ... ProbabilisticMixIn.__init__(self, **prob_kwarg)
概率混合见文档 constructor<__init__> 有关它期望的参数的信息。
通常还应该重新定义字符串表示方法、比较方法和哈希方法。
logprob()[源代码]返回 log(p) 在哪里 p 是与此对象关联的概率。
float
prob()[源代码]返回与此对象关联的概率。
float
set_logprob(logprob)[源代码]将与此对象关联的日志概率设置为 logprob . 即,将与此对象关联的概率设置为 2**(logprob) .
logprob (float) -- 新的对数概率
set_prob(prob)[源代码]将与此对象关联的概率设置为 prob .
prob (float) -- 新概率
nltk.probability.SimpleGoodTuringProbDist(freqdist, bins=None)[源代码]在对数空间下,用线性回归方法将频率与频率之间的单纯形probdist近似为一条直线。简单良好的图灵算法的详细信息可在以下位置找到:
良好的图灵平滑无泪”(盖尔和桑普森1995年),《定量语言学杂志》,第2卷,第217-237页。
“语音和语言处理(Jurafsky&Martin),第2版,第4.5章P103(Log(NC)=A+B*Log(C))”
给定一组对(Xi,Yi),其中XI表示频率,Yi表示频率的频率,我们希望最小化它们的平方变化。E(X)和E(Y)代表Xi和Yi的平均值。
斜率:b=sigma((xi-e(x)(yi-e(y)))/sigma((xi-e(x))(xi-e(x)))
截距:a=e(y)-b.e(x)
check()[源代码]discount()[源代码]此函数返回从已看到样本到未看到样本的概率转移总质量。
find_best_fit(r, nr)[源代码]使用简单的线性回归来根据计数和nr(计数)调整日志空间中的参数self.u slope和self.u intercept(在日志空间中工作以避免浮点下溢)。
freqdist()[源代码]max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回样本的概率。
sample (str) -- 活动样本
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
smoothedNr(r)[源代码]返回计数为r的样本数。
r (int) -- 频率的数量。
float
nltk.probability.UniformProbDist(samples)[源代码]一种概率分布,它给给定集合中的每个样本分配相等的概率;给所有其它样本分配零概率。
max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.WittenBellProbDist(freqdist, bins=None)[源代码]概率分布的维特-贝尔估计。这个分布通过使用只看到一次的事件数,将统一的概率质量分配给尚未看到的事件。为未知事件保留的概率质量等于 T / (N + T) 在哪里? T 是观察到的事件类型的数量,以及 N 是观察到的事件总数。这相当于新类型事件发生的最大可能性估计。剩余的概率质量被贴现,所有的概率估计总和为1,得出:
p = T / Z (N + T) ,如果计数=0
p = c / (N + T) ,否则
discount()[源代码]返回计数平均折扣率:c*/c
float
freqdist()[源代码]max()[源代码]以最大的概率返回样本。如果两个或多个样本的概率相同,则返回其中一个;返回的样本未定义。
any
prob(sample)[源代码]返回给定样本的概率。概率总是范围内的实数。 [0, 1] .
sample (any) -- 应返回其概率的样本。
float
samples()[源代码]返回具有非零概率的所有样本的列表。使用 prob 找出每个样本的概率。
list
nltk.probability.add_logs(logx, logy)[源代码]给定两个数字 logx = 日志(X) 和 logy = 原木(Y) 返回 log(x+y) . 从概念上讲,这与返回相同 log(2**(logx)+2**(logy)) 但实际的实现避免了直接计算可能导致的溢出错误。
nltk.probability.entropy(pdist)[源代码]nltk.probability.log_likelihood(test_pdist, actual_pdist)[源代码]nltk.probability.sum_logs(logs)[源代码]想要了解NLTK,请点击这里
想要了解安装NLTK,请点击这里