机器学习第十四章-概率图模型

目录

14.1 隐马尔可夫模型

14.2马尔科夫随机场

14.3条件随机场

14.4学习与推断

14.4.1变量消去

14.4.2信念传播

14.5近似推断

14.5.1 MCMC采样

14.5.2 变分推断

14.6 话题模型


14.1 隐马尔可夫模型

       概率围棋型是一类用图来表达变量相关关系的概率模型.它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的边表示变量间的概率相关关系,即"变量关系图”。

        隐马尔可夫模型是结构最筒单的动态贝叶斯网 ,这是一种著名的有向图模型,主要用于时序数据建模,在语音识别、自然语言处理等领域有广泛应用。
        系统下一时刻的状态仅由当前状态决定,不依赖于以往的任何状态.基于这种依赖关系,所有变量的联合概率分布为:        
                P\left(x_{1}, y_{1}, \ldots, x_{n}, y_{n}\right)=P\left(y_{1}\right) P\left(x_{1} \mid y_{1}\right) \prod^{n} P\left(y_{i} \mid y_{i-1}\right) P\left(x_{i} \mid y_{i}\right)
欲确定一个隐马尔可夫模型还需以下三组参数:

1. 状态转移概率矩阵:
   记作 A = [a_{ij}],其中a_{ij} = P(Y_{t+1} = S_j \mid Y_t = S_i)
   表示从状态 S_i转移到状态S_j 的概率。矩阵的每个元素 a_{ij}描述了状态转移的可能性。

2. 观测概率矩阵:
   记作 B = [b_{ij}],其中b_{ij} = P(X_t = O_j \mid Y_t = S_i)
   描述在状态S_i 下观测到观测值 O_j的概率。每个元素b_{ij}指定了在某个隐状态下生成某个观测值的概率。

3. 初始状态概率向量:
   记作\pi = [\pi_i],其中 \pi_i = P(Y_1 = S_i)
   表示在初始时刻系统处于状态S_i的概率。这个向量定义了模型开始时各状态的分布。

        通过指定状态空间 、观测空间 和上述三组参数,就能确定一个隐马尔可夫模型,通常用其参数 λ= [A ,B,π ]来指代.给定隐马尔可夫模型 ,它按如下过程产生观测序列 {x1,x2,x3..... }:
        
(1) 设置 t =1  ,并根据初始状态概率π选择初始状态 y1 ;
(2) 根据状态yt和输出现测概率 B 选择观测变量取值 Xt;
(3) 根据状态yt和状态转移矩阵 A 转移模型状态,即确定 Yt +1;
(4) t < n 设置 t = t +1  ,并转到第 (2) 步,否则停止.

14.2马尔科夫随机场

        马尔可夫随机场(Markov Random Field ,简称 MRF)是典型的马尔可夫网, 这是一种著名的无向圈模型,圈中每个结点表示一个或一组变量,结点之间 的边表示两个变量之间的依赖关系。

                        

        对于n个变量 X={x1,x2....xn} 所有团构成的集合为C ,与团Q\epsilon C 对应的变量集合记为X_{q} 则联合概率 P(X) 定义为:
                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        P(\mathbf{x})=\frac{1}{Z} \prod_{Q \in \mathcal{C}} \psi_{Q}\left(\mathbf{x}_{Q}\right)
基于分离集的概念,得到了MRF的三个性质:
  1. 全局马尔可夫性:给定两个变量子集的分离集,则这两个变量子集条件独立。
  2. 局部马尔可夫性:给定某变量的邻接变量,则该变量与其它变量条件独立。
  3. 成对马尔可夫性:给定所有其他变量,两个非邻接变量条件独立。

        ​​​​​​​        

14.3条件随机场

        条件随机场(Conditional Random Field ,简称 CRF) 是一种判别式无向图模型。条件随机场试图对多个变量在给定观测值后 的条件概率进行建模.

其中最常用到的是 "链式条件随机场":
                                

14.4学习与推断

14.4.1变量消去

        变量消去法是最直观的精确推断算法,以下的有向图模型为例来介绍其工作流程:

        变量捎去法把多个变量的积的求和问题,转化为对部分变量交替进行求积与求和的问题.变量消去法有一个明显的缺点:若需计算多个边际分布,重复使用变量消去法将会造成大量的冗余计算.
下面是关于变量消去法的实验代码及分析于结果:
import numpy as np# 定义增广矩阵
A = np.array([[2, -1, 1, 4],[1,  2,  1, 5],[3, -2,  2, 8]], dtype=float)def elimination(A):n = len(A)for i in range(n):# 主元归一化A[i] = A[i] / A[i, i]# 消去当前列的其他元素for j in range(i + 1, n):factor = A[j, i]A[j] = A[j] - factor * A[i]return Adef back_substitution(A):n = len(A)x = np.zeros(n)for i in range(n-1, -1, -1):x[i] = A[i, -1]for j in range(i+1, n):x[i] -= A[i, j] * x[j]return x# 执行变量消去法
A_eliminated = elimination(A.copy())
solution = back_substitution(A_eliminated)print("经过消去后的增广矩阵:")
print(A_eliminated)
print("\n方程组的解:")
print(solution)

