【数学】【机器学习】什么是隐马尔可夫模型 (HMM)?

文章目录

    • 隐马尔可夫模型 (HMM)
      • 背景
      • 公式
      • 示例题目
      • 详细讲解
      • Python代码求解
      • 实际生活中的例子
    • 什么是隐变量
      • 背景
      • 隐含变量的意义
      • 举例说明
      • HMM的三个基本问题
      • 示例

隐马尔可夫模型 (HMM)

背景

隐马尔可夫模型(Hidden Markov Model, HMM)是一种统计模型,用于描述含有隐含变量的时间序列数据。它在自然语言处理、语音识别、生物信息学等领域有广泛应用。HMM假设系统是一个马尔可夫过程,即未来的状态只依赖于当前状态,而与过去状态无关。此外,HMM有两个层次:观测层次和隐藏层次,观测层次是可以看到的数据,隐藏层次是我们无法直接观察到的状态。

公式

HMM主要包括以下几个公式和参数:

  1. 初始状态分布: π = { π i } \pi = \{\pi_i\} π={πi},表示系统初始时刻各状态的概率分布。
  2. 状态转移矩阵: A = { a i j } A = \{a_{ij}\} A={aij},表示从状态 i i i转移到状态 j j j的概率。
  3. 观测概率矩阵: B = { b j ( k ) } B = \{b_j(k)\} B={bj(k)},表示在状态 j j j下观测到符号 k k k的概率。

上述参数的定义为:

  • π i = P ( Q 1 = S i ) \pi_i = P(Q_1 = S_i) πi=P(Q1=Si)
  • a i j = P ( Q t + 1 = S j ∣ Q t = S i ) a_{ij} = P(Q_{t+1} = S_j | Q_t = S_i) aij=P(Qt+1=SjQt=Si)
  • b j ( k ) = P ( O t = v k ∣ Q t = S j ) b_j(k) = P(O_t = v_k | Q_t = S_j) bj(k)=P(Ot=vkQt=Sj)

示例题目

假设一个简单的天气模型,有两个隐藏状态(晴天和雨天)和两个观测值(散步和打伞)。我们知道初始状态分布、状态转移矩阵和观测概率矩阵如下:

  • 初始状态分布: π = [ 0.6 , 0.4 ] \pi = [0.6, 0.4] π=[0.6,0.4]
  • 状态转移矩阵:
    A = [ 0.7 0.3 0.4 0.6 ] A = \begin{bmatrix} 0.7 & 0.3 \\ 0.4 & 0.6 \end{bmatrix} A=[0.70.40.30.6]
  • 观测概率矩阵:
    B = [ 0.5 0.5 0.1 0.9 ] B = \begin{bmatrix} 0.5 & 0.5 \\ 0.1 & 0.9 \end{bmatrix} B=[0.50.10.50.9]

观测序列为:散步,打伞,散步,问隐状态序列的概率分布。

详细讲解

