机器学习周志华学习笔记-第14章<概率图模型>

机器学习周志华学习笔记-第14章<概率图模型>

卷王,请看目录

  • 14概率图模型
    • 14.1 隐马尔可夫模型(HMM)
        • 14.1.1 HMM评估问题
        • 14.1.2 HMM解码问题
        • 14.1.3 HMM学习问题
    • 14.2 马尔可夫随机场(MRF)
    • 14.3 条件随机场(CRF)
    • 14.4 学习与推断
        • 14.4.1 变量消去
        • 14.4.2 信念传播
    • 14.5 近似推断
        • 14.5.1 马尔科夫链蒙特卡罗MCMC采样
        • 14.5.2 变分推断
    • 14.6 LDA话题模型

14概率图模型

机器学习的核心价值观,可以通俗地理解为:根据一些已观察到的证据来推断未知。其中基于概率的模型将学习任务归结为计算变量的概率分布,正如之前已经提到的:生成式模型先对联合分布进行建模,从而再来求解后验概率,例如:贝叶斯分类器先对联合分布进行最大似然估计,从而便可以计算类条件概率;判别式模型则是直接对条件分布进行建模。

概率图模型(probabilistic graphical model)是一类用图结构来表达各属性之间相关关系的概率模型,一般而言:图中的一个结点表示一个或一组随机变量,结点之间的边则表示变量间的相关关系,从而形成了一张“变量关系图”。若使用有向的边来表达变量之间的依赖关系,这样的有向关系图称为贝叶斯网(Bayesian nerwork)或有向图模型;若使用无向边则称为马尔可夫网(Markov network)或无向图模型

14.1 隐马尔可夫模型(HMM)

隐马尔可夫模型(Hidden Markov Model,简称HMM)是结构最简单的一种贝叶斯网,在语音识别与自然语言处理领域上有着广泛的应用。HMM中的变量分为两组:状态变量与观测变量,其中状态变量一般是未知的,因此又称为“隐变量”,观测变量则是已知的输出值。在隐马尔可夫模型中,变量之间的依赖关系遵循如下两个规则:

  1. 观测变量的取值仅依赖于状态变量
  2. 下一个状态的取值仅依赖于当前状态,通俗来讲:现在决定未来,未来与过去无关,这就是著名的马尔可夫性。
    在这里插入图片描述
    基于上述变量之间的依赖关系,我们很容易写出隐马尔可夫模型中所有变量的联合概率分布:
    在这里插入图片描述
    易知:欲确定一个HMM模型需要以下三组参数:
    在这里插入图片描述
    当确定了一个HMM模型的三个参数后,便按照下面的规则来生成观测值序列:
    在这里插入图片描述
    在实际应用中,HMM模型的发力点主要体现在下述三个问题上:
    在这里插入图片描述
14.1.1 HMM评估问题

HMM评估问题指的是:给定了模型的三个参数与观测值序列,求该观测值序列出现的概率。例如:对于赌场问题,便可以依据骰子掷出的结果序列来计算该结果序列出现的可能性,若小概率的事件发生了则可认为赌场的骰子有作弊的可能。解决该问题使用的是前向算法,即步步为营,自底向上的方式逐步增加序列的长度,直到获得目标概率值。在前向算法中,定义了一个前向变量,即给定观察值序列且t时刻的状态为 S i S_i Si的概率:
在这里插入图片描述
基于前向变量,很容易得到该问题的递推关系及终止条件:
在这里插入图片描述
因此可使用动态规划法,从最小的子问题开始,通过填表格的形式一步一步计算出目标结果。

14.1.2 HMM解码问题

HMM解码问题指的是:给定了模型的三个参数与观测值序列,求可能性最大的状态序列。例如:在语音识别问题中,人说话形成的数字信号对应着观测值序列,对应的具体文字则是状态序列,从数字信号转化为文字正是对应着根据观测值序列推断最有可能的状态值序列。解决该问题使用的是Viterbi算法,与前向算法十分类似地,Viterbi算法定义了一个Viterbi变量,也是采用动态规划的方法,自底向上逐步求解。
在这里插入图片描述

14.1.3 HMM学习问题

