人工智能:一种现代的方法 第十四章 概率推理

news2024/9/29 9:38:06

文章目录

  • 人工智能:一种现代的方法 第十四章 概率推理
    • 本章前言
    • 14.1 不确定性问题域中的知识表示
      • 14.1.1 联合概率分布
      • 14.1.2贝叶斯网络
    • 14.2 贝叶斯网络的语义
      • 14.2.1表示联合概率分布
      • 14.2.2 紧致性
      • 14.2.3 节点排序
      • 14.2.4 贝叶斯网络中的条件独立关系
      • 14.3 条件分布的有效表示
    • 14.4 贝叶斯网络的精确推理
      • 14.4.1通过枚举进行推理
      • 14.4.2变量消元算法
      • 14.4.5精确推理的复杂度
    • 14.5 贝叶斯网络中的近似推理
      • 14.5.1直接采样算法
      • 14.5.2 拒绝采样算法
      • 15.5.3 似然加权
        • 14.5.4 基于马尔可夫链的推理

人工智能:一种现代的方法 第十四章 概率推理

本章前言

上一部分我们讲了确定性问题,确定性问题域是在知识表示中,使用精确的形式表达知识,如逻辑规则、数学公式等。在推理过程中,基于逻辑推理或数学推理规则进行推断,例如演绎推理或归纳推理。这种问题域的特点是结果是确定的,不涉及概率或不确定性,因此可以使用形式化的推理方法来解决问题。而对于不确定问题,是没办法的。而本章讲述的就是不确定性问题

14.1 不确定性问题域中的知识表示

14.1.1 联合概率分布

在这里插入图片描述

14.1.2贝叶斯网络

贝叶斯网络是一个有向无环图每个节点对应一个随机变量,可以是离散变量也可以是连续变量一组有向边连接节点对每个节点Xi有一个条件分布P(Xi|Parents(Xi))
在这里插入图片描述

贝叶斯网络表示联合概率分布表示
类型图形模型概率表示
表示方式有向无环图条件概率表(CPT)
结构节点表示变量,边表示依赖关系无显式图结构
推理和推断使用图结构和条件概率表进行推理和推断使用乘积规则和边缘化规则进行计算和推断
用途表示变量之间的依赖关系和概率关系表示多个变量之间的概率关系

14.2 贝叶斯网络的语义

14.2.1表示联合概率分布

P(x₁, …, xₙ) = Π P(xᵢ | parents(Xᵢ))

整个贝叶斯网络的联合概率分布可以通过将每个变量的条件概率分布 P(xᵢ | parents(Xᵢ)) 进行乘积来得到。每个条件概率分布表示了变量 xᵢ 在给定其父节点的取值情况下的概率分布。通过乘积规则,我们可以计算出整个网络中所有变量同时取不同取值的联合概率分布。

14.2.2 紧致性

  • 局部结构化(locally structured, 也称稀疏,sparse):每个子部件只与有限数量的的其他部件之间有直接相互作用

  • 例如:贝叶斯网络中每个节点有5个父节点,当所有变量为布尔变量,总节点数n=30时,贝叶斯网络只需要960个参数,完全联合分布需要超过10亿个参数

  • 技巧:过于微弱的依赖关系,不增加边,尽管会损失一点精度

14.2.3 节点排序

请添加图片描述

节点排序的选择可以影响贝叶斯网络的推理效率和计算复杂度,因此需要根据具体情况选择合适的排序方法。

14.2.4 贝叶斯网络中的条件独立关系

三种常见的连接方式

请添加图片描述

  • 顺连(Serial Connection):顺连是指一个节点依赖于另一个节点,并且它们之间没有其他节点介入。在贝叶斯网络中,顺连表示一个变量直接依赖于另一个变量,没有其他中间节点的干预。顺连通常用于表示因果关系或直接影响关系
  • 汇连(Cascade Connection):汇连是指一个节点同时依赖于多个节点,而这些节点之间没有依赖关系。在贝叶斯网络中,汇连表示一个变量依赖于多个其他变量,且这些变量之间没有直接的依赖关系。汇连通常用于表示多个因素对一个结果的影响。
  • 分连(Common Cause Connection):分连是指多个节点同时依赖于一个公共的节点。在贝叶斯网络中,分连表示多个变量共同依赖于一个变量,该变量通常被称为共同父节点。分连通常用于表示多个变量之间的共同因素或共同影响。

