Hidden Markov Models – Utility functions¶
AUTHOR:
- William Stein, 2010-03 
- class sage.stats.hmm.util.HMM_Util[source]¶
- Bases: - object- A class used in order to share cdef’s methods between different files. - initial_probs_to_TimeSeries(pi, normalize)[source]¶
- This function is used internally by the __init__ methods of various Hidden Markov Models. - INPUT: - pi– vector, list, or- TimeSeries
- normalize– if- True, replace negative entries by 0 and rescale to ensure that the sum of the entries in each row is equal to 1. If the sum of the entries in a row is 0, replace them all by \(1/N\).
 - OUTPUT: a - TimeSeriesof length \(N\)- EXAMPLES: - sage: import sage.stats.hmm.util sage: u = sage.stats.hmm.util.HMM_Util() sage: u.initial_probs_to_TimeSeries([0.1,0.2,0.9], True) [0.0833, 0.1667, 0.7500] sage: u.initial_probs_to_TimeSeries([0.1,0.2,0.9], False) [0.1000, 0.2000, 0.9000] - >>> from sage.all import * >>> import sage.stats.hmm.util >>> u = sage.stats.hmm.util.HMM_Util() >>> u.initial_probs_to_TimeSeries([RealNumber('0.1'),RealNumber('0.2'),RealNumber('0.9')], True) [0.0833, 0.1667, 0.7500] >>> u.initial_probs_to_TimeSeries([RealNumber('0.1'),RealNumber('0.2'),RealNumber('0.9')], False) [0.1000, 0.2000, 0.9000] 
 - normalize_probability_TimeSeries(T, i, j)[source]¶
- This function is used internally by the Hidden Markov Models code. - Replace entries of T[i:j] in place so that they are all nonnegative and sum to 1. Negative entries are replaced by 0 and T[i:j] is then rescaled to ensure that the sum of the entries in each row is equal to 1. If all entries are 0, replace them by 1/(j-i). - INPUT: - T– a- TimeSeries
- i– nonnegative integer
- j– nonnegative integer
 - OUTPUT: - Tis modified- EXAMPLES: - sage: import sage.stats.hmm.util sage: T = stats.TimeSeries([.1, .3, .7, .5]) sage: u = sage.stats.hmm.util.HMM_Util() sage: u.normalize_probability_TimeSeries(T,0,3) sage: T [0.0909, 0.2727, 0.6364, 0.5000] sage: u.normalize_probability_TimeSeries(T,0,4) sage: T [0.0606, 0.1818, 0.4242, 0.3333] sage: abs(T.sum()-1) < 1e-8 # might not exactly equal 1 due to rounding True - >>> from sage.all import * >>> import sage.stats.hmm.util >>> T = stats.TimeSeries([RealNumber('.1'), RealNumber('.3'), RealNumber('.7'), RealNumber('.5')]) >>> u = sage.stats.hmm.util.HMM_Util() >>> u.normalize_probability_TimeSeries(T,Integer(0),Integer(3)) >>> T [0.0909, 0.2727, 0.6364, 0.5000] >>> u.normalize_probability_TimeSeries(T,Integer(0),Integer(4)) >>> T [0.0606, 0.1818, 0.4242, 0.3333] >>> abs(T.sum()-Integer(1)) < RealNumber('1e-8') # might not exactly equal 1 due to rounding True 
 - state_matrix_to_TimeSeries(A, N, normalize)[source]¶
- This function is used internally by the - __init__methods of Hidden Markov Models to make a transition matrix from- A.- INPUT: - A– matrix, list, list of lists, or- TimeSeries
- N– number of states
- normalize– if- True, replace negative entries by 0 and rescale to ensure that the sum of the entries in each row is equal to 1. If the sum of the entries in a row is 0, replace them all by \(1/N\).
 - OUTPUT: a - TimeSeries- EXAMPLES: - sage: import sage.stats.hmm.util sage: u = sage.stats.hmm.util.HMM_Util() sage: u.state_matrix_to_TimeSeries([[.1,.7],[3/7,4/7]], 2, True) [0.1250, 0.8750, 0.4286, 0.5714] sage: u.state_matrix_to_TimeSeries([[.1,.7],[3/7,4/7]], 2, False) [0.1000, 0.7000, 0.4286, 0.5714] - >>> from sage.all import * >>> import sage.stats.hmm.util >>> u = sage.stats.hmm.util.HMM_Util() >>> u.state_matrix_to_TimeSeries([[RealNumber('.1'),RealNumber('.7')],[Integer(3)/Integer(7),Integer(4)/Integer(7)]], Integer(2), True) [0.1250, 0.8750, 0.4286, 0.5714] >>> u.state_matrix_to_TimeSeries([[RealNumber('.1'),RealNumber('.7')],[Integer(3)/Integer(7),Integer(4)/Integer(7)]], Integer(2), False) [0.1000, 0.7000, 0.4286, 0.5714]