HMM学习问题指的是:给定观测值序列,如何调整模型的参数使得该序列出现的概率最大。这便转化成了机器学习问题,即从给定的观测值序列中学习出一个HMM模型,该问题正是EM算法的经典案例之一。其思想也十分简单:对于给定的观测值序列,如果我们能够按照该序列潜在的规律来调整模型的三个参数,则可以使得该序列出现的可能性最大。假设状态值序列也已知,则很容易计算出与该序列最契合的模型参数:
在这里插入图片描述
但一般状态值序列都是不可观测的,且即使给定观测值序列与模型参数,状态序列仍然遭遇组合爆炸。因此上面这种简单的统计方法就行不通了,若将状态值序列看作为隐变量,这时便可以考虑使用EM算法来对该问题进行求解:

  1. 首先对HMM模型的三个参数进行随机初始化;
  2. 根据模型的参数与观测值序列,计算t时刻状态为i且t+1时刻状态为j的概率以及t时刻状态为i的概率。
    在这里插入图片描述
  3. 接着便可以对模型的三个参数进行重新估计:
    在这里插入图片描述
  4. 重复步骤2-3,直至三个参数值收敛,便得到了最终的HMM模型。

14.2 马尔可夫随机场(MRF)

马尔可夫随机场(Markov Random Field)是一种典型的马尔可夫网,即使用无向边来表达变量间的依赖关系。在马尔可夫随机场中,对于关系图中的一个子集,若任意两结点间都有边连接,则称该子集为一个团;若再加一个结点便不能形成团,则称该子集为极大团。

MRF使用势函数来定义多个变量的概率分布函数,其中每个(极大)团对应一个势函数,一般团中的变量关系也体现在它所对应的极大团中,因此常常基于极大团来定义变量的联合概率分布函数。具体而言,若所有变量构成的极大团的集合为C,则MRF的联合概率函数可以定义为:
在这里插入图片描述
对于条件独立性,马尔可夫随机场通过分离集来实现条件独立,若A结点集必须经过C结点集才能到达B结点集,则称C为分离集。书上给出了一个简单情形下的条件独立证明过程,十分贴切易懂,此处不再展开。基于分离集的概念,得到了MRF的三个性质:

  • 全局马尔可夫性:给定两个变量子集的分离集,则这两个变量子集条件独立。
  • 局部马尔可夫性:给定某变量的邻接变量,则该变量与其它变量条件独立。
  • 成对马尔可夫性:给定所有其他变量,两个非邻接变量条件独立。
    在这里插入图片描述
    对于MRF中的势函数,势函数主要用于描述团中变量之间的相关关系,且要求为非负函数,直观来看:势函数需要在偏好的变量取值上函数值较大,例如:若x1与x2成正相关,则需要将这种关系反映在势函数的函数值中。一般我们常使用指数函数来定义势函数:
    在这里插入图片描述

14.3 条件随机场(CRF)

前面所讲到的隐马尔可夫模型和马尔可夫随机场都属于生成式模型,即对联合概率进行建模,条件随机场则是对条件分布进行建模。CRF(Conditional Random Field)试图在给定观测值序列后,对状态序列的概率分布进行建模,即P(y | x)。

直观上看:CRF与HMM的解码问题十分类似,都是在给定观测值序列后,研究状态序列可能的取值。CRF可以有多种结构,只需保证状态序列满足马尔可夫性即可,一般我们常使用的是链式条件随机场:
在这里插入图片描述
与马尔可夫随机场定义联合概率类似地,CRF也通过团以及势函数的概念来定义条件概率P(y | x)。在给定观测值序列的条件下,链式条件随机场主要包含两种团结构:单个状态团及相邻状态团,通过引入两类特征函数便可以定义出目标条件概率:
在这里插入图片描述以词性标注为例,如何判断给出的一个标注序列靠谱不靠谱呢?转移特征函数主要判定两个相邻的标注是否合理,
例如:动词+动词显然语法不通;状态特征函数则判定观测值与对应的标注是否合理,
例如: ly结尾的词–>副词较合理。因此我们可以定义一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。

也就是说,每一个特征函数(对应一种规则)都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。可以看出:特征函数是一些经验的特性。

14.4 学习与推断

对于生成式模型,通常我们都是先对变量的联合概率分布进行建模,接着再求出目标变量的边际分布(marginal distribution),那如何从联合概率得到边际分布呢?这便是学习与推断。下面主要介绍两种精确推断的方法:变量消去与信念传播。

14.4.1 变量消去

变量消去利用条件独立性来消减计算目标概率值所需的计算量,它通过运用乘法与加法的分配率,将对变量的积的求和问题转化为对部分变量交替进行求积与求和的问题,从而将每次的运算控制在局部,达到简化运算的目的。
在这里插入图片描述
在这里插入图片描述