贝叶斯网络中的条件独立关系 一
给定父节点,结点条件独立于其他祖先结点
请添加图片描述

贝叶斯网络中的条件独立关系 二
给定节点的马尔科夫覆盖,即父节点、子节点及子节点的父节点,节点条件独立于其他节点
请添加图片描述
贝叶斯网络中的条件独立关系 三

在这里插入图片描述

14.3 条件分布的有效表示

条件分布的有效表示方法取决于具体的问题和概率模型。以下是几种常见的条件分布表示方法

条件概率表

CPT 是一种常见的表示条件分布的方法,特别适用于离散型变量。CPT 是一个表格,其中每一行表示给定父节点取值情况下,该节点的条件概率分布。

确定性节点
父节点:Canadian、US、Mexican 子节点:NorthAmerican 析取关系
父节点:销售同产品商家子节点:喜欢还价的买家 最小关系

噪声或节点
父节点:Cold(感冒)、Flu(流感)、Malaria(疟疾)子节点:Fever(发烧) Noisy-OR关系

请添加图片描述
包含连续变量的贝叶斯网络
在这里插入图片描述

  • 离散化,损失精度
  • 混合贝叶斯网络:同时包含连续和离散变量

离散父节点的连续分布:线性高斯分布
在这里插入图片描述

14.4 贝叶斯网络的精确推理

贝叶斯网络中存在三种变量 :证据变量、查询变量、隐藏变量

14.4.1通过枚举进行推理

def ENUMERATION_ASK(X, e, bn):
  
    Q = {}  # 初始化查询变量X的分布
    for xi in X:
        Q[xi] = ENUMERATE_ALL(bn.VARS, extend(e, X=xi))  # 对每个X的取值,使用ENUMERATE_ALL计算分布
    return NORMALIZE(Q)  # 对分布进行归一化

def ENUMERATE_ALL(vars, e):
  
    if not vars:  # 如果变量集合为空,返回概率1.0
        return 1.0
    Y = vars[0]  # 获取第一个变量Y
    if Y in e:  # 如果Y在观测到的变量值e中
        return P(Y, e[Y], parents(Y)) * ENUMERATE_ALL(vars[1:], e)  # 返回P(Y|parents(Y)) * 递归计算剩余变量的概率
    else:
        total = 0.0
        for y in domain(Y):  # 遍历Y的所有取值
            ey = extend(e, Y=y)  # 将观测到的变量值e扩展为包含Y=y的新观测值
            total += P(Y, y, parents(Y)) * ENUMERATE_ALL(vars[1:], ey)  # 累加P(Y=y|parents(Y)) * 递归计算剩余变量的概率
        return total

14.4.2变量消元算法

逐点相乘
请添加图片描述

消元过程

请添加图片描述

def ELIMINATION_ASK(X, e, bn):
   
    factors = []
    for var in ORDER(bn.VARS):  # 按顺序处理变量
        factors.append(MAKE_FACTOR(var, e))  # 创建因子
        if var in X:  # 如果变量是查询变量
            factors = SUM_OUT(var, factors)  # 求和消除变量
    return NORMALIZE(POINTWISE_PRODUCT(factors))  # 归一化因子的点积

14.4.5精确推理的复杂度

精确推理的复杂度与贝叶斯网络的结构相关
单连通(多形树,polytree):线性
多连通:比NP完全还难

14.5 贝叶斯网络中的近似推理

14.5.1直接采样算法

直接采样适用于没有证据变量的情况下,只需要对贝叶斯网络中一部分随机变量的边缘分布进行采样,可以用直接采样对全部随机变量进行采样。

