我是 HMM 的新手,但我尝试使用 Jahmm 为 UCI 人类活动识别数据集构建代码。该数据集有 561 个特征,7352 行,还包括加速度计和陀螺仪的 xyz 惯性值,主要用于识别 6 种活动:步行、步行上楼、步行下楼、坐着、站立和躺着。到目前为止,我已经尝试了以下方法:
使用 xyz 惯性值:
- 对于 6 项活动中的每一项,我为每个轴(加速度计和陀螺仪)训练了 6 个 HMM,仅使用相应 HMM 的活动训练数据。对于每项活动,我也对所有轴的概率(即,当应用于测试数据时)应用相同的权重,并将它们全部相加以获得每个活动的总数。最大概率将是被选中的那个。(这个我运气不好。有超高准确率的活动同时对其他人超低。)注意:我使用“ObservationReal”,6个状态(实际上是2-10个状态),并且只是均匀划分HMM 的初始值。我有时会得到一些活动的 NaN 值。
- 我还尝试先在 R 中缩放(z-score)数据,然后应用上述方法,但仍然无济于事。
- 我还尝试使用“ObservationVector”对惯性值进行编码,但我不知道如何设置初始 Opdf(它说它必须是一个正定矩阵)。
具有特征值:
- 我发现功能集太大而无法在 Jahmm 上运行,因此使用缩放数据(因为我无法使用开箱即用的数据获得任何体面的结果,尽管它已标准化 [-1,1]) ,我在我的 Jahmm 代码(由六个 6 态 HMM 组成,每个活动对应每个活动,使用测试数据取最大概率)之前,在 R 上运行了 PCA 和相关性的训练和测试数据,结果是还是不太好。尤其是坐姿活动,其准确率始终在 20% 左右。(与上述“注”参数相同)
- 我用 R 上的相同数据(mtry=8)运行了 randomForest,并得到了重要性值。我首先用 119 个变量将机车活动和静态活动分开,然后将机车活动(步行、W. Upstairs、W. Downstairs)分类为 89 个特征(基于 RF 重要性值)和静态活动(Sitting、Standing、Laying)分类为 5变量。将机车活动和静态活动分开很容易(2 个状态,100%),但是这种方法在调整 HMM 参数后,我只获得了 86% 的整体准确度。(第二级使用三态 HMM)
- 我为所有活动训练了一个 HMM,有 6 个状态(对应于 1 个活动,正如我在一篇论文中读到的)。但在那之后我不知道如何使用维特比。它告诉我 Viterbi 需要
List<Observation O>
测试序列,但我显然有List<List<ObservationReal>>
我的测试数据。
我还在 R 中尝试过 HMM 包:
- depmixS4 - 没有维特比,我不知道如何用测试数据获得后验概率(它只给出火车数据的概率);我已经尝试联系包的作者,他试图帮助我,但他告诉我尝试的代码给了我错误(我还没有给他发电子邮件)。
- RHmm - 一开始就像一个魅力;只用所有训练数据训练了一个 6 状态 HMM,但产生了 nans,导致测试数据的维特比序列不好。
根据我目前所读到的关于 HMM 的内容,这些结果对于 HMM 来说太低了。难道我做错了什么?在使用上述技术之前我应该做更多的预处理吗?对于 HMM/Jahmm 来说,数据真的太大了吗?我过拟合了吗?我现在卡住了,但我真的必须为我的项目做活动识别和 HMM。我很高兴能从已经尝试过 Jahmm 和 R 进行连续 HMM 的人那里得到建议/反馈。我也愿意学习其他语言,如果这意味着它最终会奏效的话。