HMM - 为什么我们在使用HMM进行识别时需要使用子状态

时间:2017-12-02 02:31:21

标签: hmmlearn

我是新的机器学习,我使用隐马尔可夫模型进行识别活动。 我有9个不同的活动。我正在使用Jahmm库。我的数据来自加速计传感器。每个样品的载体如[270.0 2280.0 390.0 202.706888932921](2s /样品,50记录/秒)。 首先,我使用K-means来学习并保存arrayList中的所有HMM。然后我比较它们在有新特征向量时的概率。结果非常好:

Reader reader = new FileReader("My Link file");
            List<List<ObservationVector>> sequences = ObservationSequencesReader
                    .readSequences(new ObservationVectorReader(), reader);
            reader.close();

            OpdfMultiGaussianFactory gMix = new OpdfMultiGaussianFactory(4);
            KMeansLearner kml = new KMeansLearner<>(1, gMix, sequences);

            //Hmm hmm1 = kml.iterate();
            ArrayList<Hmm> listHmm = new ArrayList<>();
            listHmm.add(kml.iterate());

但是,新的KMeansLearner&lt;&gt;(1,gMix,序列) - 这意味着每个州(例如:步行),我只有子状态。但在理论上,每个州都有一些国家内部。我的工作是识别活动,为什么我需要使用子状态?

我在github上读了一些项目,大多数作者使用BaumWelchLearner来拟合HMM的参数。但是当我使用我的数据时,我遇到了两个错误:     1:如果我的数据如:

[ 270.0 2280.0 390.0 202.706888932921 ] ; 
 [ 140.0 2010.0 720.0 165.88948785066606 ] ; 
 [ 950.0 1850.0 300.0 209.37353643104433 ] ; 
 [ 220.0 2520.0 540.0 225.51551675635858 ] ; 
 [ 90.0 1390.0 370.0 92.85073343887925 ] ; 
 [ 280.0 2970.0 480.0 206.20770830791443 ] ; 
 [ 340.0 1530.0 160.0 154.4395940899849 ] ; 
 [ 210.0 3410.0 90.0 208.4459552027285 ] ; 
 [ 270.0 1570.0 290.0 163.63963507041333 ] ; 
 [ 360.0 2830.0 620.0 201.01313211023808 ] ; 
 [ 320.0 1980.0 230.0 120.60316500067711 ] ; 
 [ 320.0 1940.0 330.0 185.39230969622733 ] ; 
 [ 310.0 2080.0 780.0 217.30981059428305 ] ; 

KMeansLearner kMeansLearner = new KMeansLearner(1,gMix,sequences);
            BaumWelchLearner baumWelchLearner = new BaumWelchLearner();
            Hmm initHmm = kml.iterate();
            Hmm finalHmm = baumWelchLearner.iterate(initHmm,sequences);

我得到错误:观察序列太短,因为每个特征向量都是观察。

2. If my data is :

[270.0 2280.0 390.0 202.706888932921]; [140.0 2010.0 720.0 165.88948785066606]; [950.0 1850.0 300.0 209.37353643104433]; ......每个观察序列都有更多

然后,当我使用ViterbiCalculator计算它们时,结果非常糟糕,概率为NA。

我的问题是: 1:为什么我们需要在隐马尔可夫模型中使用子状态 2:为什么我使用BaumWelchLearner学习,我的成绩非常糟糕

抱歉我的英文。非常感谢!

0 个答案:

没有答案