分析:

  1. 增广矩阵处理:代码首先定义了一个增广矩阵 A,其最后一列为常数项。elimination 函数对增广矩阵进行消元操作,逐步将其转化为上三角形式。
  2. 消元过程:在 elimination 函数中,首先对每一行进行主元归一化,然后对每一列的其他元素进行消去,从而简化矩阵。
  3. 回代过程back_substitution 函数从上三角矩阵的最后一行开始,逐步计算未知数的值,得到方程组的解。

结果:

14.4.2信念传播

        信念传播算法将变量消去法中的求和操作看作一个消息传递过程,具体来说,变量消去法通过求和操作:

                        m_{i j}\left(x_{j}\right)=\sum_{x_{i}} \psi\left(x_{i}, x_{j}\right) \prod_{k \in n(i) \backslash j} m_{k i}\left(x_{i}\right)

下面是关于信念传播算法的实验代码及分析于结果:

        下面实验是关于一个简单的二值马尔可夫随机场(MRF)模型上的信念传播。将使用一个4x4的网格模型,其中每个节点代表一个二值变量。

import numpy as npdef initialize_messages(n):return np.zeros((n, n, 2, 2))  # Message array for 4 neighbors: Up, Down, Left, Rightdef belief_propagation(grid, max_iters=10):n = len(grid)messages = initialize_messages(n)# Helper functionsdef compute_message(node, direction, messages):# Compute the message from the node to the neighbor in the specified directionpassdef update_beliefs(grid, messages):# Update the belief of each node based on incoming messagesbeliefs = np.zeros((n, n, 2))for i in range(n):for j in range(n):# Update beliefs based on messages from neighborsbeliefs[i, j] = grid[i, j]  # Placeholder for actual belief calculationreturn beliefsfor _ in range(max_iters):for i in range(n):for j in range(n):# Compute messages in all directionsfor direction in ['Up', 'Down', 'Left', 'Right']:messages[i, j] = compute_message((i, j), direction, messages)# Update beliefsbeliefs = update_beliefs(grid, messages)return beliefs# Define a grid with initial values (prior probabilities)
grid = np.random.rand(4, 4, 2)  # Random initial values for simplicity# Normalize grid values to sum to 1
grid /= grid.sum(axis=2, keepdims=True)# Run belief propagation
beliefs = belief_propagation(grid)print("最终的信念分布:")
print(beliefs)
分析:
  1. 初始化消息和信念initialize_messages 函数初始化了用于消息传递的数组,belief_propagation 函数则开始信念传播过程。初始信念是随机的,并且需要归一化以确保每个节点的信念总和为1。

  2. 消息计算compute_message 是一个占位函数,实际实现会计算从一个节点向邻居节点传递的消息。在实际应用中,这个函数需要根据具体的模型和边缘条件进行实现。

  3. 信念更新update_beliefs 函数根据传入的消息更新每个节点的信念。在这个示例中,信念更新的实现被简化为直接使用初始值。实际中,这个步骤需要结合消息传递结果进行信念计算。

  4. 迭代过程:信念传播算法通过迭代来更新消息和信念。在每次迭代中,节点之间的消息会被计算并更新,最终收敛到一个稳定的信念分布。

结果:

14.5近似推断

14.5.1 MCMC采样

        概率图模型中最常用的采样技术是马尔可夫链蒙特卡罗(简称 MCMC) 方法.给定连续变量x\epsilon X 的概率密度函数 p(x) ,x在区间A中的概率可计算为:

                                                                P(A)=\int_{A} p(x) d x

下面是MCMC算法流程:

下面是关于MCMC算法的实验代码及分析于结果:

import numpy as np
import matplotlib.pyplot as plt# 目标分布(标准正态分布)
def target_distribution(x):return np.exp(-0.5 * x**2) / np.sqrt(2 * np.pi)# 提议分布(正态分布)
def proposal_distribution(x, sigma):return np.random.normal(x, sigma)# Metropolis-Hastings 算法
def metropolis_hastings(num_samples, proposal_std):samples = np.zeros(num_samples)x = 0  # 初始值for i in range(num_samples):x_new = proposal_distribution(x, proposal_std)acceptance_ratio = target_distribution(x_new) / target_distribution(x)if np.random.rand() < acceptance_ratio:x = x_newsamples[i] = xreturn samples# 参数设置
num_samples = 10000
proposal_std = 1.0# 生成样本
samples = metropolis_hastings(num_samples, proposal_std)# 绘制结果
plt.figure(figsize=(12, 6))# 绘制样本直方图
plt.subplot(1, 2, 1)
plt.hist(samples, bins=30, density=True, alpha=0.6, color='g')
plt.title('样本直方图')# 绘制目标分布
x = np.linspace(-4, 4, 100)
plt.subplot(1, 2, 2)
plt.plot(x, target_distribution(x), 'r', lw=2)
plt.title('目标分布')plt.show()