我们需要使用前向算法计算观测序列的概率。前向算法通过动态规划的方法逐步计算出每个时刻的前向概率。

  1. 初始化:
    α 1 ( i ) = π i b i ( O 1 ) \alpha_1(i) = \pi_i b_i(O_1) α1(i)=πibi(O1)
    对于本题:
    α 1 ( 1 ) = 0.6 ⋅ 0.5 = 0.3 \alpha_1(1) = 0.6 \cdot 0.5 = 0.3 α1(1)=0.60.5=0.3
    α 1 ( 2 ) = 0.4 ⋅ 0.1 = 0.04 \alpha_1(2) = 0.4 \cdot 0.1 = 0.04 α1(2)=0.40.1=0.04

  2. 递推:
    α t + 1 ( j ) = [ ∑ i = 1 N α t ( i ) a i j ] b j ( O t + 1 ) \alpha_{t+1}(j) = \left[ \sum_{i=1}^{N} \alpha_t(i) a_{ij} \right] b_j(O_{t+1}) αt+1(j)=[i=1Nαt(i)aij]bj(Ot+1)
    对于第二个观测值:
    α 2 ( 1 ) = [ α 1 ( 1 ) ⋅ a 11 + α 1 ( 2 ) ⋅ a 21 ] b 1 ( O 2 ) \alpha_2(1) = \left[ \alpha_1(1) \cdot a_{11} + \alpha_1(2) \cdot a_{21} \right] b_1(O_2) α2(1)=[α1(1)a11+α1(2)a21]b1(O2)
    = [ 0.3 ⋅ 0.7 + 0.04 ⋅ 0.4 ] ⋅ 0.5 = \left[ 0.3 \cdot 0.7 + 0.04 \cdot 0.4 \right] \cdot 0.5 =[0.30.7+0.040.4]0.5
    = 0.107 = 0.107 =0.107
    α 2 ( 2 ) = [ α 1 ( 1 ) ⋅ a 12 + α 1 ( 2 ) ⋅ a 22 ] b 2 ( O 2 ) \alpha_2(2) = \left[ \alpha_1(1) \cdot a_{12} + \alpha_1(2) \cdot a_{22} \right] b_2(O_2) α2(2)=[α1(1)a12+α1(2)a22]b2(O2)
    = [ 0.3 ⋅ 0.3 + 0.04 ⋅ 0.6 ] ⋅ 0.9 = \left[ 0.3 \cdot 0.3 + 0.04 \cdot 0.6 \right] \cdot 0.9 =[0.30.3+0.040.6]0.9
    = 0.081 = 0.081 =0.081

  3. 终止:
    P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O | \lambda) = \sum_{i=1}^{N} \alpha_T(i) P(Oλ)=i=1NαT(i)
    对于第三个观测值:
    α 3 ( 1 ) = [ α 2 ( 1 ) ⋅ a 11 + α 2 ( 2 ) ⋅ a 21 ] b 1 ( O 3 ) \alpha_3(1) = \left[ \alpha_2(1) \cdot a_{11} + \alpha_2(2) \cdot a_{21} \right] b_1(O_3) α3(1)=[α2(1)a11+α2(2)a21]b1(O3)
    = [ 0.107 ⋅ 0.7 + 0.081 ⋅ 0.4 ] ⋅ 0.5 = \left[ 0.107 \cdot 0.7 + 0.081 \cdot 0.4 \right] \cdot 0.5 =[0.1070.7+0.0810.4]0.5
    = 0.04255 = 0.04255 =0.04255
    α 3 ( 2 ) = [ α 2 ( 1 ) ⋅ a 12 + α 2 ( 2 ) ⋅ a 22 ] b 2 ( O 3 ) \alpha_3(2) = \left[ \alpha_2(1) \cdot a_{12} + \alpha_2(2) \cdot a_{22} \right] b_2(O_3) α3(2)=[α2(1)a12+α2(2)a22]b2(O3)
    = [ 0.107 ⋅ 0.3 + 0.081 ⋅ 0.6 ] ⋅ 0.1 = \left[ 0.107 \cdot 0.3 + 0.081 \cdot 0.6 \right] \cdot 0.1 =[0.1070.3+0.0810.6]0.1
    = 0.00837 = 0.00837 =0.00837

最终,观测序列的概率为:
P ( O ∣ λ ) = α 3 ( 1 ) + α 3 ( 2 ) = 0.04255 + 0.00837 = 0.05092 P(O | \lambda) = \alpha_3(1) + \alpha_3(2) = 0.04255 + 0.00837 = 0.05092 P(Oλ)=α3(1)+α3(2)=0.04255+0.00837=0.05092

Python代码求解

import numpy as np# 初始参数
pi = np.array([0.6, 0.4])
A = np.array([[0.7, 0.3],[0.4, 0.6]])
B = np.array([[0.5, 0.5],[0.1, 0.9]])
O = [0, 1, 0]  # 0表示散步,1表示打伞# 前向算法
def forward(pi, A, B, O):N = len(pi)T = len(O)alpha = np.zeros((T, N))# 初始化alpha[0, :] = pi * B[:, O[0]]# 递推for t in range(1, T):for j in range(N):alpha[t, j] = np.sum(alpha[t-1, :] * A[:, j]) * B[j, O[t]]# 终止return np.sum(alpha[-1, :])# 计算观测序列的概率
prob = forward(pi, A, B, O)
print(f"观测序列的概率为: {prob}")

实际生活中的例子

隐马尔可夫模型在语音识别中有重要应用。例如,在电话客服系统中,HMM可以用来处理用户的语音输入,识别用户的意图,进而提供相应的服务。假设用户输入了一段语音,系统通过HMM模型对语音进行分析,判断每一段语音对应的文字,再根据文字内容判断用户的需求,例如查询余额、转账等。

什么是隐变量

隐含变量(Hidden Variables)在隐马尔可夫模型(HMM)中指的是那些不能直接观察到但对系统行为产生影响的状态。它们是隐藏在观测数据背后的真实状态。

背景

