3

C# での隠れマルコフ モデルの実装に関するこの優れた記事では、トレーニング データに基づいて 1 つのビット シーケンスを適切に分類しています。

複数の同時ビット シーケンスの分類をサポートするために、アルゴリズムを変更する方法、またはアルゴリズムを構築する方法 (複数の HMM ?)

1 つのストリームだけを分類する代わりに、次のようにします。

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] });

またはさらに良いことに、3 つのストリーム:

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] });

明らかに、トレーニング データも拡張されます。

4

2 に答える 2

1

言及された記事は、 Accord.NET Frameworkでの隠れマルコフ モデルの実装を扱っています。その記事で利用可能なサブプロジェクトだけでなく、フレームワークの完全なバージョンを使用する場合、一般的なHiddenMarkovModelモデルを使用し、任意の適切な放出シンボル分布を使用できます。ユーザーが 2 つまたは 3 つの離散変数間の同時確率を表現したい場合は、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);
于 2012-07-15T06:46:39.343 に答える
1

秘訣は、観測のセットを各シーケンスのすべての可能な値のn-aryデカルト積としてモデル化することです。あなたの場合、HMMはビットシーケンスの数である2^n出力シンボルを持ちます。n

例: 3つのビット シーケンスの場合、8 つのシンボルは次000 001 010 011 100 101 110 111ようになります:0/1

于 2010-10-04T11:03:01.190 に答える