Bio.HMM.Trainer 模組

提供根據訓練序列估計參數的訓練器。

這些應該在實際使用馬可夫模型解碼狀態路徑之前,先「訓練」馬可夫模型。當提供訓練序列和一個模型來使用時,這些類別將會估計模型的參數。

這旨在估計兩個參數

  • a_{kl} – 在訓練資料中,從 k 到 l 的轉換次數。

  • e_{k}(b) – 在訓練資料中,從字母 k 發出狀態 b 的次數。

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

基底類別: object

保存一個帶有發射 (emissions) 和可選狀態路徑的訓練序列。

__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 等人的 p64,因此這是一個很好的參考資料,可以了解正在發生的事情。

參數
  • 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 物件列表中所有訓練序列的狀態和發射都是已知的。然後,此訓練將計算所有轉換和發射,並使用此資訊來估計模型的參數。