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. js 实现textarea剩余字数统计

    1 针对textarea剩余字数统计 2 <div class="fankui-textarea"> 3 <span>留言:</span> &l ...

  2. php filesize不能统计临时文件

    文件上传时要统计上传的文件的大小,使用filesize('文件名')的时候,其中 的文件名就得是文件在本地的临时文件但是会出现一个错误显示成 filesize(): stat failed for D ...

  3. 拿到这份 Java、C++ 软件开发完整学习路线图,我面试再也没挂过..

    大家好,我是柠檬. 柠檬哥作为一个普通大学.非计算机专业,自学后端技术进入腾讯做后端开发工作,我自己也是非科班自学计算机成功转行软件开发(有想听柠檬哥转行之路经历的吗,可以留言告诉我,人多就写写),体 ...

  4. C#中的WinForm问题——如何设置窗体的大小为超过屏幕显示的最大尺寸?

    今天在学习C#时遇到了一个问题,在此记录下来,留作日后总结复习之用,也分享给有同样问题和困扰的园友. 我手上的电脑是笔记本电脑,屏幕的尺寸大小为1366*768,然而项目所使用的屏幕大小为1920*1 ...

  5. mininet + opendaylight环境配置

    环境配置 ubuntu18.04 镜像 mininet2.2.2 apt-get install mininet 但这种安装只是TLS版本的mininet,与最新版本在功能上有所差距. 控制器(ope ...

  6. devc++编译时 undefined reference to `__imp_WSAStartup'

    socket编程时遇到的问题:

  7. Tree--二叉树BinarySearchTree

    BinarySearchTreeMap的实现 1 public interface Map<K extends Comparable<K>, V> { 2 void put(K ...

  8. Django结合Websocket进行WebSSH的实现

    什么是webssh? 泛指一种技术可以在网页上实现一个 终端.从而无需 之类的模拟终端工具进行 连接,将 这一比较低层的操作也从 架构扭成了 架构 这样的架构常用在运维制作开发一些堡垒机等系统中,或是 ...

  9. idea:如果String 跟System该怎么解决

    这个问题还是比较简单的,但有很多小白不知道,我也是刚刚才遇到查了一些资料才知道的 接下来这里就是需要配置你的SDK,所以请你点击右上角的图标,进行配置SDK jdk下载地址:https://www.o ...

  10. 记一次MySQL出现Waiting for table metadata lock的原因、排查过程与解决方法

    任务背景:将sql文件通过shell直接导入到mysql中执行(还原) bug表现:导入后java项目卡死 过程: 1.网上乱搜一通,无意间看到一篇文章,这篇文章说明了如何开启mysql的genera ...