全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2256 1
2016-02-26
重新整理了一下Viterbi的程序,写成了一个宏,可以展示序列和每个时段的概率。(有点赶时间,就不多废话了)维特比的思路:最大可能路径
v1.jpg

例子的参数:


v2.jpg
观察序列:
v3.jpg
示例结果:
v4.jpg
我的运行结果:
v5.jpg
我的宏(viterbi)

%macroviterbi(obs);

prociml;

/*

M=2 观察状态数为2

N=3 隐含状态数为3

*/

/*用函数创建3*3方阵-这个例子的转移矩阵不是很好*/

/*A为转移矩阵*/

A=j(3,3,0.333);

/*B为发射矩阵*/

B={0.5 0.5,

   0.75 0.25,

   0.25 0.75};

/*用函数创建初始向量*/

pi=j(1,3,0.333);

/*创建单位矩阵,用于选择选举胜出的状态*/

vec=i(3);

/*初始状态*/

/*转移矩阵-不变*/

h=pi;

/*观察序列*/

os={&obs};

/*观察状态-确定性,第一次为os[1]*/

o=b[,os[1]]`;

/*发射-产生候选比较集*/

can1=h#o;

/*获取获胜隐含状态及概率*/

ws=can1[<:>];

pr=can1`;

do i=2 to ncol(os);

h_win=vec[ws[i-1],];

h=h_win*a;

/*观察状态*/

o=b[,os]`;

/*发射-产生候选比较集*/

can1=h#o;

/*获取获胜隐含状态及概率*/

ws=ws||can1[<:>];

pr=pr||can1`;

end;

printws;

printpr;

quit;

%mend;

%viterbi(1 1 1 1 2 1 2 2 2 2)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-6-12 17:28:08
o=b[,os]`- >o=b[,os[i]]`, 数组下标被吃掉了...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群