clc;
clear all;
close all;

Start_Pi = [-1,-1];
State_k = ['H','L'];
% 转移矩阵
Transition_matrix = [-1,-1.322;-1.322,-0.737];
% 0 H L
% H -1 -1
% L -1.322,-0.373
% 序列中包含字母ACTG
sequence = ['A','C','G','T'];
Emission_matrix = [-2.322,-1.737,-1.737,-2.322;
-1.737,-2.322,-2.322,-1.737];
Observation_sequence = ['G','G','C','A','C','T','G','A','A'];
k = length(State_k);
l = length(Observation_sequence);
Result_matrix = zeros(k + 1,l + 1);
Result_matrix(1,2:l+1) = Observation_sequence;
Result_matrix(2:k+1,1) = State_k ;
%% Viterbi algorithm(这里是用权值代替概率计算的)
Result_matrix(2,2) = Start_Pi(1) + Emission_matrix(1,find(sequence ...
== Observation_sequence(1),1));
Result_matrix(3,2) = Start_Pi(2) + Emission_matrix(2,find(sequence ...
== Observation_sequence(1),1));
for i = 3 : l + 1
for j = 2: k+1
if j ~= k + 1
Result_matrix(j,i) = Emission_matrix(j - 1,find(sequence == Observation_sequence(i - 1),1)) +...
max(Result_matrix(j,i - 1) + Transition_matrix(j - 1,1),Result_matrix(j + 1,i - 1) + Transition_matrix(j,1) );
else
Result_matrix(j,i) = Emission_matrix(j - 1,find(sequence == Observation_sequence(i - 1),1)) +...
max(Result_matrix(j -1,i - 1) + Transition_matrix(j - 2,2),Result_matrix(j ,i - 1) + Transition_matrix(j - 1,2) );
end
end
end
%% back tracing
Result = max(Result_matrix(2:k+1,l+1));
[row,~ ]= find(Result_matrix == Result);
State_sequence = [];
State_sequence= strcat(State_k(row-1));
for i = l : -1: 3
if row == k+ 1
if Result == Result_matrix(row,i ) + Transition_matrix(row - 1,2) +...
Emission_matrix(row - 1,find(sequence == Observation_sequence(i),1))
State_sequence = strcat(State_k(2),State_sequence);
Result = Result_matrix(row,i );
else
State_sequence =strcat(State_k(1),State_sequence);
row = row -1;
Result = Result_matrix(row,i );
end
elseif row == 2
if Result == Result_matrix(row,i ) + Transition_matrix(row - 1,1) + ...
Emission_matrix(row - 1,find(sequence == Observation_sequence(i),1));
State_sequence=strcat(State_k(1),State_sequence);
Result = Result_matrix(row,i );
else
State_sequence=strcat(State_k(2),State_sequence);
row = row + 1;
Result = Result_matrix(row,i );
end
else
break;% 因为例子只有两个状态,其他就没有写
end
end
%% 输出序列头部处理
tem = max(Result_matrix(2:3,2));
[r,~] = find(Result_matrix == tem);
State_sequence= strcat(State_k(r-1),State_sequence);
disp(State_sequence)

