HMMモデルとその原則の戦闘

隠れマルコフモデル(隠れマルコフモデル、HMM)は、隠れマルコフプロセス不明を含むパラメータを記述するために使用される統計モデル、です。難易度は、プロセスのパラメータが隠れパラメータから見ることができるかを決定することです。暗黙状態1 S、2観察状態O、3行列初期状態確率π、4:隠れマルコフモデル(HMM)は、2つおよび3つの状態確率行列のセットを含む5つの要素によって説明することができます。暗黙の状態遷移確率行列A、5観察状態遷移確率行列B.
ここに画像を挿入説明

マルコフ連鎖

n番目の刻印状態は最初のn-1に関連付けられている、N-2、N-3、...などは時間関係が存在しないだけで状態マルコフ連鎖、N + 1つの状態の一瞬A。

隠れマルコフモデル

図のために、2つのデータ列は、これらの2つの列のデータ分布特性があり、最初の行は、第二行は線Oのx行である、特定の行Xの状態は以前の状態に依存して、それぞれの行はXであります前記点Oの行。

一般線Oは、X線の状態系列と呼ぶ上部に図の点は、観察シーケンスと呼ばれ、配列がどのような状態と観測配列でありますか?
状態シーケンス:隠れマルコフ連鎖ランダムに生成された状態シーケンス、状態シーケンスが呼び出されます。
観察シーケンス:観察シーケンスと呼ばれる各観測のステータスジェネレータ、得られたランダム配列の観察は、
そこで定義されたマルコフモデルである:隠れマルコフモデルは、Aによって記述されるタイミング、確率モデルでありますマルコフ連鎖発生状態系列を隠れ、その後状態のシーケンスによって生成された観察シーケンスを処理します。前記変換観測シーケンスの確率と状態間の状態のシーケンスの間に一定の関係があります。

HMM表現

Qは、すべての可能な状態の集合とし、Vは、可能なすべての観測値のセットです。

Q = Q1、Q2、···、 QN、V = V1、V2は、...は、VM
Nが可能な状態の数であり、Mは、可能な観測の数です。

T Iは、距離状態のシーケンスであり、Oは、観察された配列の相当します。

= I(I1、I2、...、IT)、= O(O1、O2、...、OT)
状態遷移行列である:A = N×N [AIJの]
I = 1,2、... 、N; J = 1,2、... 、Nは、
時刻t + 1の状態を気に時刻tで、の条件状態遷移確率QJに:

| = AIJのP(QJ = IT + 1 ITはチー=)
B = [BJ(K)]×N M:Bは、観測確率行列であり
、J = 1,2、K = 1,2、...、M。 ..、N
条件下で、時刻tにおける観測VK状態QJの確率を生成します。

BJ(K)= P(OT = VK | ITはQJ =)を
πの初期状態確率ベクトルである:π=(πI)
、πI= P(I1 =チー )
隠れマルコフモデル状態確率ベクトルπの初期状態から遷移確率行列と観測確率行列Bを決定します。πAと決定状態シーケンスは、B観測配列を決定しました。したがって、隠れマルコフモデルは、三元シンボルを表すことができ、λ、すなわち:λ=(A、B、 π)。隠れマルコフモデルと呼ばれる三つの要素πA、B、。

2つの仮定

(1):時間だけ任意の時間tと前回の状態に依存隠れマルコフ状態を提供するだけでなく、他の時間に関係なく、時刻tの状態と観測独立の。(均一マルコフ仮定)

(2):いつでも観察と仮定する時、状態に関係なく、および他の観測ことのみマルコフ連鎖の状態に依存します。(観測独立性の仮定)

