最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

R語言中的隱馬爾可夫HMM模型實例

2021-06-08 21:47 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=17592?

原文出處:拓端數(shù)據(jù)部落公眾號

?

最近,我們使用隱馬爾可夫模型開發(fā)了一種解決方案,并被要求解釋這個方案。

HMM用于建模數(shù)據(jù)序列,無論是從連續(xù)概率分布還是從離散概率分布得出的。它們與狀態(tài)空間和高斯混合模型相關(guān),因為它們旨在估計引起觀測的狀態(tài)。狀態(tài)是未知或“隱藏”的,并且HMM試圖估計狀態(tài),類似于無監(jiān)督聚類過程。

視頻:R語言中的隱馬爾可夫HMM模型實例

例子

在介紹HMM背后的基本理論之前,這里有一個示例,它將幫助您理解核心概念。有兩個骰子和一罐軟糖。B擲骰子,如果總數(shù)大于4,他會拿幾顆軟糖再擲一次。如果總數(shù)等于2,則他拿幾把軟糖,然后將骰子交給A?,F(xiàn)在該輪到A擲骰子了。如果她的擲骰大于4,她會吃一些軟糖,但是她不喜歡黑色的其他顏色(兩極分化的看法),因此我們希望B會比A多。他們這樣做直到罐子空了。

現(xiàn)在假設(shè)A和B在不同的房間里,我們看不到誰在擲骰子。取而代之的是,我們只知道后來吃了多少軟糖。我們不知道顏色,僅是從罐子中取出的軟糖的最終數(shù)量。我們怎么知道誰擲骰子?HMM。

在此示例中,狀態(tài)是擲骰子的人,A或B。觀察結(jié)果是該回合中吃了多少軟糖。如果該值小于4,骰子的擲骰和通過骰子的條件就是轉(zhuǎn)移概率。由于我們組成了這個示例,我們可以準(zhǔn)確地計算出轉(zhuǎn)移概率,即1/12。沒有條件說轉(zhuǎn)移概率必須相同,例如A擲骰子2時可以將骰子移交給他,例如,概率為1/36。

模擬