Viterbi算法的更多相关文章

  1. HMM Viterbi算法 详解

    HMM:隐式马尔可夫链   HMM的典型介绍就是这个模型是一个五元组: 观测序列(observations):实际观测到的现象序列 隐含状态(states):所有的可能的隐含状态 初始概率(start ...

  2. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介   对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑.   本文将通过具体形象的例子来引 ...

  3. 隐马尔可夫(HMM)、前/后向算法、Viterbi算法

    HMM的模型  图1 如上图所示,白色那一行描述由一个隐藏的马尔科夫链生成不可观测的状态随机序列,蓝紫色那一行是各个状态生成可观测的随机序列 话说,上面也是个贝叶斯网络,而贝叶斯网络中有这么一种,如下 ...

  4. ZH奶酪:隐马尔可夫模型学习小记——forward算法+viterbi算法+forward-backward算法(Baum-welch算法)

    网上关于HMM的学习资料.博客有很多,基本都是左边摘抄一点,右边摘抄一点,这里一个图,那里一个图,公式中有的变量说不清道不明,学起来很费劲. 经过浏览几篇博文(其实有的地方写的也比较乱),在7张4开的 ...

  5. Viterbi算法和隐马尔可夫模型(HMM)算法

    隐马尔可夫模型(HMM)及Viterbi算法 https://www.cnblogs.com/jclian91/p/9954878.html HMM简介   对于算法爱好者来说,隐马尔可夫模型的大名那 ...

  6. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介 对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑. 本文将通过具体形象的例子来引入该模型 ...

  7. 隐马尔可夫模型及Viterbi算法

    隐马尔可夫模型(HMM,hidden Markov model)是可用于标注问题的统计学模型,描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型.HMM模型主要用于语音识别,自然语言处理,生物 ...

  8. 基于Noisy Channel Model和Viterbi算法的词性标注问题

    给定一个英文语料库,里面有很多句子,已经做好了分词,/前面的是词,后面的表示该词的词性并且每句话由句号分隔,如下图所示 对于一个句子S,句子中每个词语\(w_i\)标注了对应的词性\(z_i\).现在 ...

  9. Viterbi 算法 Python实现 [NLP学习一]

    最近思考了一下未来,结合老师的意见,还是决定挑一个方向开始研究了,虽然个人更喜欢鼓捣.深思熟虑后,结合自己的兴趣点,选择了NLP方向,感觉比纯粹的人工智能.大数据之类的方向有趣多了,个人还是不适合纯粹 ...

  10. 隐马尔科夫模型及Viterbi算法的应用

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4335810.html 一个例子: 韦小宝使用骰子进行游戏,他有两种骰子一种正常的骰子,还有一 ...

随机推荐

  1. Happen-Before规则

  2. LaTex源文件的基本结构

    默认编译器设置: Utf-8设置: 相关代码与注释: 显示效果:

  3. LeetCode 023 Merge k Sorted Lists

    题目要求:Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and ...

  4. 洛谷 P3410 拍照(最大流 + 建图)

    这道题问的是一群人要和另一群人合影,每个客人都有必须在场的人全部在场才能在场,每个客人给的有收入,但是邀请也需要支出,问最大收入? 我觉得可以总结为一类问题,就是有先决条件的网络流问题.看到费用和支出 ...

  5. springsecurity实现前后端分离之jwt-资料收集

    https://www.jianshu.com/p/5b9f1f4de88d https://www.jianshu.com/p/725d32ab92f8 https://blog.csdn.net/ ...

  6. 第11.2节 Python 正则表达式支持函数概览

    为了大家熟悉re模块匹配文本的处理,本节将概要介绍与此处理有关的几个主要函数,提供了如下主要函数: 以上函数中的部分的三个重要参数说明如下: pattern都是代表匹配规则的模式字符串,string代 ...

  7. 第15.27节 PyQt(Python+Qt)入门学习:Model/View架构中的便利类QTreeWidget详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 树部件(Tree Widget)是Qt Designer中 Item Widgets(It ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中Action创建的方法

    在Qt Designer中,可以两种方法创建Action对象,一种是菜单定义时,一种是单独定义. 一.定义菜单创建Action 在Qt Designer中创建菜单时,如果对应菜单是最终执行的菜单项,则 ...

  9. Hbase API 多条件查询

    public static ResultScanner scan(String tableName, String family, List<String> columns, List&l ...

  10. 团队作业part5--测试与发布(Alpha版本)

    测试报告 1.测试与解决bug 1)测试人员测试出的bug 游戏失败后方块还能下落 分数设计不太合理 存在行数不可消除的情况 2)开发人员解决bug 2.场景测试 适用群体:打发时间的学生.工作压力大 ...