分析:

  1. 目标分布target_distribution 函数定义了我们想要采样的目标分布,这里选择的是标准正态分布。

  2. 提议分布proposal_distribution 函数定义了提议分布,这里使用的是以当前样本为均值的正态分布。

  3. Metropolis-Hastings 算法metropolis_hastings 函数实现了 Metropolis-Hastings 算法。算法首先生成一个提议样本,然后根据接受概率决定是否接受该样本。最终生成的样本数组用于估计目标分布。

  4. 结果可视化

    • 样本直方图:左侧图显示了生成的样本的直方图。应该接近目标分布的形状。
    • 目标分布:右侧图显示了目标分布的理论曲线。通过对比样本直方图和目标分布,可以验证 MCMC 算法的效果。

结果:

14.5.2 变分推断

        变分推断通过使用己知简单分布来逼近需推断的复杂分布,并通过限制近似分布的类型,从而得到 种局部最优、但具有确定解的近似后验分布.概率图模型一种简洁的表示方法一一盘式记法:

                        

14.6 话题模型

        话题模型(topic model) 是一族生成式有向图模型,主要用于处理离散型的数据(如文本集合) ,在信息检索、自然语言处理等领域有广泛应用.隐狄利克雷分配模型(简称 LDA) 是话题模型的典型代表.在话题模型中,有以下几个基本概念:词(word)、文档(document)、话题(topic)。 

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

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

相关文章

Python入门级[ 基础语法 函数... ] 笔记 例题较多

本文是刚学习Python的笔记&#xff0c;当时使用的编辑器是交互式编程&#xff0c;所以很多代码可能在你们的编译器上面不能运行&#xff0c;我用快引用引起来了&#xff0c;还需要大家自己动手试一试。 内容涉及的比较简单&#xff0c;主要还是Python的语法部分&#xff1a;三…

短链接系统设计方案

背景 需要设计一个短链接系统&#xff0c;主要功能主要有如下几点&#xff1a; ToB&#xff1a; 输入一个长链接&#xff0c;转换成短链接。这个短链接有时效性&#xff0c;可以设定指定过期时间。这个系统的每天会生成千万级别的短链接。数据具备可分析功能。 ToC&#xf…

借助Vercel 十分钟搭建属于自己的AI应用站点

轻松依托 Vercel,快速构建 Nexior AI 平台 Nexior 是一个令人惊叹的开源项目&#xff0c;托管于 GitHub。通过它&#xff0c;您能够一键便捷地部署专属的 AI 应用站点&#xff0c;包括 AI 问答、Midjourney 绘画、知识库问答、艺术二维码等&#xff0c;完全不需要自己去开发 A…

springBoot+ druid配置多数据源

springBoot druid配置多数据源 1.在yml加&#xff1a; spring:#1.JDBC数据源datasource:druid:first:username: PYpassword: ral2024url: jdbc:mysql://localhost:3306/mysql?serverTimezoneUTC&characterEncodingutf8&useUnicodetrue&useSSLfalsedriver-class-n…

前端进行分页Vue3+Setup写法

当后端不方便提供数据分页查询接口时&#xff0c;就需要前端来自己分割进行分页操作 在有可能的情况下还是建议用分页查询接口&#xff0c;减少网络数据传输 首先el-table绑定数组 分页组件&#xff0c;变量自己定义防止报错 <el-paginationlayout"->, total, siz…

HTML中的<fieldset>标签元素框的使用

HTML 提供的 <fieldset> 标签用于在表单中分组相关元素。 <fieldset> 标签会在相关元素周围绘制一个框。 <legend> 标签为 fieldset 元素定义标题。 语法如下&#xff1a; <fieldset><legend>标题</legend><!-- 元素内容... -->…

qt-17不规则窗体

不规则窗体 知识点shape.hshape.cppmain.cpp运行图 知识点 感觉这个就是在图片背景 贴了白色 shape.h #ifndef SHAPE_H #define SHAPE_H#include <QWidget>class Shape : public QWidget {Q_OBJECTpublic:Shape(QWidget *parent nullptr);~Shape(); protected:void m…

最新图像修复论文汇总(2024年以来)(三)

