您的位置:首页 > 编程语言 > MATLAB

基于HMM轨迹识别matlab简单说明

2014-12-10 12:49 246 查看


基于HMM隐马尔科夫模型 轨迹识别

字母20个
a
b
c
d
e
g
h
k
l
m
识别个数
19
11
19
18
20
20
19
20
13
16
字母20个
n
o
p
q
r
s
v
w
y
z
识别个数
14
8
10
20
16
20
18
20
5
20
总计正确识别326。概率为325/400=81.5%


Matlab代码简单说明。

rand('state',0);

statenum=2;%状态数 可以变,状态数不一样 识别性能会些许改变

trans=rand(statenum);

sumTrans=sum(trans,2);

Temp=inv(diag(sumTrans));

trans=(trans'*Temp)';%状态转移矩阵

observationnum=12;%观察状态数

emis = ones(statenum,observationnum)*(1/observationnum);%混合矩阵

[estTrain,estEmis] = hmmtrain(Trseq,trans,emis);%训练

Trseq为某一类型轨迹训练样本集,每一条轨迹的点数可能不一样。

故Trseq为一个cell结构。

比如说:

Trseq={[3 3 3 4 5 4 5 5 6 6 7 7 8 8 8 9 10 10 11 12 1 2 23 3 3 3 5 8 8 9 10 10 10 11 11 12 12 1 1]

[4 5 5 5 6 6 7 8 8 9 9 10 11 12 1 2 2 3 3 3 3 7 9 9 10 10 11 12 12 1 1 2 3]

[4 5 6 6 7 7 8 8 9 10 10 11 1 2 2 3 3 3 3 1 9 9 10 10 11 12 12 1 1 3]

[4 5 5 6 6 7 7 8 9 9 10 11 12 2 3 3 3 3 3 10 9 9 10 10 11 12 12 1 2]

[4 4 4 5 5 6 6 7 8 8 9 9 10 10 12 1 2 3 3 3 3 3 4 10 9 9 10 10 10 11 12 12 1 1]

[4 4 5 5 6 7 7 8 8 9 9 10 11 12 1 2 3 3 3 3 3 4 1 8 9 9 10 10 11 11 12 1 1 2]

[4 4 4 5 5 6 6 7 8 8 9 9 10 10 11 1 2 2 3 3 3 3 3 1 8 9 10 10 11 11 12 12 1 12]

[3 4 4 4 5 5 6 7 7 8 9 9 10 10 11 12 1 2 3 3 3 3 3 4 9 9 10 10 10 11 12 12 1 12]

[2 4 4 4 4 4 5 6 7 7 8 9 9 10 10 11 1 2 2 3 3 3 3 4 8 9 10 10 11 12 12 1 1 2]}

estTrain,estEmis分别指 训练得到的状态转移矩阵,混合转移矩阵(状态到观察值转移矩阵)

[~,logPro]= hmmdecode(Ttest,estTrain,estEmis);%测试

Ttest为一条即将要识别的类型,或者测试的轨迹编码,比如说

Ttest=[3 4 4 4 4 4 5 6 7 8 8 9 9 10 10 11 12 1 2 3 3 3 32 8 10 10 10 11 11 12 1 2];

通过hmmdecode计算之后得到logPro。

不同的训练样本集,训练得出不同的HMM

给定的一条轨迹编码,带入不同的HMM,得到相应的logPro,选择tlog最大的值对应的HMM类型即为该类型的轨迹模式。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: