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