# FunctionBaumWelch

Updated
Library "FunctionBaumWelch"
Baum-Welch Algorithm, also known as Forward-Backward Algorithm, uses the well known EM algorithm
to find the maximum likelihood estimate of the parameters of a hidden Markov model given a set of observed
feature vectors.
---
### Function List:
> `forward (array<float> pi, matrix<float> a, matrix<float> b, array<int> obs)`
> `forward (array<float> pi, matrix<float> a, matrix<float> b, array<int> obs, bool scaling)`
> `backward (matrix<float> a, matrix<float> b, array<int> obs)`
> `backward (matrix<float> a, matrix<float> b, array<int> obs, array<float> c)`
> `baumwelch (array<int> observations, int nstates)`
> `baumwelch (array<int> observations, array<float> pi, matrix<float> a, matrix<float> b)`
---
### Reference:
> en.wikipedia.org/wik...Baum–Welch_algorithm
> github.com/alexsosn/...c8f86eb4/Ch16/HMM.py
> en.wikipedia.org/wiki/Forward_algorithm
> www.rdocumentation.o...1.0.1/topics/forward
> www.rdocumentation.o....0.1/topics/backward

forward(pi, a, b, obs)
Computes forward probabilities for state `X` up to observation at time `k`, is defined as the
probability of observing sequence of observations `e_1 ... e_k` and that the state at time `k` is `X`.
Parameters:
pi (float): Initial probabilities.
a (matrix<float>): Transmissions, hidden transition matrix a or alpha = transition probability matrix of changing
states given a state matrix is size (M x M) where M is number of states.
b (matrix<float>): Emissions, matrix of observation probabilities b or beta = observation probabilities. Given
state matrix is size (M x O) where M is number of states and O is number of different
possible observations.
obs (int): List with actual state observation data.
Returns: - `matrix<float> _alpha`: Forward probabilities. The probabilities are given on a logarithmic scale (natural logarithm). The first
dimension refers to the state and the second dimension to time.

forward(pi, a, b, obs, scaling)
Computes forward probabilities for state `X` up to observation at time `k`, is defined as the
probability of observing sequence of observations `e_1 ... e_k` and that the state at time `k` is `X`.
Parameters:
pi (float): Initial probabilities.
a (matrix<float>): Transmissions, hidden transition matrix a or alpha = transition probability matrix of changing
states given a state matrix is size (M x M) where M is number of states.
b (matrix<float>): Emissions, matrix of observation probabilities b or beta = observation probabilities. Given
state matrix is size (M x O) where M is number of states and O is number of different
possible observations.
obs (int): List with actual state observation data.
scaling (bool): Normalize `alpha` scale.
Returns: - #### Tuple with:
> - `matrix<float> _alpha`: Forward probabilities. The probabilities are given on a logarithmic scale (natural logarithm). The first
dimension refers to the state and the second dimension to time.
> - `array<float> _c`: Array with normalization scale.

backward(a, b, obs)
Computes backward probabilities for state `X` and observation at time `k`, is defined as the probability of observing the sequence of observations `e_k+1, ... , e_n` under the condition that the state at time `k` is `X`.
Parameters:
a (matrix<float>): Transmissions, hidden transition matrix a or alpha = transition probability matrix of changing states
given a state matrix is size (M x M) where M is number of states
b (matrix<float>): Emissions, matrix of observation probabilities b or beta = observation probabilities. given state
matrix is size (M x O) where M is number of states and O is number of different possible observations
obs (int): Array with actual state observation data.
Returns: - `matrix<float> _beta`: Backward probabilities. The probabilities are given on a logarithmic scale (natural logarithm). The first dimension refers to the state and the second dimension to time.

backward(a, b, obs, c)
Computes backward probabilities for state `X` and observation at time `k`, is defined as the probability of observing the sequence of observations `e_k+1, ... , e_n` under the condition that the state at time `k` is `X`.
Parameters:
a (matrix<float>): Transmissions, hidden transition matrix a or alpha = transition probability matrix of changing states
given a state matrix is size (M x M) where M is number of states
b (matrix<float>): Emissions, matrix of observation probabilities b or beta = observation probabilities. given state
matrix is size (M x O) where M is number of states and O is number of different possible observations
obs (int): Array with actual state observation data.
c (float): Array with Normalization scaling coefficients.
Returns: - `matrix<float> _beta`: Backward probabilities. The probabilities are given on a logarithmic scale (natural logarithm). The first dimension refers to the state and the second dimension to time.

baumwelch(observations, nstates)
**(Random Initialization)** Baum–Welch algorithm is a special case of the expectation–maximization algorithm used to find the
unknown parameters of a hidden Markov model (HMM). It makes use of the forward-backward algorithm
to compute the statistics for the expectation step.
Parameters:
observations (int): List of observed states.
nstates (int)
Returns: - #### Tuple with:
> - `array<float> _pi`: Initial probability distribution.
> - `matrix<float> _a`: Transition probability matrix.
> - `matrix<float> _b`: Emission probability matrix.
---
requires: `import RicardoSantos/WIPTensor/2 as Tensor`

baumwelch(observations, pi, a, b)
Baum–Welch algorithm is a special case of the expectation–maximization algorithm used to find the
unknown parameters of a hidden Markov model (HMM). It makes use of the forward-backward algorithm
to compute the statistics for the expectation step.
Parameters:
observations (int): List of observed states.
pi (float): Initial probaility distribution.
a (matrix<float>): Transmissions, hidden transition matrix a or alpha = transition probability matrix of changing states
given a state matrix is size (M x M) where M is number of states
b (matrix<float>): Emissions, matrix of observation probabilities b or beta = observation probabilities. given state
matrix is size (M x O) where M is number of states and O is number of different possible observations
Returns: - #### Tuple with:
> - `array<float> _pi`: Initial probability distribution.
> - `matrix<float> _a`: Transition probability matrix.
> - `matrix<float> _b`: Emission probability matrix.
---
requires: `import RicardoSantos/WIPTensor/2 as Tensor`
Release Notes:
v2 minor update.
Release Notes:
Fix logger version.
Release Notes:
v4 - Added error checking for some errors.
Release Notes:
v5 - Improved calculation by merging some of the loops, where possible.
Pine library

In true TradingView spirit, the author has published this Pine code as an open-source library so that other Pine programmers from our community can reuse it. Cheers to the author! You may use this library privately or in other open-source publications, but reuse of this code in a publication is governed by House Rules.

Disclaimer