最新のリリースでは,このページがまだ翻訳されていません。このページの最新版は英語でご覧になれます。

隠れマルコフモデル(嗯)

隠れマルコフモデル(嗯)の紹介

“隠れマルコフモデル”(嗯)は出力シーケンスを観測するモデルです。ただし,その出力を生成するためにモデルがたどった状態の系列はわかりません。隠れマルコフモデルの分析は,観測されたデータから状態シーケンスを戻そうとします。

この例では2つの状態と6種類の可能な出力をもつマルコフモデルを考えます。モデルは以下を使用します。

  • 1から6のラベルが付いた,6つの面をもつ赤いサイコロ。

  • 12面をもち,そのうちの5つの面は2から6のラベルが付けられ,残りの7つの面は1とラベルが付けられている緑色のサイコロ。

  • 表となる確率が。9で,裏となる確率が。1である,偏りのある赤いコイン。

  • 表となる確率が.95で,裏となる確率が. 05である,偏りのある緑色のコイン。

このモデルは,次の規則を使って,集合{1,2,3,4,5,6}から数の列を作成します。

  • はじめに赤いサイコロを投げ,出た数を書き留めます。これが出力です。

  • 赤いコインを投げ,次のいずれかを行います。

    • 結果が表である場合,赤いサイコロを投げ,結果を書き留めます。

    • 結果が裏である場合,緑色のサイコロを投げ,結果を書き留めます。

  • 続く各ステップでは,前のステップで振ったサイコロと同じ色のコインを投げます。コインが表である場合,前のステップと同じサイコロを投げます。コインが裏である場合,もう一方のサイコロに変更します。

このモデルに対する状態図は,次の図に示すように,赤と緑色の2つの状態をもちます。

状態と同じ色のサイコロを投げることによって,ある状態からの出力を決めます。状態と同じ色のコインを投げることによって,次の状態への遷移を決めます。

遷移行列は次のようになります。

T = ( 0.9 0.05 0.1 0.95 ]

出力行列は次のようになります。

E = ( 1 6 1 6 1 6 1 6 1 6 1 6 7 12 1 12 1 12 1 12 1 12 1 12 ]

コインとサイコロの色から状態シーケンスを知ることができるため,モデルの状態は隠されていません。しかし,サイコロやコインを見せずに,誰かが出力を生成していると仮定してください。見ることができるのは,出力シーケンスのみです。他の数に比べ1をより多く見始めた場合,モデルは緑色の状態にあるのではないかと思うかもしれませんが,投げられているサイコロの色を見ることはできないので確信はもてません。

隠れマルコフモデルは,以下の疑問を提起します。

  • 出力シーケンスが与えられた場合に,最も可能性のある状態経路は何でしょうか。

  • 出力シーケンスが与えられると,どのようにしてモデルの遷移とモデルの出力の確率を推定できるでしょうか。

  • モデルが,与えられたシーケンスを生成する“事前確率”とは何でしょうか。

  • シーケンスの任意の点において,モデルが特定の状態にある“事後確率”とは何でしょうか。

隠れマルコフモデルの分析

隠れマルコフモデルに関連する统计和机器学习工具箱™関数は以下のとおりです。

  • hmmgenerate——マルコフモデルから状態および出力シーケンスを生成します

  • hmmestimate——出力シーケンスと既知の状態シーケンスから,遷移確率と出力確率の最尤推定値を計算します

  • hmmtrain——出力シーケンスから,遷移確率と出力確率の最尤推定値を計算します

  • hmmviterbi——隠れマルコフモデルについて,最も確からしい状態経路を計算します

  • hmmdecode——出力シーケンスの事後状態確率を計算します

この節では,隠れマルコフモデルを解析するためのこれらの関数の使用方法を説明します。

テストシーケンスの生成

以下のコマンドは,隠れマルコフモデル(嗯)の紹介で説明したモデルに対する遷移行列と出力行列を作成します。

反式= [。9。1;. 05 .95];EMIS =[1/6, 1/6, 1/6, 1/6, 1/6, 1/6;…]7/12, 1/12, 1/12, 1/12, 1/12, 1/12, 1/12;

このモデルからランダムな状態シーケンスと出力シーケンスを生成するには,hmmgenerateを使用します。

[seq,州]= hmmgenerate(1000年,反式工作);

出力seqが,出力(排放)のシーケンスであり,出的力は状態シーケンスです。

hmmgenerateは,ステップ0で状態1ではじまり,ステップ1で状態我1への遷移を行い,の最初の要素として我1を出力します。初期状態を変更するには,初期状態分布の変更を参照してください。

状態シーケンスの推定

遷移行列反式と出力行列工作が与えられると,関数hmmviterbiは,维特比アルゴリズムを使用して,出力の与えられた列seqを作成するために,そのモデルがたどると考えられる最も確からしい状態シーケンスを計算します。

可能状态= hmmviterbi(seq, TRANS, EMIS);

likelystatesは,seqと同じ長さの列です。

hmmviterbiの正確さをテストするために,列likelystatesと一致する実際の列ののパーセンテージを計算します。

和(状态==可能状态)/1000 ans = 0.8200

この場合,最も確からしい状態シーケンスは,ランダムな列の82%に一致します。

遷移行列と出力行列の推定

関数hmmestimatehmmtrainは,出力シーケンスseqが与えられると,遷移行列反式と出力行列工作を推定します。

