Ruby寫的向前演算法

來源:互聯網
上載者:User

標籤:style   blog   http   color   art   for   

隱馬爾科夫模型中有三個問題:

1) 估計問題:給定一個觀察序列O=O1O2...OT和模型u = (A, B, π), 如何快速地計算出給定模型u情況下,觀察序列O的機率,即P(O|u)

2) 序列問題: 給定觀察序列O=O1O2...OT和模型u = (A, B, π), 如何快速有效地選擇在一定意義下“最優”的狀態序列Q=q1q2...qT,使得該狀態序列“最好地解釋”觀察序列?

3) 訓練問題或參數估計:給定一個觀察序列O=O1O2...OT,如何根據最大似然估計來求模型的參數值?即如何調節模型u=(A, B, π)的參數,使得P(O|u)最大?

問題1是一個解碼問題,前向演算法可以解決該問題(forward procedure),也是動態規劃法的一種應用。

關於前向演算法的基礎知識可以看下面的文章

http://www.cnblogs.com/tornadomeet/archive/2012/03/24/2415583.html

最後是ruby代碼

 

class FowardAlgorithm  def initialize(pi, trans_pro, emit_pro)    @pi = pi    @trans_pro = trans_pro    @emit_pro = emit_pro  end  def alpha1(state, ob)    @pi[state] * @emit_pro[state][ob]  end  def alpha(t, state)    # t starts from 0, states starts from 9    if t.equal? 0      alpha1(state, @ob[0])    else      sum = ([email protected]_pro.size).inject(0.0) { |sum, i| sum += alpha(t-1, i) * @trans_pro[i][state] }      sum * @emit_pro[state][@ob[t]]    end  end  def p_rerial_n ob    n = ob.size    n -= 1    @ob = ob    # time & states    res = 0.0    [email protected]_pro.size.times { |i|      #print "time #{n}, state #{i}"      tmp = alpha n, i      res += tmp    }    res  endenddef test  pi = [0.2, 0.4, 0.4]  trans_pro = [      [0.5, 0.2, 0.3],      [0.3, 0.5, 0.2],      [0.2, 0.3, 0.5]  ]  emit_pro = [      [0.5, 0.5],      [0.4, 0.6],      [0.7, 0.3]  ]  f = FowardAlgorithm.new pi, trans_pro, emit_pro  puts f.p_rerial_n([0, 1, 0, 1])endif $PROGRAM_NAME == __FILE__  testend

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.