上記の例では、患者が冷えているかどうかを予測ウィキあり
、村の名前の物理的な条件はどちらか健康であるか、熱を持って、彼らは唯一の発熱かどうかを知るために、診療所の医師に尋ねる、農村部の診療所を想像してみてください。医師は、彼らが熱を持っているかどうかを診断するために、村の名前を尋ねることによって感じます。村人自身が通常の感覚、めまいや風邪をひいています。
患者は毎日診療所に来たと仮定し、医師に自分の気持ちを伝えます。患者さんの健康状態は離散マルコフ連鎖であると仮定すると。2つの方法で患者の状態:健康や発熱、しかし、医師が直接、状態の医師が表示されていないことを意味し、観察することができません。
通常、寒さやめまい:毎日医師は、彼らが彼の健康感の状態によって決定され、いくつかのいずれかを持っていることを患者に教えてくれます。これらは、観測されています。システム全体は、隠れマルコフモデル(HMM)です。
ステータス:医師は、村人の全体的な健康状態を知っているだけでなく、発熱や発熱患者はしばしば、彼らが何らかの症状を持っていることを示して知りませんでした。言い換えれば、医師は、隠れマルコフモデルのパラメータを知っています。
収集された情報によれば、以下のデータが得られます。
患者の状態、すなわちQ(「健康」、「フィーバー 『)
患者感その観察状態、即ち:( V『通常』、『コールド』、『ディジー』)
πの初期状態確率ベクトルであります:{』健康「0.6」フィーバー' :0.4}
状態遷移行列:

transition_probability = {
   'Healthy' : {'Healthy': 0.7, 'Fever': 0.3},
   'Fever' : {'Healthy': 0.4, 'Fever': 0.6},
   }

観測確率行列:

emission_probability = {
   'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1},
   'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6},
   }

医師は患者の最初の訪問は、彼が知っている唯一のことは、患者が健康になりがちというときに開始start_probabilityの確率はそのHMMの状態を表現することを考えています。本明細書で使用される特定の確率分布は、遷移確率が約あるような、バランスされていない{「健康」:0.57、「フィーバー」:0.43}。Transition_probability遷移確率は、基礎となるマルコフ連鎖の健康状態の変化を示します。
この例では、同じ日の患者の健康状態は、次の日には熱を持っているということだけで、30%の確率です。放射線の確率emission_probabilityは、患者の可能性が日々感じて示しています。彼が健康であれば、50%が正常な感じ。彼は熱を持っている場合は、60%がめまいを感じることがあります。
図示のように:
ここに画像を挿入説明

HMMの3つの問題

1:評価
知らモデルλ=(A、B、π ) と観測シーケンスO = O1、O2、...、 OT、 モデルPで算出された特定の観測シーケンスO、λの発生確率(O |λ)
既知すなわちHMMモデルパラメータA、B、π。症状の一連の確率を求めている患者は、表示されますか?
2:学習問題の
既知の観測シーケンスO = O1、O2、...、 OT、 モデルを推定パラメータλ=(A、B、π )、 そうP(O |λ)が最大。それは、EMのアイデア、使用して最尤法パラメータによって推定されていることを
、患者の一連の症状のこのシリーズ現れるのパラメータを推定するための最良のモデルを症状を示しています。
3:予測(デコード問題)
観測シーケンスO = O1、O2、...、で知られている OT とモデルパラメータλ=(A、B、πは )、 所与の観測系列Pの条件付き確率を見つける(I | O)最大状態シーケンスIは、=(I1、I2、... 、IT)、 即ち、に対応する状態の最も可能性の高いシーケンスのための所定の観測シーケンス。
Vは、患者が過去数日と他の州寒さを持っているかどうかを予測するために、チェーンの状態を観察することです。

ビタビアルゴリズム

医師の診察をするために、患者3日連続では、医師は感情の彼の3日間であることが判明:通常の感覚を、めまいを感じ、寒さを感じます。医師は、シーケンスの健康状態は最高の観測のこのシリーズを説明することができる方法を知りたいです。今回は、この問題を解決するために、ビタビアルゴリズムを使用する必要があります。
ビタビアルゴリズムコード

def print_dptable(V):
    print "    ",
    for i in range(len(V)): print "%7d" % i,
    print

    for y in V[0].keys():
        print "%.5s: " % y,
        for t in range(len(V)):
            print "%.7s" % ("%f" % V[t][y]),
        print

def viterbi(obs, states, start_p, trans_p, emit_p):
    V = [{}]
    path = {}

    # Initialize base cases (t == 0)
    for y in states:
        V[0][y] = start_p[y] * emit_p[y][obs[0]]
        path[y] = [y]

    # Run Viterbi for t > 0
    for t in range(1,len(obs)):
        V.append({})
        newpath = {}

        for y in states:
            (prob, state) = max([(V[t-1][y0] * trans_p[y0][y] * emit_p[y][obs[t]], y0) for y0 in states])
            V[t][y] = prob
            newpath[y] = path[state] + [y]

        # Don't need to remember the old paths
        path = newpath

    print_dptable(V)
    (prob, state) = max([(V[len(obs) - 1][y], y) for y in states])
    return (prob, path[state])

次のようにビタビパラメータが説明されている:OBSは、観察シーケンスである、例えば、[「正常」、「コールド」 、「めまい」];状態暗黙的な状態のセットとして、START_PYour開始状態の確率; trans_pは、遷移確率であり;そして放射線の確率にemit_p。コードを簡素化するために、我々は、空でないと、すべての状態の観察シーケンスOBS trans_p [I] [J]とemit_p [I] [J]私は、jは定義されていることを前提としています。
ビタビパラメータが与えられます

states = ('Healthy', 'Fever')
 
observations = ('normal', 'cold', 'dizzy')
 
start_probability = {'Healthy': 0.6, 'Fever': 0.4}
 
transition_probability = {
   'Healthy' : {'Healthy': 0.7, 'Fever': 0.3},
   'Fever' : {'Healthy': 0.4, 'Fever': 0.6},
   }
 
emission_probability = {
   'Healthy' : {'normal': 0.5, 'cold': 0.4, 'dizzy': 0.1},
   'Fever' : {'normal': 0.1, 'cold': 0.3, 'dizzy': 0.6},
   }

解決

def example():
    return viterbi(observations,
                   states,
                   start_probability,
                   transition_probability,
                   emission_probability)
print example()

概要

ビタビアルゴリズムは、[、「正常」「コールド」の結果を観察することによって明らかにし 、「めまい」] [「健康」、 '健康の最も可能性の高い状態シーケンスを見つけるために 、「フィーバーが」] が生成されます。換言すれば、観察された活性のために、最初の日の患者は、翌日の感触正常であったときに冷たい健康であり、熱の三日目。
ビタビ・パスは、本質的にトレリスを通る最長パスです。フォーマット構造以下の実施例クリニック、黒色の太ビタビ経路:
ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/zhangxinying/p/12071061.html