hmmestimateの使用関数hmmestimateを使用するには,このモデルがseqを生成するために通過してきた状態シーケンスがわかっている必要があります。

以下は,出力および状態のシーケンスを取り,遷移行列および出力行列の推定を出力します。

[TRANS_EST, EMIS_EST] = hmmestimate(seq, states) TRANS_EST = 0.8989 0.1011 0.0585 0.9415 EMIS_EST = 0.1721 0.1721 0.1749 0.1612 0.1803 0.1393 0.5836 0.0741 0.0804 0.0789 0.0726 0.1104

出力を,オリジナルの遷移行列反式と出力行列工作と比較できます。

TRANS = 0.9000 0.1000 0.0500 0.9500 EMIS EMIS = 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.1667 0.5833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833 0.0833

hmmtrainの使用状態シーケンスが未知ではあるが反式工作の初期推定がある場合,hmmtrainを使用して反式工作を推定できます。

反式および工作に対する初期推定をもつとします。

TRANS_GUESS = [。85 .15点;。1。9);EMIS_GUESS = [。17。16。17。16。17。17;.6 .08 .08 .08 .08 08];

以下のように,反式および工作を推定します。

[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS) TRANS_EST2 = 0.2286 0.7714 0.0032 0.9968 EMIS_EST2 = 0.1436 0.2348 0.1837 0.1963 0.2350 0.0066 0.4355 0.1055 0.1144 0.1082 0.1109 0.1220

hmmtrainは,各ステップで調整された行列が観測される系列行列seqを生成する可能性がより高くなるように,行列TRANS_GUESSEMIS_GUESSを変更する反復アルゴリズムを使用します。アルゴリズムは,連続する2回の繰り返しでの行列が互いに小さい許容誤差内に入ると停止します。

アルゴリズムが最大反復回数(既定値はOne hundred.)内でこの許容誤差に達しない場合,アルゴリズムは停止します。この場合hmmtrainは,TRANS_ESTEMIS_ESTの最終値を返し,許容誤差に到達していないという警告を発します。

アルゴリズムが指定する許容誤差に達しない場合,次のコマンドを使用して最大反復回数の既定値を大きくします。

hmmtrain (seq TRANS_GUESS、EMIS_GUESS maxiterations,麦克斯特)

ここで,麦克斯特はアルゴリズムが実行する最大のステップ数です。

次のコマンドを使用して,許容誤差の既定値を変更します。

hmmtrain(seq, TRANS_GUESS, EMIS_GUESS, 'tolerance', tol)

ここで,托尔は指定する許容誤差値です。托尔の値が大きくなると,アルゴリズムはより迅速に停止しますが,結果の精度は下がります。

hmmtrainの出力行列の信頼性をより低くする2つの要因が存在します。

  • アルゴリズムが,真の遷移行列と出力行列を表さない局所的最大値に収束する場合。このことが当てはまると思われる場合は,行列TRANS_ESTおよびEMIS_ESTに対して別の初期推定を使用してください。

  • seqが短すぎて行列を適切に学習できない可能性がある場合。これに当てはまると思われる場合,seqとしてより長い列を使用してください。

事後状態確率の計算

出力シーケンスseqの事後状態確率は,seqが出力される場合,モデルがseqにシンボルを生成するときに,ある特定の状態にある条件付き確率です。hmmdecodeを使用して事後状態確率を計算することができます。

PSTATES = hmmdecode (seq,反式工作)

出力PSTATESはM行L列の行列です。ここで,Mは状態の数であり,Lはseqの長さです。PSTATES (i, j)は,seqが出力される場合,seqj番目のシンボルを生成するときにモデルが状態にある条件付き確率です。

hmmdecodeは,最初の出力の前に,ステップ0で状態1にあるモデルから開始します。PSTATES(我,1)は,モデルが次のステップ1で状態我になる確率です。初期状態の変更については,初期状態分布の変更を参照してください。

seqの確率の対数を出力するには,hmmdecodeの2番目の出力引数を使用します。

[PSTATES, logpseq] = hmmdecode (seq,反式工作)

列の確率は,列の長さが増すにつれて0になる傾向があります。そのため,十分長い列の確率は,コンピューターが表すことができる最小の正の数よりも小さくなります。hmmdecodeは,この問題を回避するために,確率の対数を出力します。

初期状態分布の変更

既定では、统计和机器学习工具箱の隠れマルコフモデル関数は状態1で始まります。言い換えると,初期状態の分布では,すべての確率質量が状態1に集中しています。別の確率分布p = [p1p2,……p]をM個の初期状態に割り当てるには,次の手順を実行します。

  1. 次のような形式のM + 1行M + 1列に拡張した遷移行列 T ^ を作成します。

    T ^ = ( 0 p 0 T ]

    ここでTは真の遷移行列です。 T ^ の1列目にはM + 1個のゼロが含まれていま每分钟すの合計は1でなければなりません。

  2. 次のような形式のM + 1行N列に拡張した出力行列 E ^ を作成します。

    E ^ = ( 0 E ]

遷移行列と出力行列がそれぞれ反式および工作である場合,次のコマンドを使用して拡張された行列を作成します。

TRANS_HAT = [0 p;0(大小(反式,1),1)反式);EMIS_HAT =[0(1、大小(工作,2));工作);

参考

||||

関連するトピック