def PRIOR_SAMPLE(bn):
    x = {}
    for node in bn.nodes():
        x[node] = sample_from_distribution(bn, node, x)
    return x

def sample_from_distribution(bn, node, x):
    parents = bn.parents(node)
    parent_values = [x[parent] for parent in parents]
    probabilities = bn.get_probability(node, parent_values)
    return random.choices(bn.get_domain(node), probabilities)[0]

14.5.2 拒绝采样算法

import random

def REJECTION_SAMPLING(X, e, bn, N):
    counts = {value: 0 for value in bn.get_domain(X)}  # 初始化计数器
    
    for _ in range(N):
        x = {}  # 存储样本的字典
        for node in bn.nodes():
            x[node] = sample_from_distribution(bn, node, x)  # 从概率分布中采样得到样本
        
        if is_consistent(x, e):  # 判断样本是否与观测值一致
            counts[x[X]] += 1  # 更新相应取值的计数器
    
    total = sum(counts.values())  # 计算计数器的总和
    return {value: count / total for value, count in counts.items()}  # 归一化计数器得到概率分布


def sample_from_distribution(bn, node, x):
    parents = bn.parents(node)  # 获取节点的父节点
    parent_values = [x[parent] for parent in parents]  # 获取父节点的取值
    probabilities = bn.get_probability(node, parent_values)  # 获取节点的条件概率分布
    return random.choices(bn.get_domain(node), probabilities)[0]  # 根据概率分布进行采样

直接采样适用于没有证据变量的情况下,当存在证据变量时直接采样法就失效了。如何解决呢最直接的方法是拒绝采样,还是利用直接采样得到所有变量的取值。如果这个样本在观测变量上的采样值与实际观测值相同,则接受,否则拒绝,重新采样。这种方法的缺点是采样效率可能会非常低,随着观测变量个数的增加、每个变量状态数目的上升,拒绝采样法的采样效率急剧下降,实际中基本不可用。

15.5.3 似然加权

import random

def likelihood_weighting(X, e, bn, N):
    # X: 查询变量
    # e: 观察到的变量值
    # bn: 贝叶斯网络
    # N: 生成的样本总数

    # 初始化权重计数向量
    W = [0] * len(X)

    for j in range(N):
        x, w = weighted_sample(bn, e)
        # 根据查询变量的值累积权重
        W[X.index(x)] += w

    return normalize(W)

def weighted_sample(bn, e):
    # bn: 贝叶斯网络
    # e: 观察到的变量值

    w = 1
    x = {}

    for Xi in bn.variables:
        if Xi in e:
            # 如果变量是观察到的变量,则根据观察到的值更新权重
            w *= bn.probability(Xi, e[Xi])
        else:
            # 对于非观察到的变量,根据给定其已采样的父节点值的条件分布进行采样
            x[Xi] = sample_from_conditional(Xi, e, bn)
    
    return x, w

def sample_from_conditional(Xi, e, bn):
    parents = bn.parents(Xi)
    parent_values = [e[parent] for parent in parents]
    conditional = bn.conditional_distribution(Xi, parent_values)
    # 从条件分布中随机采样一个值
    return random.choices(conditional.values, weights=conditional.probabilities)[0]

在实际应用中,可以参考重要性采样的思想,不再对观测变量进行采样,只对非观测变量采样,但是最终得到的样本需要赋一个重要性权值

14.5.4 基于马尔可夫链的推理
def GIBBS_ASK(X, e, bn, N):
    counts = {value: 0 for value in bn.get_domain(X)}
    x = e.copy()  # 初始化x为观测值e的副本
    
    Z = bn.get_non_evidence_variables()  # 获取非证据变量Z
    
    for _ in range(N):
        for Z_var in Z:
            x[Z_var] = sample_from_distribution(bn, Z_var, x)  # 从条件概率分布中采样Z_var的值
        
        counts[x[X]] += 1  # 更新相应取值的计数器
    
    return NORMALIZE(counts)

