在 Weka 中使用 HMM

Posted

技术标签:

【中文标题】在 Weka 中使用 HMM【英文标题】:Using HMM in Weka 【发布时间】:2013-06-19 03:24:41 【问题描述】:

我正在使用 weka.classifiers.bayes.HMM 尝试对我的一些数据进行分类,但我似乎找不到任何关于我的 ARFF 文件应该是什么样子的示例......文档并不是真的我清楚。

所以我知道 HMM 需要时间序列数据,我的问题是如何在我的数据集中表示它?我应该在每个特征行前面添加另一个“数字”索引吗?例如,这是我的 3 条特征线(总共有 10 条,但都遵循这种格式):

2,2.217950,2.235440,0.031252,2.224833,2.301141,0.093227,1.940765,1.973835,0.064434,1 2,2.216870,2.235608,0.035570,2.217950,2.235440,0.031252,2.023161,2.531513,0.623939,1 2,2.216577,2.246109,0.045806,2.216870,2.235608,0.035570,2.497010,2.529199,0.050049,1

每行包含几个能量读数,它们都按顺序列出:第 1 行在前,第 2 行在 1 秒后出现,第 3 行,在第 2 行读数后 1 秒等。

如何 来训练这个集合? (是的,我知道我需要一个单独的测试数据集,它也是一个时间序列)

谢谢!!

【问题讨论】:

我忘了提到我需要 5 个状态:1、2、3、4、5。它们应该以一定的概率从一个状态转移到另一个状态。例如,如果当前时隙处于状态 3,则它更有可能进入状态 2 和 4,而不是状态 1 和 5。状态位于最后一行(作为示例编辑如下):2,2.217950,2.235440 ,0.031252,2.224833,2.301141,0.093227,1.940765,1.973835,0.064434,1 2,2.216870,2.235608,0.035570,2.217950,2.235440,0.031252,2.023161,2.531513,0.623939,2 2,2.216577,2.246109,0.045806,2.216870,2.235608,0.035570 ,2.497010,2.529199,0.050049,3 【参考方案1】:

从 HMMweka 主页:

HMM 分类器仅适用于序列数据,在 Weka 中,序列数据表示为关系属性。数据实例必须有一个单一的、名义的、类属性和一个单一的、关系的、序列属性[...]

【讨论】:

【参考方案2】:

我也遇到了同样的问题,而且我也是新人,所以任何更正都将不胜感激,但这是我想出的。

下载中有一个例子很有用,具体是 numericsequence.arff 你想要的格式是这样的:

@relation relation_name
@attribute name_of_instance_attribute instance_0,instance_1,...instance_n
@attribute class relation_type_0, relation_type_1, ... relation_type_n
@attribute name_of_sequence relational 
  @attribute sequence_variable_0 type 
  @attribute sequence_variable_1 type
@end sequence_variable_1 type
@data

instance_0,relation_type_n,'5,6\n7,8\n9,10'
instance_1,relation_type_n,'2,3\n4,5\n6,7'

请确保如果您正在编写一个程序来编写您插入“\n”而不是换行符的 arff,它似乎想要一行文字 '\n' 而不是真正的换行符。

【讨论】:

在哪里可以下载 numericsequence.arff ?谢谢, 在 HMM weka 下载中

以上是关于在 Weka 中使用 HMM的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用 Weka 生成的决策树

在 MOA 中使用我的 weka 分类器

在 Matlab 中使用 HMM 的一个很好的例子

如何在 Weka 分类器中使用 svm?

在 Weka 中使用 libsvm 分类器和堆大小

Weka - 如何在 Java 中使用分类器