Bio.HMM.Trainer 模块

提供基于训练序列估计参数的训练器。

这些应该用于在实际使用马尔可夫模型解码状态路径之前“训练”它。当提供训练序列和模型时,这些类将估计模型的参数。

这旨在估计两个参数

  • a_{kl} – 训练数据中从 k 到 l 的转移次数。

  • e_{k}(b) – 训练数据中从字母 k 发射字母 b 的次数。

class Bio.HMM.Trainer.TrainingSequence(emissions, state_path)

基类: object

保存一个带有发射和可选状态路径的训练序列。

__init__(emissions, state_path)

初始化训练序列。

参数
  • emissions - 包含训练序列中发射序列的可迭代对象(例如,元组、列表或 Seq 对象)。

  • state_path - 包含状态序列的可迭代对象(例如,元组或列表)。如果未知状态路径,则状态序列应为空可迭代对象。

class Bio.HMM.Trainer.AbstractTrainer(markov_model)

基类: object

提供所有训练器中所需的通用功能。

__init__(markov_model)

初始化类。

log_likelihood(probabilities)

计算训练序列的对数似然。

参数
  • probabilities – 在当前参数下每个训练序列的概率列表,使用前向算法计算。

estimate_params(transition_counts, emission_counts)

获取转移和发射的最大似然估计。

参数
  • transition_counts – 包含两个状态之间转移的总计数值的字典。

  • emissions_counts – 包含状态字母发出特定发射字母的总计数值的字典。

然后返回转移和发射的最大似然估计器,根据 Durbin 等人的公式 3.18 估计。

a_{kl} = A_{kl} / sum(A_{kl'})
e_{k}(b) = E_{k}(b) / sum(E_{k}(b'))

返回值: 包含最大似然估计器的转移和发射字典。

ml_estimator(counts)

计算最大似然估计器。

这可以计算转移和发射的最大似然。

参数
  • counts – 每个项目的计数值字典。

有关所用计算公式的描述,请参阅 estimate_params。

class Bio.HMM.Trainer.BaumWelchTrainer(markov_model)

基类: AbstractTrainer

使用 Baum-Welch 算法估计参数的训练器。

当 HMM 的训练序列具有未知的实际状态路径时,应该使用这些方法,你需要从观察到的发射中估计模型参数。

这使用 Baum-Welch 算法,该算法首先在 Baum, L.E. 1972. Inequalities. 3:1-8 中描述。这基于 Durbin 等人在“生物序列分析”中第 3.3 节的描述。

该算法保证收敛到局部最大值,但不一定是全局最大值,因此使用时要谨慎!

__init__(markov_model)

初始化训练器。

参数
  • markov_model - 我们要估计参数的模型。这应该具有带有初始估计的参数,我们可以从中构建。

train(training_seqs, stopping_criteria, dp_method=ScaledDPAlgorithms)

使用训练序列估计参数。

该算法来自 Durbin 等人的第 64 页,因此是了解正在发生的事情的良好参考。

参数
  • training_seqs – 用于估计参数的 TrainingSequence 对象列表。

  • stopping_criteria – 当传递对数似然的更改和阈值时,将指示是否应该停止估计迭代的函数。

  • dp_method – 指定应使用哪个动态规划实现来计算前向和后向变量的类实例。默认情况下,我们使用缩放方法。

update_transitions(transition_counts, training_seq, forward_vars, backward_vars, training_seq_prob)

将新训练序列的贡献添加到转移中。

参数
  • transition_counts – 转移的当前计数字典。

  • training_seq – 我们正在处理的训练序列。

  • forward_vars – 使用前向算法计算的概率。

  • backward_vars – 使用后向算法计算的概率。

  • training_seq_prob - 当前序列的概率。

这使用 Durbin 等人的公式 3.20 计算 A_{kl}(从状态 k 到状态 l 的估计转移计数)。

update_emissions(emission_counts, training_seq, forward_vars, backward_vars, training_seq_prob)

将新训练序列的贡献添加到发射中。

参数
  • emission_counts – 发射的当前计数字典。

  • training_seq – 我们正在处理的训练序列。

  • forward_vars – 使用前向算法计算的概率。

  • backward_vars – 使用后向算法计算的概率。

  • training_seq_prob - 当前序列的概率。

这使用 Durbin 等人的公式 3.21 计算 E_{k}(b)(从状态 k 发射字母 b 的估计发射概率)。

class Bio.HMM.Trainer.KnownStateTrainer(markov_model)

基类: AbstractTrainer

使用已知状态序列估计概率。

当训练示例的状态路径和发射序列都已知时,应该使用此方法直接估计发射和转移概率。

__init__(markov_model)

初始化类。

train(training_seqs)

使用已知状态路径估计马尔可夫模型参数。

此训练器要求 TrainingSequence 对象列表中的所有训练序列的状态和发射都已知。然后,该训练将计算所有转移和发射,并使用这些来估计模型的参数。