久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

R語言中的隱馬爾可夫HMM模型實(shí)例

 拓端數(shù)據(jù) 2020-11-05

原文鏈接:http:///?p=17592 

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

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

例子

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

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

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

模擬

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


# 設(shè)置simulate <- function(N, dice.val = 6, jbns, switch.val = 4){

#模擬變量#可以只使用一個(gè)骰子樣本#不同的機(jī)制,,例如只丟1個(gè)骰子,,或任何其他概率分布

b<- sample(1:dice.val, N, replace = T) + sample(1:dice.val, N, replace = T)a <- sample(1:dice.val, N, replace = T) + sample(1:dice.val, N, replace = T)bob.jbns <- rpois(N, jbns[1])alice.jbns <- rpois(N, jbns[2])

# 狀態(tài)draws <- data.frame(state = rep(NA, N), obs = rep(NA, N),









# 返回結(jié)果return(cbind(roll = 1:N, draws))



# 模擬場(chǎng)景



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

# 觀察結(jié)果

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


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


fit.hmm <- function(draws){

# HMMmod <- fit(obs ~ 1, data = draws, nstates = 2, family = poisson()





# 通過估計(jì)后驗(yàn)來預(yù)測(cè)狀態(tài)est.states <- posterior(fit.mod)head(est.states)

# 結(jié)果

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



# 輸出表格print(table(draws[,c("state", "est.state.labels")]))



## iteration 0 logLik: -346.2084## iteration 5 logLik: -274.2033## converged at iteration 7 with logLik: -274.2033## est.state.labels## state alice bob## a 49 2## b 3 46

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


# 繪圖輸出



g0 <- (ggplot(model.output$draws, aes(x = roll, y = obs)) + geom_line() +theme(axis.ticks = element_blank(), axis.title.y = element_blank())) %>% ggplotGrobg1 <- (ggplot(model.output$draws, aes(x = roll, y = state, fill = state, col = state)) +





g0$widths <- g1$widthsreturn(grid.arrange(g0, g1



plot.hmm.output(hmm1)


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

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




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

## iteration 0 logLik: -354.2707## iteration 5 logLik: -282.4679## iteration 10 logLik: -282.3879## iteration 15 logLik: -282.3764## iteration 20 logLik: -282.3748## iteration 25 logLik: -282.3745## converged at iteration 30 with logLik: -282.3745## est.state.labels## state alice bob## alice 54 2## bob 5 39 plot(hmm2)

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

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


hmm3 <- fit.hmm(draws)plot(hmm3)

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

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

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

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

在現(xiàn)實(shí)世界

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

  • 股票市場(chǎng)預(yù)測(cè),,無論市場(chǎng)處于牛市還是熊市 

  • 估計(jì)NLP中的詞性

  • 生物測(cè)序

  • 序列分類

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


    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多