R depmixs中的HMM文本识别4

时间:2015-05-09 23:55:02

标签: r machine-learning speech-recognition hidden-markov-models

我想知道如何利用depmixs4包为R在数据集上运行HMM。我将使用哪些功能,以便获得测试数据集的分类? 我有一个训练数据文件,一个标签数据文件和一个测试数据。 训练数据包含4620行。每行有1079个值。这些值是83个窗口,每个窗口有13个值,因此在其他方面,1079是由83个状态组成的数据,每个类别有13个观察值。具有1079个值的这些行中的每一个都是口语单词,因此它具有4620个话语。但总的来说,数据只有7个不同的单词。这些不同的单词中的每一个都有660种不同的话语,因此有4620行单词。 所以我们有文字(0-6) 标签文件是一个列表,其中每一行标记为0-6,对应于它们是什么单词。例如,行300标记为2,行450标记为6,520标记为0 测试文件包含大约5000行,其结构与训练数据完全相同,只是没有与之关联的标签。 我想使用HMM来使用训练数据来对测试数据进行分类。 我如何使用depmixs4输出我的测试数据的分类? 我正在看:

  depmix(response, data=NULL, nstates, transition=~1, family=gaussian(), 
        prior=~1, initdata=NULL, respstart=NULL, trstart=NULL, instart=NULL,
        ntimes=NULL,...)

但我不知道响应是指什么或任何其他参数。

1 个答案:

答案 0 :(得分:2)

如果只是为了让您熟悉基本大纲,这是一个快速但尽管不完整的测试,可以帮助您入门。请注意,这是一个玩具示例,它只是表面上的HMM设计/分析。例如,depmixs4包的插图提供了大量的上下文和示例。同时,这是一个简短的介绍。

让我们说你想调查工业生产是否能提供有关经济衰退的线索。首先,让我们加载相关的包,然后从St. Louis Fed下载数据:

library(quantmod)
library(depmixS4)
library(TTR)

fred.tickers <-c("INDPRO")
getSymbols(fred.tickers,src="FRED")

接下来,将数据转换为滚动的1年百分比变化,以最大限度地减少数据中的噪音,并将数据转换为data.frame格式,以便在depmixs4中进行分析:

indpro.1yr <-na.omit(ROC(INDPRO,12))
indpro.1yr.df <-data.frame(indpro.1yr)

现在,让我们运行一个简单的HMM模型,只选择2个状态 - 增长和收缩。请注意,我们只使用工业生产来搜索信号:

model <- depmix(response=INDPRO ~ 1, 
                family = gaussian(), 
                nstates = 2, 
                data = indpro.1yr.df ,
                transition=~1)

现在让我们拟合生成的模型,生成后验状态 用于分析,并估计经济衰退的可能性。此外,我们将使用xts格式的日期绑定数据,以便于查看/分析。 (注意使用set.seed(1),它用于创建可复制的起始值以启动建模。)

set.seed(1)
model.fit <- fit(model, verbose = FALSE)
model.prob <- posterior(model.fit)
prob.rec <-model.prob[,2]
prob.rec.dates <-xts(prob.rec,as.Date(index(indpro.1yr)),
    order.by=as.Date(index(indpro.1yr)))

最后,让我们回顾并理想地绘制数据:

head(prob.rec.dates)
                [,1]
1920-01-01 1.0000000
1920-02-01 1.0000000
1920-03-01 1.0000000
1920-04-01 0.9991880
1920-05-01 0.9999549
1920-06-01 0.9739622

高值(> 0.80 ??)表明经济处于衰退/收缩状态。

再次,一个非常非常基本的介绍,也许是太基础了。希望它有所帮助。