楼主: yukai08008
1994 1

[学习分享] HMM Viterbi算法_2 SAS代码_Andy的原创帖13 [推广有奖]

  • 2关注
  • 17粉丝

讲师

2%

还不是VIP/贵宾

-

威望
0
论坛币
2176 个
通用积分
3.0600
学术水平
10 点
热心指数
7 点
信用等级
7 点
经验
5915 点
帖子
120
精华
0
在线时间
556 小时
注册时间
2012-11-28
最后登录
2022-4-11

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
重新整理了一下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)


二维码

扫码加我 拉你入群

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

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

关键词:sas代码 ITER Andy HMM vit 程序 维特

沙发
yukai08008 在职认证  发表于 2017-6-12 17:28:08 |只看作者 |坛友微信交流群
o=b[,os]`- >o=b[,os[i]]`, 数组下标被吃掉了...

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 13:09