14.4.2 信念传播

若将变量求和操作看作是一种消息的传递过程,信念传播可以理解成:一个节点在接收到所有其它节点的消息后才向另一个节点发送消息,同时当前节点的边际概率正比于他所接收的消息的乘积
在这里插入图片描述因此只需要经过下面两个步骤,便可以完成所有的消息传递过程。利用动态规划法的思想记录传递过程中的所有消息,当计算某个结点的边际概率分布时,只需直接取出传到该结点的消息即可,从而避免了计算多个边际分布时的冗余计算问题。

  1. 指定一个根节点,从所有的叶节点开始向根节点传递消息,直到根节点收到所有邻接结点的消息(从叶到根);
  2. 从根节点开始向叶节点传递消息,直到所有叶节点均收到消息(从根到叶)。
    在这里插入图片描述

14.5 近似推断

精确推断方法通常需要很大的计算开销,因此在现实应用中近似推断方法更为常用。近似推断方法大致可分为两大类:第一类是采样(sampling),通过使用随机化方法完成近似;第二类是使用确定性近似完成近似推断,典型代表为变分推断(variational inference)。

14.5.1 马尔科夫链蒙特卡罗MCMC采样

在贝叶斯推断和许多概率模型中,目标是从某个复杂的后验分布 p ( θ ∣ x ) p(\theta \mid x) p(θx)中获取样本。然而,在大多数情况下,这种分布很难直接采样,因为其可能涉及到难以求解的归一化常数。MCMC 提供了一种间接方法,通过构建一个马尔可夫链,使其逐步收敛到目标分布。然后,通过在平衡态(或稳态)下从马尔可夫链中提取样本,我们可以得到接近于目标分布的样本。

马尔可夫性质:马尔可夫链是一种具有“无记忆”性质的随机过程,当前状态的下一个状态只依赖于当前状态,而不依赖于历史状态。数学上,设 X 1 , X 2 , … X_1, X_2, \dots X1,X2,是马尔可夫链中的状态序列,满足:
P ( X n + 1 ∣ X 1 , X 2 , … , X n ) = P ( X n + 1 ∣ X n ) P(X_{n+1} \mid X_1, X_2, \dots, X_n) = P(X_{n+1} \mid X_n) P(Xn+1X1,X2,,Xn)=P(Xn+1Xn)

转移矩阵:马尔可夫链通过转移概率矩阵(或转移核)定义,设 P i j P_{ij} Pij是从状态 i i i转移到状态 j j j的概率。