吉布斯抽样(Gibbs sampling)是一种马尔可夫链蒙特卡罗(MCMC)方法,用于从多变量概率分布中抽取样本。上述步骤描述了基本的吉布斯抽样算法:

  • 初始化:随机选择第一个样本 Θ₁ = (θ₁₁, θ₂₁)。
  • 根据当前的 θ₂ᵢ,从条件概率分布 p(θ₁|θ₂=θ₂ᵢ, x₁,…,xₙ) 中抽取 θ₁ᵢ₊₁。
  • 根据当前的 θ₁ᵢ₊₁,从条件概率分布 p(θ₂|θ₁=θ₁ᵢ₊₁, x₁,…,xₙ) 中抽取 θ₂ᵢ₊₁。得到新的样本 Θᵢ₊₁。

重复步骤 2 和 3,直到满足抽样需求,得到样本序列 {Θ₁, …, Θₙ}。
在吉布斯抽样过程中,每个样本 Θᵢ 受到前一个样本 Θᵢ₋₁ 的影响。这意味着通过吉布斯抽样得到的样本序列 {Θ₁, …, Θₙ} 是一条马尔可夫链。这种方法通常用于无法直接从联合分布中抽取样本的情况下,通过条件分布进行抽样。

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

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

相关文章

痤疮分级实验笔记-ResNet

组织数据集 方式1:根据txt文件分类的数据集组织形式(放弃) 你可以使用Python来读取txt文件中的训练集图片信息,并将这些图片从原始文件夹复制到目标文件夹中。 当程序无法找到标签对应的图片或者目标文件夹中已经存在同名图片时…

IT支持团队的绩效指标和最佳实践

一名员工在远程时因笔记本问题寻求IT支持,尽管他们多次尝试排除故障,但由于缺乏专业知识,最终还是无法访问工作所需的应用程序。这时,他们需要一名专业的 IT 技术人员来指导他们,但他们只能等待有人注意到并回应他们的…

BMS基础知识:BMS基本功能,铅酸和锂电池工作原理,电池系统的重要概念!

笔者有话说: 作为BMS从业者来讲,目前接触的BMS系统并不是很高大尚,但基础功能都是有的。 关于BMS的基本功能,工作原理,运行逻辑等,在此做一个梳理,讲一些最基础的扫盲知识,可以作为…

安全牛《数据分类分级自动化建设指南》发布|美创入选代表厂商,分享智能化探索

近日,安全牛发布《数据分类分级自动化建设指南》研究报告,对数据分类分级的主要技术、实施要点、选型指导、发展趋势等展开深入探讨,为各行业数据分类分级自动化工作落地提供帮助与指引。 美创科技被列为代表推荐厂商,落地案例—农…

Flutter:引领移动开发新潮流,跨平台应用程序的终极解决方案

文章目录 一、介绍二、环境搭建三、基础组件四、生命周期管理五、路由控制六、网络请求七、数据存储八、调试与优化《从零基础到精通Flutter开发》特色内容简介作者简介目录获取方式 一、介绍 Flutter是由Google开发的一款开源移动应用开发框架,它可以帮助开发者快…

PS给图片增加一个白色边框。

问题描述:PS如何给图片增加一个白色边框? 解决办法: 第一步:使用shiftAltA快捷键,在图片四周拉出一个灰白色的边框。如下图所示: 第二步,使用快捷键Ctrlshiftn新建一个图层。 并把新建的图层…

