Применение скрытой модели Маркова к нескольким последовательностям битов - PullRequest
3 голосов
/ 04 октября 2010

Эта отличная статья о реализации скрытой модели Маркова в C # делает хорошую работу по классификации однобитовой последовательности на основе обучающих данных.

Как изменить алгоритм или построить егоout (несколько HMM?) для поддержки классификации нескольких одновременных битовых последовательностей?

Пример

Вместо классификации только одного потока:

double t1 = hmm.Evaluate(new int[] { 0,1 });      // 0.49999423004045024  
double t2 = hmm.Evaluate(new int[] { 0,1,1,1 });  // 0.11458685045803882

Скорее, классифицировать двойной битпоток:

double t1 = hmm.Evaluate(new int[] { [0, 0], [0, 1] });
double t2 = hmm.Evaluate(new int[] { [0, 0], [1, 1], [0, 1], [1, 1] });

Или, что еще лучше, три потока:

double t1 = hmm.Evaluate(new int[] { [0, 0, 1], [0, 0, 1] });
double t2 = hmm.Evaluate(new int[] { [0, 0, 1], [1, 1, 0], [0, 1, 1], [1, 1, 1] });

Очевидно, что данные обучения также будут расширены.

Ответы [ 2 ]

1 голос
/ 15 июля 2012

В упомянутой статье рассматривается скрытая реализация модели Маркова в Accord.NET Framework .При использовании полной версии платформы, а не только подпроекта, доступного в этой статье, можно использовать общую модель HiddenMarkovModel и использовать любое подходящее распределение символов эмиссии.Если пользователь хотел бы выразить общую вероятность между двумя или тремя дискретными переменными, было бы целесообразно использовать класс JointDistribution .

Если, однако, существует много символьных переменных, такихэто выражение всех возможных комбинаций переменных не является практичным, лучше использовать непрерывное представление для признаков и использовать вместо него многовариантное нормальное распределение .

Примером может быть:

// Specify a initial normal distribution for the samples.
var initialDensity = MultivariateNormalDistribution(3); // 3 dimensions

// Create a continuous hidden Markov Model with two states organized in a forward
//  topology and an underlying multivariate Normal distribution as probability density.
var model = new HiddenMarkovModel<MultivariateNormalDistribution>(new Ergodic(2), density);

// Configure the learning algorithms to train the sequence classifier until the
// difference in the average log-likelihood changes only by as little as 0.0001
var teacher = new BaumWelchLearning<MultivariateNormalDistribution>(model)
{
    Tolerance = 0.0001,
    Iterations = 0,
};

// Fit the model
double likelihood = teacher.Run(sequences);
1 голос
/ 04 октября 2010

Хитрость заключается в том, чтобы смоделировать набор наблюдений как n-арное декартово произведение всех возможных значений каждой последовательности, в вашем случае HMM будет иметь 2^n выходной символ, где n - количество битовых последовательностей.

Пример: для трех битовых последовательностей 8 символов: 000 001 010 011 100 101 110 111, как если бы мы создали мегавариабельную , значения которой представляют собой все возможные наборы значений отдельных последовательностей наблюдения (0/1 из каждая битовая последовательность)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...