Metropolis-Hastings(MH)算法是 MCMC 中常用的采样方法。它通过构造一个易于采样的提议分布 q ( θ ′ ∣ θ ) q(\theta' \mid \theta) q(θθ),并通过接受或拒绝的方式生成目标分布的样本。

步骤

  1. 初始化 θ 0 \theta_0 θ0
  2. 对每一轮迭代:
    • 根据提议分布 q ( θ ′ ∣ θ t ) q(\theta' \mid \theta_t) q(θθt) 生成候选样本 θ ′ \theta' θ
    • 计算接受概率:
      α = min ⁡ ( 1 , p ( θ ′ ∣ x ) q ( θ t ∣ θ ′ ) p ( θ t ∣ x ) q ( θ ′ ∣ θ t ) ) \alpha = \min \left(1, \frac{p(\theta' \mid x) q(\theta_t \mid \theta')}{p(\theta_t \mid x) q(\theta' \mid \theta_t)} \right) α=min(1,p(θtx)q(θθt)p(θx)q(θtθ))
    • 接受或拒绝 θ ′ \theta' θ
      • 以概率 α \alpha α接受 θ ′ \theta' θ,即 θ t + 1 = θ ′ \theta_{t+1} = \theta' θt+1=θ
      • 否则,拒绝 θ ′ \theta' θ,即 θ t + 1 = θ t \theta_{t+1} = \theta_t θt+1=θt

Gibbs 采样是一种特殊的 MCMC 方法,适用于条件分布易于采样的情况。它通过逐个更新每个变量,条件在其他变量的当前值上。

步骤

  1. 初始化 θ ( 0 ) \theta^{(0)} θ(0)
  2. 对每一轮迭代 t t t,依次更新每个变量 θ i \theta_i θi
    θ i ( t + 1 ) ∼ p ( θ i ∣ θ 1 ( t + 1 ) , … , θ i − 1 ( t + 1 ) , θ i + 1 ( t ) , … , θ d ( t ) ) \theta_i^{(t+1)} \sim p(\theta_i \mid \theta_1^{(t+1)}, \dots, \theta_{i-1}^{(t+1)}, \theta_{i+1}^{(t)}, \dots, \theta_d^{(t)}) θi(t+1)p(θiθ1(t+1),,θi1(t+1),θi+1(t),,θd(t))
  3. 重复迭代,直到样本收敛。
14.5.2 变分推断

变分推断的核心思想是将一个难以直接计算的复杂分布 p ( z ∣ x ) p(z \mid x) p(zx)用一个简单的概率分布 q ( z ; θ ) q(z; \theta) q(z;θ)来近似,其中 θ \theta θ q q q的参数。目标是找到参数 θ \theta θ使得 q q q p p p之间的差异最小,通常使用KL散度(Kullback-Leibler divergence)作为衡量两个分布差异的指标。

变分推断的步骤如下:

  1. 定义变分分布:选择一个参数化的概率分布 q ( z ; θ ) q(z; \theta) q(z;θ)作为 p ( z ∣ x ) p(z \mid x) p(zx) 的近似。这个分布需要足够灵活以捕捉后验分布的重要特征,同时又足够简单以便于优化和抽样。

  2. 优化参数:通过最小化 q q q p p p之间的KL散度来优化参数 t h e t a theta theta
    min ⁡ θ KL ( q ( z ; θ ) ∥ p ( z ∣ x ) ) \min_{\theta} \text{KL}(q(z; \theta) \parallel p(z \mid x)) θminKL(q(z;θ)p(zx))
    这个优化问题可以转化为最大化变分下界(Evidence Lower Bound, ELBO),因为:
    KL ( q ( z ; θ ) ∥ p ( z ∣ x ) ) = E q ( z ; θ ) [ log ⁡ q ( z ; θ ) ] − E q ( z ; θ ) [ log ⁡ p ( x , z ) ] \text{KL}(q(z; \theta) \parallel p(z \mid x)) = \mathbb{E}_{q(z; \theta)}[\log q(z; \theta)] - \mathbb{E}_{q(z; \theta)}[\log p(x, z)] KL(q(z;θ)p(zx))=Eq(z;θ)[logq(z;θ)]Eq(z;θ)[logp(x,z)]
    其中,( \mathbb{E}_{q(z; \theta)}[\log p(x, z)] ) 是ELBO,即变分下界。

  3. 迭代更新:使用梯度下降或其他优化算法迭代更新参数 θ \theta θ,直到收敛。在每次迭代中,计算 q q q下的期望,并更新 θ \theta θ以增加ELBO。

变分推断和MCMC都是处理复杂概率分布的方法,但它们在哲学和实践上有所不同。MCMC通过构造马尔可夫链来生成样本,而变分推断通过优化一个简单分布来近似复杂分布。在某些情况下,变分推断可能比MCMC更快,尤其是在高维空间中,但MCMC有时能提供更准确的样本。

14.6 LDA话题模型

话题模型主要用于处理文本类数据,其中隐狄利克雷分配模型(Latent Dirichlet Allocation,简称LDA)是话题模型的杰出代表。在话题模型中,有以下几个基本概念:词(word)、文档(document)、话题(topic)。

  • 词:最基本的离散单元;
  • 文档:由一组词组成,词在文档中不计顺序;
  • 话题:由一组特定的词组成,这组词具有较强的相关关系。

在现实任务中,一般我们可以得出一个文档的词频分布,但不知道该文档对应着哪些话题,LDA话题模型正是为了解决这个问题。具体来说:LDA认为每篇文档包含多个话题,且其中每一个词都对应着一个话题。因此可以假设文档是通过如下方式生成:
在这里插入图片描述
这样一个文档中的所有词都可以认为是通过话题模型来生成的,当已知一个文档的词频分布后(即一个N维向量,N为词库大小),则可以认为:每一个词频元素都对应着一个话题,而话题对应的词频分布则影响着该词频元素的大小。因此很容易写出LDA模型对应的联合概率函数:
在这里插入图片描述
在这里插入图片描述
从上图可以看出,LDA的三个表示层被三种颜色表示出来:

  • corpus-level(红色): α和β表示语料级别的参数,也就是每个文档都一样,因此生成过程只采样一次。
  • document-level(橙色): θ是文档级别的变量,每个文档对应一个θ。
  • word-level(绿色): z和w都是单词级别变量,z由θ生成,w由z和β共同生成,一个单词w对应一个主题z。

通过上面对LDA生成模型的讨论,可以知道LDA模型主要是想从给定的输入语料中学习训练出两个控制参数α和β,当学习出了这两个控制参数就确定了模型,便可以用来生成文档。其中α和β分别对应以下各个信息:

  • α:分布p(θ)需要一个向量参数,即Dirichlet分布的参数,用于生成一个主题θ向量;
  • β:各个主题对应的单词概率分布矩阵p(w|z)。

把w当做观察变量,θ和z当做隐藏变量,就可以通过EM算法学习出α和β,求解过程中遇到后验概率p(θ,z|w)无法直接求解,需要找一个似然函数下界来近似求解,原作者使用基于分解(factorization)假设的变分法(varialtional inference)进行计算,用到了EM算法。每次E-step输入α和β,计算似然函数,M-step最大化这个似然函数,算出α和β,不断迭代直到收敛。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Apache Commons IO 实现文件读写

在 Java 编程中&#xff0c;文件读写是常见的操作。虽然 Java 标准库提供了基本的文件 I/O 功能&#xff0c;但使用 Apache Commons IO 库可以进一步简化这些操作&#xff0c;提高开发效率。Apache Commons IO 是一个强大的工具库&#xff0c;提供了许多实用的类和方法&#xf…

Linux开发板使用wifi过程

1.buildroot WIFI 工具配置 首先要给文件系统添加一些操作 WIFI 的工具。进入 buildroot 源码目录里&#xff0c;接着运行“make menuconfig”进入图形配置界面&#xff0c;配置如下&#xff1a; → Target packages → Networking applications→ [*] wireless tools //选中…

C# 元组

文章目录 一、元组&#xff08;Tuple&#xff09;概述二、元组的创建方式&#xff08;一&#xff09;使用 Tuple 类&#xff08;旧的方式&#xff0c;C# 7.0 之前常用&#xff09;&#xff08;二&#xff09;使用元组字面量&#xff08;C# 7.0 及之后引入的更便捷方式&#xff…

2024年Java面试八股文大全(附答案版)

很多人会问Java面试八股文有必要背吗&#xff1f; 我的回答是&#xff1a;很有必要。你可以讨厌这模式&#xff0c;但你一定要去背&#xff0c;因为不背你就进不了大厂。 国内的互联网面试&#xff0c;恐怕是现存的、最接近科举考试的制度。 而且&#xff0c;我国的八股文确…

【数据库系列】Spring Boot如何配置Flyway的回调函数

Flyway 提供了回调机制&#xff0c;使您能够在特定的数据库迁移事件发生时执行自定义逻辑。通过实现 Flyway 的回调接口&#xff0c;可以在迁移前后执行操作&#xff0c;如记录日志、执行额外的 SQL 语句等。 1. 创建自定义回调类 要配置 Flyway 的回调函数&#xff0c;需要创…

Angular v19 (三):增量水合特性详解 - 什么是水合过程?有哪些应用场景?与 Qwik 相比谁更胜一筹?- 哪个技术好我就学哪个,这就是吸心大法吧

Angular在其最新版本 v19 中引入了增量水合&#xff08;Incremental Hydration&#xff09;这一特性。这一更新引发了开发者们广泛的讨论&#xff0c;特别是在优化首屏加载速度和改善用户体验方面。本文将详解水合过程的概念、增量水合的应用场景&#xff0c;以及它与类似框架如…

jmeter如何导出中文版的测试报告?

文章目录 0、初始步骤&#xff1a;把报告模板换成中文形式1、首先添加一份聚合报告2、然后点开【聚合报告】3&#xff0c;生成报告3.1 选择【工具】-【generate HTML report】3.2 【generate HTML report】参数详解3.3 、最后点击 【generate report】直接生成。 声明&#xff…

集团内买卖资产并以注资方式转实收资本

SAP 集团内资产买卖原值、折旧一起入账 合并是个很复杂的东西&#xff0c;我至今不会。 做项目过程中经历的上市公司&#xff0c;一般都要求内部公司间转移的固定资产不能有价格调整&#xff0c;也就是卖出方的账面价值需要等于买入方的账面价值。 当然&#xff0c;集团内也做…

【测试工具JMeter篇】JMeter性能测试入门级教程(七):JMeter断言

一、前言 在 JMeter 中&#xff0c;断言元件&#xff08;Assertion&#xff09;用于验证测试结果是否符合预期。断言元件可以检查服务器的响应数据&#xff0c;以确保它们符合期望的模式或值&#xff0c;从而验证性能测试脚本的正确性。断言元件通常在每个请求的响应中添加&am…

nerdctl:与 Docker 兼容的 containerd CLI

nerdctl 是一个用于容器管理的命令行工具&#xff0c;它旨在提供与 Docker CLI 相似的用户体验&#xff0c;但却是为 containerd 这样的低级容器运行时设计的。containerd 是一个行业标准的容器运行时&#xff0c;被广泛用作 Kubernetes 等容器编排平台的一部分。nerdctl 通过简…

XRP 深度解析:从技术到 Meme 币交易指南

撰文&#xff1a;Ignas | DeFi Research 编译&#xff1a;Yuliya&#xff0c;PANews 本文来源Techub News:XRP 深度解析&#xff1a;从技术到 Meme 币交易指南 在当前加密货币市场&#xff0c;一个令人瞩目的现象正在上演&#xff1a;XRP 在短短一个月内暴涨 3.5 倍&#xf…

java_判断语句——acwing

题目一&#xff1a;倍数 665. 倍数 - AcWing题库 代码 import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner sc new Scanner(System.in);int a sc.nextInt(), b sc.nextInt();if(a%b0 || b%a0) System.out.printf("Sao Mu…

构建自己的docker的ftp镜像

aarch64系统可运行的docker镜像 构建自己的vsftpd镜像&#xff0c;我是在windows系统下的docker desktop中构建运行于aarch64 GNU/Linux系统的ftp镜像。 系统环境&#xff1a; Welcome to Debian GNU/Linux with Linux x.x.x dockerfile FROM ubuntu:latestUSER rootRUN ap…

【LeetCode】169.多数元素

题目连接&#xff1a; https://leetcode.cn/problems/majority-element/solutions/2362000/169-duo-shu-yuan-su-mo-er-tou-piao-qing-ledrh/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述&#xff1a; 思路一&#xff1a; 使用哈希表unordered_map记录每个元…

Ajax基础总结(思维导图+二维表)

一些话 刚开始学习Ajax的时候&#xff0c;感觉很模糊&#xff0c;但是好像学什么都是这样的&#xff0c;很正常&#xff0c;但是当你学习的时候要持续性敲代码&#xff0c;边敲代码其实就可以理解很多了。然后在最后的总结&#xff0c;其实做二维表之后&#xff0c;就可以区分…

structuredClone()与 lodash.cloneDeep与 JSON.parse JSON.stringify()拷贝对比

structuredClone()与 lodash.cloneDeep与 JSON.parse & JSON.stringify()拷贝对比

Vue02

前端最新Vue2Vue3基础入门到实战项目全套教程&#xff0c;自学前端vue就选黑马程序员&#xff0c;一套全通关&#xff01;_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HV4y1a7n4?spm_id_from333.788.videopod.episodes&vd_source016213ecd945408976ff307a6bda30…

数据结构---图

图是一种较为复杂的非线性结构。 为啥说其较为复杂呢&#xff1f; 根据前面的内容&#xff0c;我们知道&#xff1a; 线性数据结构的元素满足唯一的线性关系&#xff0c;每个元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继。树形数据结构的元素之间有着明显的层次…

FakeLocation 1.3.5 BETA 提示校园跑漏洞修复解决

任务一 作者对此又进行了更新&#xff0c;在本次更新中&#xff0c;我们依旧使用hookvip进行破解 本次的更新&#xff0c;使得包名强制写入更加严重&#xff0c;之前靠一些方法已经无法阻止appconfigs.xml的文件的修改&#xff0c;而且使得验证加强&#xff0c;和云端加强&…

在Ubuntu 20.04和ROS中使用RViz进行数据可视化:详解Fixed Frame参数的选择与应用

在Ubuntu 20.04和ROS中使用RViz进行数据可视化&#xff1a;详解Fixed Frame参数的选择与应用 在ROS的可视化工具RViz中&#xff0c;“Fixed Frame"是一个关键的全局选项&#xff0c;它设置了一个参考坐标系&#xff0c;用于解释和显示所有其他坐标系中的数据。通过您提供的…