首先,我們將模擬該示例。B平均要吃12顆軟糖,而A則需要4顆。

  1. # 設(shè)置

  2. simulate <- function(N, dice.val = 6, jbns, switch.val = 4){

  3. #模擬變量

  4. ??梢灾皇褂靡粋€骰子樣本

  5. #不同的機(jī)制,例如只丟1個骰子,或任何其他概率分布


  6. b<- sample(1:dice.val, N, replace = T) + sample(1:dice.val, N, replace = T)

  7. a <- sample(1:dice.val, N, replace = T) + sample(1:dice.val, N, replace = T)

  8. bob.jbns <- rpois(N, jbns[1])

  9. alice.jbns <- rpois(N, jbns[2])

  10. # 狀態(tài)

  11. draws <- data.frame(state = rep(NA, N), obs = rep(NA, N),

  12. # 返回結(jié)果

  13. return(cbind(roll = 1:N, draws))

  14. # 模擬場景

  15. draws <- simulate(N, jbns = c(12, 4), switch.val = 4)

  16. # 觀察結(jié)果

  17. ggplot(draws, aes(x = roll, y = obs)) + geom_line()

?

如您所見,僅檢查一系列計數(shù)來確定誰擲骰子是困難的。我們將擬合HMM。由于我們正在處理計數(shù)數(shù)據(jù),因此觀察值是從泊松分布中得出的。

?

  1. fit.hmm <- function(draws){

  2. # HMM

  3. mod <- fit(obs ~ 1, data = draws, nstates = 2, family = poisson()

  4. # 通過估計后驗來預(yù)測狀態(tài)

  5. est.states <- posterior(fit.mod)

  6. head(est.states)

  7. # 結(jié)果


  8. hmm.post.df <- melt(est.states, measure.vars =

  9. # 輸出表格

  10. print(table(draws[,c("state", "est.state.labels")]))

?

  1. ## iteration 0 logLik: -346.2084

  2. ## iteration 5 logLik: -274.2033

  3. ## converged at iteration 7 with logLik: -274.2033

  4. ## ? ? ? ?est.state.labels

  5. ## state ? alice bob

  6. ## ? a ? ? 49 ? 2

  7. ## ? b ? ? ?3 ?46

?

模型迅速收斂。使用后驗概率,我們估計過程處于哪個狀態(tài),即誰擁有骰子,A或B。要具體回答該問題,我們需要更多地了解該過程。在這種情況下,我們知道A只喜歡黑軟糖。否則,我們只能說該過程處于狀態(tài)1或2。下圖顯示了HMM很好地擬合了數(shù)據(jù)并估計了隱藏狀態(tài)。

?

  1. # 繪圖輸出



  2. g0 <- (ggplot(model.output$draws, aes(x = roll, y = obs)) + geom_line() +

  3. theme(axis.ticks = element_blank(), axis.title.y = element_blank())) %>% ggplotGrob

  4. g1 <- (ggplot(model.output$draws, aes(x = roll, y = state, fill = state, col = state)) +




  5. g0$widths <- g1$widths

  6. return(grid.arrange(g0, g1



  7. plot.hmm.output(hmm1)

?

令人印象深刻的是,該模型擬合數(shù)據(jù)和濾除噪聲以估計狀態(tài)的良好程度。公平地說,可以通過忽略時間分量并使用EM算法來估計狀態(tài)。但是,由于我們知道數(shù)據(jù)形成一個序列,因為觀察下一次發(fā)生的概率取決于前一個即\(P(X_t | X_ {t-1})\),其中\(zhòng)(X_t \ )是軟糖的數(shù)量。

考慮到我們構(gòu)造的問題,這可能是一個相對簡單的案例。如果轉(zhuǎn)移概率大得多怎么辦?

?


  1. simulate(100, jbns = c(12, 4), switch.val = 7)


?

  1. ## iteration 0 logLik: -354.2707

  2. ## iteration 5 logLik: -282.4679

  3. ## iteration 10 logLik: -282.3879

  4. ## iteration 15 logLik: -282.3764

  5. ## iteration 20 logLik: -282.3748

  6. ## iteration 25 logLik: -282.3745

  7. ## converged at iteration 30 with logLik: -282.3745

  8. ## ? ? ? ?est.state.labels

  9. ## state ? alice bob

  10. ## ? alice ? ?54 ? 2

  11. ## ? bob ? ? ? 5 ?39

?

plot(hmm2)

這有很多噪音數(shù)據(jù),但是HMM仍然做得很好。性能的提高部分歸因于我們對從罐中取出的軟糖數(shù)量的選擇。分布越明顯,模型就越容易拾取轉(zhuǎn)移。公平地講,我們可以計算中位數(shù),并將所有低于中位數(shù)的值都?xì)w為一個狀態(tài),而將所有高于中位數(shù)的值歸為另一狀態(tài),您可以從結(jié)果中看到它們做得很好。這是因為轉(zhuǎn)移概率非常高,并且預(yù)計我們會從每個狀態(tài)觀察到相似數(shù)量的觀察結(jié)果。當(dāng)轉(zhuǎn)移概率不同時,我們會看到HMM表現(xiàn)更好。

如果觀察結(jié)果來自相同的分布,即A和B吃了相同數(shù)量的軟糖怎么辦?

?

  1. hmm3 <- fit.hmm(draws)

  2. plot(hmm3)

不太好,但這是可以預(yù)期的。如果從中得出觀察結(jié)果的分布之間沒有差異,則可能也只有1個狀態(tài)。

實際如何估算狀態(tài)?

首先,狀態(tài)數(shù)量及其分布方式本質(zhì)上是未知的。利用對系統(tǒng)建模的知識,用戶可以選擇合理數(shù)量的狀態(tài)。在我們的示例中,我們知道有兩種狀態(tài)使事情變得容易??赡苤来_切的狀態(tài)數(shù),但這并不常見。再次通過系統(tǒng)知識來假設(shè)觀察結(jié)果通常是合理的,這通常是合理的。

從這里開始,使用?Baum-Welch算法?來估計參數(shù),這是EM算法的一種變體,它利用了觀測序列和Markov屬性。除了估計狀態(tài)的參數(shù)外,還需要估計轉(zhuǎn)移概率。Baum-Welch算法首先對數(shù)據(jù)進(jìn)行正向傳遞,然后進(jìn)行反向傳遞。然后更新狀態(tài)轉(zhuǎn)移概率。然后重復(fù)此過程,直到收斂為止。

在現(xiàn)實世界

在現(xiàn)實世界中,HMM通常用于

  • 股票市場預(yù)測,無論市場處于牛市還是熊市?

  • 估計NLP中的詞性

  • 生物測序

  • 序列分類

僅舉幾例。只要有觀察序列,就可以使用HMM,這對于離散情況也適用。

?

最受歡迎的見解

1.用R語言模擬混合制排隊隨機(jī)服務(wù)排隊系統(tǒng)

2.R語言中使用排隊論預(yù)測等待時間

3.R語言中實現(xiàn)馬爾可夫鏈蒙特卡羅MCMC模型

4.R語言中的馬爾科夫機(jī)制轉(zhuǎn)換(Markov regime switching)模型

5.matlab貝葉斯隱馬爾可夫hmm模型

6.用R語言模擬混合制排隊隨機(jī)服務(wù)排隊系統(tǒng)

7.Python基于粒子群優(yōu)化的投資組合優(yōu)化

8.R語言馬爾可夫轉(zhuǎn)換模型研究交通傷亡人數(shù)事故預(yù)測

9.用機(jī)器學(xué)習(xí)識別不斷變化的股市狀況——隱馬爾可夫模型的應(yīng)用


R語言中的隱馬爾可夫HMM模型實例的評論 (共 條)

分享到微博請遵守國家法律
九龙县| 盐边县| 那曲县| 霍林郭勒市| 嘉义县| 三穗县| 石柱| 龙海市| 乌拉特前旗| 余姚市| 新余市| 监利县| 三明市| 济南市| 山东省| 枝江市| 台中市| 昭苏县| 嘉荫县| 盐亭县| 张掖市| 平泉县| 宿州市| 茂名市| 黄龙县| 永清县| 武胜县| 蒲江县| 清流县| 黄冈市| 周口市| 巴林左旗| 北安市| 仁寿县| 西吉县| 姚安县| 周宁县| 香港| 灯塔市| 景宁| 和静县|