C语言——利用函数递归,编写函数不允许创建临时变量,求字符串长度

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int my_strlen(char* str) {if(*str ! \0)return 1my_strlen(str1);elsereturn 0; }int main() {char arr[] "hello";int len my_strlen(arr); //arr是数组&#xff0c;数组传参&#xff0c;传过去的是第…

推荐一款png图片打包plist工具pngPackerGUI_V2.0

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…

2.4G射频收发芯片 XL2407P芯片介绍,集成九齐单片机

XL2407P芯片是工作在2.400~2.483GHz世界通用ISM频段,集成微控制器的的SOC无线收发芯片。该芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持一-对多组网和带ACK的通信模式。发射输出功率、工作频道以及通信数据率均可配置。 芯片内含以EPROM作为内…

HTML5+ API 爬坑记录

背景: 有个比较早些使用5开发的项目, 最近两天反馈了一些问题, 解决过程在此记录; 坑1: plus.gallery.pick 选择图片没有进入回调 HTML5 API Reference 在 联想小新 平板电脑上选择相册图片进行上传时, 打开相册瞬间 应用会自动重启, 相册倒是有打开, 不过应用重启了, 导…

Ajax技

Ajax的特点 异步提交&#xff1a;Ajax采用异步通信方式&#xff0c;能够在页面无需重新加载的情况下向服务器发送请求并接收响应数据&#xff0c;提升了用户体验。无需插件&#xff1a;Ajax是基于标准浏览器的Javascript和XMLHttpRequest对象实现的&#xff0c;无需安装插件或…

HBase之Slow log

目录 Slow log记录条件日志示例配置内存存储配置表存储 Slow log hbase会记录慢查询日志&#xff0c;关键字包括responseTooSlow、responseTooLarge、operationTooSlow、and operationTooLarge。 记录条件 响应时间和响应的数据大小可由以下参数配置 hbase.ipc.warn.respon…

大型养殖场需要哪些污水处理设备

大型养殖场是一个涉及环境保护和可持续发展的关键行业&#xff0c;对于处理养殖场产生的污水有着明确的要求和标准。为了确保污水得到有效处理和处理效果达到国家排放标准&#xff0c;大型养殖场需要配备一系列污水处理设备。以下是几种常见的污水处理设备&#xff1a; 1. 水解…

安卓手机便签APP用哪个,手机上好用的便签APP是什么

在日常生活及工作方面&#xff0c;总是有许多做不完的事情需要大家来处理&#xff0c;当多项任务堆叠交叉在一起时&#xff0c;很容易漏掉一些项目&#xff0c;这时候大家会借助经常携带的手机来记录容易忘记的事情&#xff0c;如手机上的闹钟、定时提醒软件都可以用来记录待办…

三、Keil安装芯片包、下载固件库、建立STM32工程模板

目录 一、首先在Keil软件上安装好芯片包 二、下载官方固件库 三、建立基于固件库的Keil5工程模板 一、首先在Keil软件上安装好芯片包 STM32有很多系列的芯片&#xff0c;我们平常用的最多的是STM32F1系列的&#xff0c;因此安装F1系列的芯片包在我们初学时&#xff0c;只按照…

分页符 分页

【插入】---【分页符】 目录和一级标题得新起一页

java--static的注意事项

1.使用类方法、实例方法时的几点注意事项 ①类方法中可以直接访问类的成员&#xff0c;不可以直接访问实例成员。 ②实例方法中既可以直接访问类成员&#xff0c;也可以直接访问实例成员。 ③实例方法中可以出现this关键字&#xff0c;类方法中不可以出现this关键字的。

Hook技术(钩子技术)

HOOK&#xff08;钩子技术&#xff09; 这里的hook我理解的意思就是通过拦截指令&#xff0c;将指令换成自己想要的指令&#xff0c;从而做道绕过原本的程序指令&#xff0c;要修改这个指令&#xff0c;要用汇编技术&#xff0c;从二进制入手。 扩展&#xff1a; 木马病毒之…

基于单片机的光伏发电并网系统设计(论文+源码)

1.系统设计 片作为主控制器。由于太阳能板本身的能量输出受到负载影响&#xff0c;因此需要在太阳能板后面加入一级DC/DC电路&#xff0c;来实现最大功率跟踪&#xff0c;以提高整个系统的效率。接着&#xff0c;由于光伏逆变器需要产生220V的交流电给居民使用&#xff0c;因此…