在很多实际问题中,我们只能观察到某些现象或数据(观测变量),但这些数据是由一些我们看不到的状态(隐含变量)所决定的。例如,在语音识别中,观测变量是音频信号,而隐含变量是对应的文字或语音的语义。在天气预测中,观测变量是我们每天看到的天气情况(晴天、雨天),而隐含变量可能是更深层的气候模式或气压系统。

隐含变量的意义

隐含变量的存在使得问题更加复杂,因为我们需要通过观测数据去推断这些看不见的状态。HMM提供了一种系统化的方法来处理这种问题。通过定义初始状态分布、状态转移矩阵和观测概率矩阵,我们可以描述系统在时间序列上的演变。

举例说明

以天气预测为例:

  • 隐含变量:天气状态(晴天、雨天)
  • 观测变量:活动(散步、打伞)

我们无法直接知道今天是晴天还是雨天(隐含变量),但是我们可以看到今天有人散步或者打伞(观测变量)。通过一段时间的观测活动数据,我们可以推断出天气的变化模式(隐含变量的变化)。

HMM的三个基本问题

  1. 评估问题:给定模型参数和观测序列,计算观测序列的概率。
  2. 解码问题:给定观测序列和模型参数,找到最有可能的隐含状态序列。
  3. 学习问题:给定观测序列,估计模型参数(初始状态分布、状态转移矩阵、观测概率矩阵)。

示例

假设我们有以下模型参数:

  • 隐含状态:晴天( S 1 S_1 S1)、雨天( S 2 S_2 S2
  • 观测状态:散步( O 1 O_1 O1)、打伞( O 2 O_2 O2
  • 初始状态分布: π = [ 0.6 , 0.4 ] \pi = [0.6, 0.4] π=[0.6,0.4]
  • 状态转移矩阵:
    A = [ 0.7 0.3 0.4 0.6 ] A = \begin{bmatrix} 0.7 & 0.3 \\ 0.4 & 0.6 \end{bmatrix} A=[0.70.40.30.6]
  • 观测概率矩阵:
    B = [ 0.5 0.5 0.1 0.9 ] B = \begin{bmatrix} 0.5 & 0.5 \\ 0.1 & 0.9 \end{bmatrix} B=[0.50.10.50.9]

观测序列为:散步,打伞,散步。我们通过前向算法计算该观测序列的概率。

import numpy as np# 初始参数
pi = np.array([0.6, 0.4])
A = np.array([[0.7, 0.3],[0.4, 0.6]])
B = np.array([[0.5, 0.5],[0.1, 0.9]])
O = [0, 1, 0]  # 0表示散步,1表示打伞# 前向算法
def forward(pi, A, B, O):N = len(pi)T = len(O)alpha = np.zeros((T, N))# 初始化alpha[0, :] = pi * B[:, O[0]]# 递推for t in range(1, T):for j in range(N):alpha[t, j] = np.sum(alpha[t-1, :] * A[:, j]) * B[j, O[t]]# 终止return np.sum(alpha[-1, :])# 计算观测序列的概率
prob = forward(pi, A, B, O)
print(f"观测序列的概率为: {prob}")

实际生活中的例子如语音识别系统和天气预测系统都是通过观察外部现象(观测变量)来推断内部状态(隐含变量),从而进行决策和预测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/27562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有监督学习——梯度下降

1. 梯度下降 梯度下降(Gradient Descent)是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法,在理论上不保证下降求得最优解。 e.g. 假设有三维曲面表达函数空间,长(x)、宽(y)轴为子变量,高(z)是因变量&…

大模型企业落地:汽车行业知识大模型应用

前言 在当今这个信息爆炸的时代,知识管理成为了企业提升核心竞争力的关键。特别是在汽车行业这样一个技术密集、信息量庞大的领域,如何高效管理和利用知识资源,成为了每个企业必须面对的挑战。 汽车行业的知识管理痛点 汽车行业作为现代工…

10.错误处理

标题 一、概述二、panic!与不可恢复错误2.1 出错时2.2 示例2.3 panic!的 backtrace 三、Result 与可恢复的错误3.1 引入3.2 错误示例3.3 传播错误1)概念2)传播错误示例3)传播错误的简写:?运算符 一、概述 Rust将错误分…

springboot网上书店管理系统-计算机毕业设计源码03780

摘 要 网上书店管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分,管理员管理主要功能包括:首页、站点管理(轮播图)用户管理(管理员、注册用户)内容管理&#x…

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -2

概要 CAN测试源码: https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理,总共30个基础CAN函数; 该文章只梳理常规CAN,增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…

深入理解ReentrantLock

