Distributions used in implementing Hidden Markov Models#
These distribution classes are designed specifically for HMM’s and not for general use in statistics. For example, they have fixed or non-fixed status, which only make sense relative to being used in a hidden Markov model.
AUTHOR:
William Stein, 2010-03
- class sage.stats.hmm.distributions.DiscreteDistribution#
Bases:
Distribution
- class sage.stats.hmm.distributions.Distribution#
Bases:
object
A distribution.
- plot(*args, **kwds)#
Return a plot of the probability density function.
INPUT:
args
andkwds
, passed to the Sageplot()
function
OUTPUT:
a
Graphics
object
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: P.plot(-10,30) # needs sage.plot Graphics object consisting of 1 graphics primitive
- prob(x)#
The probability density function evaluated at \(x\).
INPUT:
x
– object
OUTPUT:
float
EXAMPLES:
This method must be defined in a derived class:
sage: import sage.stats.hmm.distributions sage: sage.stats.hmm.distributions.Distribution().prob(0) Traceback (most recent call last): ... NotImplementedError
- sample(n=None)#
Return either a single sample (the default) or \(n\) samples from this probability distribution.
INPUT:
n
–None
or a positive integer
OUTPUT:
a single sample if \(n\) is 1; otherwise many samples
EXAMPLES:
This method must be defined in a derived class:
sage: import sage.stats.hmm.distributions sage: sage.stats.hmm.distributions.Distribution().sample() Traceback (most recent call last): ... NotImplementedError
- class sage.stats.hmm.distributions.GaussianDistribution#
Bases:
Distribution
- class sage.stats.hmm.distributions.GaussianMixtureDistribution#
Bases:
Distribution
A probability distribution defined by taking a weighted linear combination of Gaussian distributions.
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.3,1,2),(.7,-1,1)]); P 0.3*N(1.0,2.0) + 0.7*N(-1.0,1.0) sage: P[0] (0.3, 1.0, 2.0) sage: P.is_fixed() False sage: P.fix(1) sage: P.is_fixed(0) False sage: P.is_fixed(1) True sage: P.unfix(1) sage: P.is_fixed(1) False
- fix(i=None)#
Set that this
GaussianMixtureDistribution
(or its \(i\)-th component) is fixed when using Baum-Welch to update the corresponding HMM.INPUT:
i
–None
(default) or integer; if given, only fix the \(i\)-th component
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: P.fix(1); P.is_fixed() False sage: P.is_fixed(1) True sage: P.fix(); P.is_fixed() True
- is_fixed(i=None)#
Return whether or not this
GaussianMixtureDistribution
is fixed when using Baum-Welch to update the corresponding HMM.INPUT:
i
–None
(default) or integer; if given, only return whether the \(i\)-th component is fixed
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: P.is_fixed() False sage: P.is_fixed(0) False sage: P.fix(0); P.is_fixed() False sage: P.is_fixed(0) True sage: P.fix(); P.is_fixed() True
- prob(x)#
Return the probability of \(x\).
Since this is a continuous distribution, this is defined to be the limit of the p’s such that the probability of [x,x+h] is p*h.
INPUT:
x
– float
OUTPUT:
float
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: P.prob(.5) 0.21123919605857971 sage: P.prob(-100) 0.0 sage: P.prob(20) 0.1595769121605731
- prob_m(x, m)#
Return the probability of \(x\) using just the \(m\)-th summand.
INPUT:
x
– floatm
– integer
OUTPUT:
float
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: P.prob_m(.5, 0) 2.7608117680508...e-97 sage: P.prob_m(.5, 1) 0.21123919605857971 sage: P.prob_m(.5, 2) 0.0
- sample(n=None)#
Return a single sample from this distribution (by default), or if \(n>1\), return a
TimeSeries
of samples.INPUT:
n
– integer orNone
(default:None
)
OUTPUT:
float if
n
isNone
(default); otherwise aTimeSeries
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: type(P.sample()) <class 'float'> sage: l = P.sample(1) sage: len(l) 1 sage: type(l) <class 'sage.stats.time_series.TimeSeries'> sage: l = P.sample(5) sage: len(l) 5 sage: type(l) <class 'sage.stats.time_series.TimeSeries'> sage: l = P.sample(0) sage: len(l) 0 sage: type(l) <class 'sage.stats.time_series.TimeSeries'> sage: P.sample(-3) Traceback (most recent call last): ... ValueError: n must be nonnegative
- unfix(i=None)#
Set that this
GaussianMixtureDistribution
(or its \(i\)-th component) is not fixed when using Baum-Welch to update the corresponding HMM.INPUT:
i
–None
(default) or integer; if given, only fix the \(i\)-th component
EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: P.fix(1); P.is_fixed(1) True sage: P.unfix(1); P.is_fixed(1) False sage: P.fix(); P.is_fixed() True sage: P.unfix(); P.is_fixed() False
- sage.stats.hmm.distributions.unpickle_gaussian_mixture_distribution_v1(c0, c1, param, fixed)#
Used in unpickling
GaussianMixtureDistribution
objects.EXAMPLES:
sage: P = hmm.GaussianMixtureDistribution([(.2,-10,.5),(.6,1,1),(.2,20,.5)]) sage: loads(dumps(P)) == P # indirect doctest True