汇总了自2024年以来新提出的高质量图像修复工作&#xff0c;包含扩散模型、transformer、mamba、sam等最前沿的技术&#xff0c;其中一些是ICLR、ICML、CVPR、ECCV、ACM MM 2024年的新作。 这里是第三部分&#xff0c;还有两部分请参阅。 最新图像修复论文汇总&#xff08;20…

【Python快速入门和实践013】Python常用脚本-目标检测之按照类别数量划分数据集

一、功能介绍 这段代码实现了从给定的图像和标签文件夹中分割数据集为训练集、验证集和测试集的功能。以下是代码功能的总结&#xff1a; 创建目标文件夹结构&#xff1a; 在指定的根目录&#xff08;dataset_root&#xff09;下创建images和labels两个文件夹。在这两个文件夹下…

瑞友科技项目经理认证负责人杨文娟受邀为第四届中国项目经理大会演讲嘉宾︱PMO评论

全国项目经理专业人士年度盛会 北京瑞友科技股份有限公司项目经理认证负责人杨文娟女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“瑞友科技项目经理人才培养体系落地实践”。大会将于10月26-27日在北京举…

【C++】C++11新增特性

目录 C11简介&#xff1a; 1、统一的列表初始化&#xff1a; std::initializer_list 2、自动类型推导&#xff1a; auto&#xff1a; decltype&#xff1a; 3、final 和 override final&#xff1a; override&#xff1a; 4、默认成员函数控制&#xff1a; 显示缺省…

第132天:内网安全-横向移动Exchange服务有账户CVE漏洞无账户口令爆破

域控环境0day.org 通过网盘分享的文件&#xff1a;131-0day.org内网域环境镜像文件 链接: https://pan.baidu.com/s/1rf_gHVJSNG8PEsiSr7DFSw?pwdr5jc 提取码: r5jc 给win7设置一张nat网卡&#xff0c;其他各个主机都设置为vm2 案例一&#xff1a; 域横向移动-内网服务-Exchan…

如何快速将地址解析为经纬度坐标?

GIS数据转换器的"地址转坐标"功能&#xff0c;可以帮助用户将地址文本快速转换为对应的经纬度坐标&#xff0c;广泛应用于地图定位、数据分析、GIS项目、在线导航、城市规划、紧急服务以及科学研究等多个领域&#xff0c;极大地提高了地理信息处理的效率和准确性。下…

【题解】—— LeetCode一周小结32

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结31 5.不含连续1的非负整数 题目链接&#xff1a;600. 不含连续…

C++的序列容器——数组

前言&#xff1a; 这篇文章我们就开始新的章节&#xff0c;我们之前说的C/C的缺陷那部分内容就结束了。在开始新的章之前我希望大家可以先对着题目思考一下&#xff0c;C的容器是什么&#xff1f;有什么作用&#xff1f;下面让我们开始新的内容&#xff1a; 目录 前言&#x…

Golang | Leetcode Golang题解之第343题整数拆分

题目&#xff1a; 题解&#xff1a; func integerBreak(n int) int {if n < 3 {return n - 1}quotient : n / 3remainder : n % 3if remainder 0 {return int(math.Pow(3, float64(quotient)))} else if remainder 1 {return int(math.Pow(3, float64(quotient - 1))) * …

简简单单用用perf

实践前提&#xff1a;正确安装 perf 和 FlameGrap。若没安装&#xff0c;心领神会亦可。 1 示例程序 #define m_loop() ({ for(int i0; i < 1000000; i); })void fb(void) {m_loop(); }void fj(void) {fb(); }void fy(void) {m_loop(); }void loop(void) {for (;;) {fy();…

WPF动画

补间动画&#xff1a;动画本质就是在一个时间段内对象尺寸、位移、旋转角度、缩放、颜色、透明度等属性值的连续变化。也包括图形变形的属性。时间、变化的对象、变化的值 工业应用场景&#xff1a;蚂蚁线、旋转、高度变化、指针偏移、小车 WPF动画与分类 特定对象处理动画过…

xss.function靶场(easy)

文章目录 第一关Ma Spaghet!第二关Jefff第三关Ugandan Knuckles第四关Ricardo Milos第五关Ah Thats Hawt第六关Ligma第七关Mafia第八关Ok, Boomer 网址&#xff1a;https://xss.pwnfunction.com/ 第一关Ma Spaghet! 源码 <!-- Challenge --> <h2 id"spaghet&qu…

【精选】基于Python大型购物商城系统(京东购物商城,淘宝购物商城,拼多多购物商城爬虫系统)

目录&#xff1a; 目录&#xff1a; 系统介绍&#xff1a; 系统开发技术 Python语言 Django框架简介 MySQL数据库技术 B/S架构 系统设计 系统总体设计 系统详细界面实现&#xff1a; 系统测试 测试目的 测试用例 本章小结 参考代码&#xff1a; 为什么选择我&…