問題タブ [viterbi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 境界で推定された確率は何を意味しますか? depmixS4 パッケージを使用した R の隠れマルコフ モデル
私は隠れマルコフモデルを初めて使用し、現在、連続HMMを使用して、RのUCIヒューマンアクティビティ認識データセット(加速度計とジャイロスコープの値で構成される)で6つのアクティビティを予測しようとしています。トレーニングデータとテストデータの両方があります。全部で 561 個の機能があります。いくつかの論文でそれを読んだ後、私は単一の 6 状態 HMM を作成し、私が持っているトレーニング データを使用してそれをトレーニングしました。状態は分類される 1 つのアクティビティを表していると仮定します。その後、ビタビを使用して、テスト データに適用されたときに HMM の最も可能性の高いシーケンスを予測しました。HMM 用の depmixS4 パッケージを使用して、これらのコードを入力しようとしました。
561 のすべての機能を使用したときに、これらのコードが 100% の精度を示したことに驚きました (Jahmm を使用した場合、約 80% の精度しか得られませんでしたが、ハングするため、561 の機能をすべて使用することはできませんでした)。私は実際に depmixS4 の開発者と連絡を取り合っており、彼はコードに問題がないことを確認しましたが、「以下の近似モデルは実際には観測または通常のマルコフ モデルであり、隠れマルコフ モデルではないことに注意してください。確率は境界で推定されます。」「応答確率は境界で推定される」とはどういう意味ですか? どういう意味なのかネットで調べてみましたがだめでした。
また、ビタビを使用するということは、それが実際に隠れマルコフ モデルであることを意味するのではないでしょうか? 私はそれを間違っていますか?
「viterbi()」関数は、パッケージではまだ公開されていない関数であることに注意してください (開発者は、私が考えていることを試すことができるように親切に教えてくれました)。
c++ - OpenMP を使用したビタビ アルゴリズム
OpenMP を使用してViterbi アルゴリズムを実装しようとしています。これまでのところ、私のテストでは、並列プログラムの実行時間は逐次プログラムの実行時間の約 4 倍であることが示されています。これが私のコードです:
私は何を間違っていますか?
matlab - Matlab-HMM の生成
ランダムな一連の観測があると仮定しましょう。
obs = [1, 2, 3, 5, 5, 5, 5, 5]
これらの観測は、HMM の 1 つの状態を表します。Matlab では、これらの観察結果をモデル化し、ビタビ アルゴリズムを使用して一種の分類器を作成したいと考えています。
私が抱えている問題は、Matlab でモデルを生成するという点で、どこから始めればよいか本当にわからないことです。ツールボックスの機能にはこれがないようです。
一連の観測をモデル化するために、そのような手順を実行できる特定のライブラリはありますか?
machine-learning - ビタビ アルゴリズムに関する次の例のどこに間違いがありますか?
隠れマルコフ モデル、ビタビ アルゴリズムを学習しようとしています。したがって、私は研究する例を探していました。このリンクから簡単な例に出くわしました;
3位までは全て理解できました。ただし、A を計算するときは 3 の位置にあります。
B値はA値よりも大きいため、状態 3 のAに対して状態 2 のBを選択します。状態 3 のAの値は0.09604 である必要があります。
状態 3 でB値を計算するには;
Bの値はA の値よりも大きいため、状態 3 のBに対して状態 2 のBを選択します。したがって、状態 3 のBの値は0.02744 になります。
ただし、状態 3 の例では、値は次のように計算されます。
私の回答とは異なります。
まだまだ勉強中なので、間違っている可能性もあります。しかし、私はどこを見ることができません。
なぜ私は異なる答えを得ているのですか? 私のソリューションの問題は何ですか?
r - r - viterbi RHmm エラー保護スタック オーバーフロー
文字列の状態を分析するための R での HMM 実装を探していましたが、HMM ライブラリの実行が遅いようで、RHmm ライブラリを使用しています。
私のデータは 1953138 個のシンボル (U、D、N) の文字列です
これは私のデータのサンプルです:
フィッティング HMM
viterbi を実行すると、ここでエラーが発生します
ただし、文字列 viterbi() のサブセットのみを使用すると、問題なく動作します。
実際に実行しようとすると:
同じスタック オーバーフロー エラーが発生し、ベクター内の 49964 要素が制限です
問題は --max-ppsize のデフォルトの R オプションが 50000 であるという事実に関連している可能性があると思いますが、このパラメーターを制限 --max-ppsize 500000 に変更しても問題は修正されません。ただし、viterbi() のベクトル制限は増加し、文字列ベクトルの 49964 要素から約 499960 要素になります。
ビタビ アルゴリズムをチャンクで実行しようとしました。最初に文字列を 49960 要素のチャンクに分割し、それぞれに viterbi を適用しましたが、同じエラーが発生しました
ここでスタックオーバーフローで、私が持っているものと同様の問題を見つけましたLINK。どうやら問題の原因は、不要なループ内の PROTECT でした。viterbi 関数の C++ ソース コードに飛び込みましたが、PROTECT が 1 つもありません。
も試しulimit -s unlimited
ましたが、同じエラーが発生しています。
私は1009 GBのRAMメモリを搭載したUNIXで作業しています
RHmm パッケージへのリンク
助けてくれてありがとう!
algorithm - これは、Viterbi のベスト パス alg の良いケースですか?
OCR出力を読み取り、ページ番号を見つけて、それを返すプログラムに取り組んでいます。関数がシーケンスを開始する数値を見つけるたびに、次のページで前のページよりも 1 大きい数値を探します。また、欠損値を推定するために空白を追加することもできます。
どの本でも、私の関数は 1 から 100 の潜在的な配列を識別します。それが識別するシーケンスの多くはジャンクです...まったく役に立ちません。ただし、他のものは通常、より包括的なシーケンスを形成するためにつなぎ合わせることができるメイン シーケンスのサブセットです。これは私の問題です。どうすればそれらをつなぎ合わせることができますか? 現在の私の出力は次のようになります。
インデックスは、書籍の表紙からのページ数であり、伝統的に番号が付けられていないすべての著作権、献辞、目次のページが含まれます。PNUM は、alg が検出したページ番号です。ここでは、3 つの異なるシーケンスを見ることができます。その上部と下部は一緒にステッチする必要があります。お気づきのように、一番上のシーケンスのインデックスと pnum の間のオフセットは 27 ですが、一番下のシーケンスのオフセットは 25 です。オフセットの違いの最も一般的な理由は、ページが見つからないか、ページが2回スキャンイン。
Viterbi ベスト パス アルゴリズムを使用してこれらのシーケンスをつなぎ合わせるように提案されましたが、実際にはシーケンスをつなぎ合わせるだけで正確性を確認する必要がないため、それはやり過ぎのように思えます。これをどこに行けばいいのか本当にわかりません。助けていただければ幸いです。ありがとう!