深入理解ReentrantLock 在Java并发编程中,锁(Lock)是控制多个线程对共享资源访问的重要工具。虽然Synchronized关键字是实现锁的常用方式,但它在功能上比较有限。ReentrantLock是java.util.concurrent.locks包中提供的一个更加灵…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》

系列文章 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 说明 上一篇 FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《01》 主要讲了一下如何快速搭建一个 STM32 裸机工程,其实 STM32CubeMX 可以生成 FreeRTOS 的工程,这就…

python连接mysql数据库、FastAPI、mysql-connector-python

方法工具一、FastAPI 建议使用fast api中的pymysql pip3 install fastapi pip3 install pydantic pip3 install "uvicorn[standard]" pip3 中的3是 Python 3 版本的包管理器命令,用于安装和管理 Python 3 版本的第三方库。在某些系统中,同时…

Linux host映射 设置主机名并通过主机名找到指定系统

一、windows ping linux 1.windows进入到 C:\Windows\System32\drivers\etc\hosts 内,使用edit with notepad打开hosts文件,在下面添加需要寻找的ip以及其主机名。该ip以及主机名即linux的一致。需要查看linux主机名的在终端使用 hostname进行查看&#…

spring boot3登录开发-邮箱登录/注册接口实现

⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 🌊山高路远,行路漫漫,终有归途 目录 写在前面 上文衔接 内容简介 功能分析 所需依赖 邮箱验证登录/注册实现 1.创建交互对象 2.登录注册业务逻辑实…

JDK17 你的下一个白月光

JDK版本升级的非常快,现在已经到JDK20了。JDK版本虽多,但应用最广泛的还得是JDK8,正所谓“他发任他发,我用Java8”。 但实际情况却不是这样,越来越多的java工程师拥抱 JDK17,于是了解了一下 JDK17新语法&a…

python中的类和对象的基本概念记录

1.python中的类和对象的概念 1.1 类也是对象 在python中的一切皆对象 ,所以python中的类 也是对象。 这与c是不同的,c的类在实例化为对象之前是没有意义的,编译器也不会为其分配内存。 python中的类 即使不实例化为对象,也可以单独使用。类…

Star-CCM+自动网格执行方法与设置技巧

在Star中进行一个仿真项目时,有时会创建多个自动网格。网格创建结束后需要执行。在Star中,网格执行可以分为三种。分别是:单独执行操作;多个执行操作;全部执行操作。接下来将三种执行操作的方法与步骤进行介绍。 其次,如果不习惯用自定义控制网格,有时在一个项目中就会…

大模型+人工智能:重塑地方志管理的新力量

前言 在科技日新月异的今天,人工智能(AI)正以前所未有的速度渗透到各个领域,改变着我们的工作和生活方式。特别是在地方志管理这一领域,大模型和人工智能的结合正在开启一场深刻的变革。今天,就让我们一起…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】梯度的反向传播算法

矩阵微积分(Matrix Calculus) 在开始之前,需要先了解矩阵微积分的一些计算规则。 首先,对于矩阵微积分的表示,通常由两种符号约定: 分母布局 标量关于向量的导数为列向量 向量关于标量的导数为行向量 N维…

LDR6500:手机电脑拓展坞转接器方案的卓越之选

随着科技的飞速发展,手机和电脑已成为我们日常生活中不可或缺的工具。然而,它们的接口有限,经常难以满足我们多样化的需求。这时,一款高效、稳定的拓展坞转接器就显得尤为重要。LDR6500,作为乐得瑞科技精心研发的USB P…

【计算机视觉(10)】

基于Python的OpenCV基础入门——图像滤波去噪 图像滤波去噪均值滤波中值滤波高斯滤波双边滤波方框滤波图像滤波去噪代码实现及其效果图 图像滤波去噪 图像滤波去噪是一种图像处理方法,它通过应用滤波器来减少或消除图像中的噪声。噪声是图像中不希望的、无用的、干…

安装sqlserver2022 express

1、下载 SQL Server 下载 | Microsoft 双击sql2022-ssei-expr 2、安装 下载完成以后,将会出现以下对话框 : 点击【全新SQL Server独立安装或向现有安全添加功能】 下一步,下一步: 下一步: 下一步,这里我…

Memcached:内存缓存的强大引擎及其深度解析

Memcached 是一个高性能、分布式内存对象缓存系统,用于减轻数据库负载、提高Web应用的响应速度和性能。它通过将数据存储在内存中,减少了对数据库的频繁访问,从而提高了数据读取的速度和效率。本文将详细介绍Memcached的工作原理、使用场景、安装与配置、性能优化及其与其他…

【LeetCode:2779. 数组的最大美丽值 + 排序 + 二分】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…