机器学习课程学习周报十六

news2024/10/24 9:23:08

机器学习课程学习周报十六

文章目录

  • 机器学习课程学习周报十六
    • 摘要
    • Abstract
    • 一、机器学习部分
      • 1. 再探马尔可夫链
        • 1.1 离散状态马尔可夫链
          • 1.1.1 转移概率矩阵和状态分布
          • 1.1.2 平稳分布
        • 1.2 连续状态马尔可夫链
        • 1.3 马尔可夫链的性质
      • 2. 马尔可夫蒙特卡罗法
        • 2.1 基本想法
        • 2.2 基本步骤
        • 2.3 马尔可夫链蒙特卡罗法与统计学习
    • 总结

摘要

本次周报介绍了马尔可夫链的基本概念及其在机器学习中的应用。详细探讨了离散和连续状态的马尔可夫链,平稳分布及其性质。还介绍了马尔可夫蒙特卡罗法及其在统计学习中的作用,特别是在贝叶斯学习中的应用。

Abstract

This weekly report presents the fundamental concepts of Markov chains and their applications in machine learning. It explores both discrete and continuous state Markov chains, stationary distributions, and their properties. The Markov Chain Monte Carlo (MCMC) method and its role in statistical learning, especially in Bayesian learning, are also introduced.

一、机器学习部分

1. 再探马尔可夫链

1.1 离散状态马尔可夫链
1.1.1 转移概率矩阵和状态分布

在这里插入图片描述

有限离散状态的马尔可夫链可以由有向图表示。结点表示状态,边表示状态之间的转移,边上的数值表示转移概率。从一个初始状态出发,根据有向边上定义的概率在状态之间随机跳转(或随机转移),就可以产生状态的序列。马尔可夫链实际上是刻画随时间在状态之间转移的模型,假设未来的转移状态只依赖于现在的状态,而与过去的状态无关。

下面通过一个简单的例子给出马尔可夫链的直观解释。假设观察某地的天气,按日期的天气依次是“晴,雨,晴,晴,晴,雨,晴…”,具有一定的规律,马尔可夫链可以刻画这个过程。假设天气的变化具有马尔可夫性,即明天的天气只依赖于今天的天气,而与昨天及以前的天气无关。这个假设经验上是合理的,至少是现实情况的近似。具体地,比如,如果今天是晴天,那么明天是晴天的概率是0.9,是雨天的概率是0.1;如果今天是雨天,那么明天是晴天的概率是0.5,是雨天的概率也是0.5(如下图)。
在这里插入图片描述

上图表示这个天气的马尔可夫链,从一个初始状态出发,随时间在状态之间随机转移,就可以产生天气的序列,就可以产生天气的序列,可以对天气进行预测。

下面看一个马尔可夫链应用的例子。自然语言处理、语音处理中经常用到语言模型,这是建立在词表上的n阶马尔可夫链(与前n个状态都有关)。比如在英语语音识别中,语音模型产出两个候选:“How to recognize speech”与“how to wreck a nice beach”,这两句的英文发音相近,要判断哪个可能性更大,显然从语义的角度前者的可能性更大,后者的语义甚至都不通顺,语言模型可以帮助做出这个判断。

将一个语句看作是一个单词的序列 w 1 w 2 ⋯ w s {w_1}{w_2} \cdots {w_s} w1w2ws,目标是计算其概率。同一个语句很少在语料中重复多次出现,所以直接从语料中估计每个语句的概率是困难的。语言模型用局部的单词序列的概率,组合计算出全局的单词序列的概率,可以很好地解决这个问题。

假设每个单词只依赖于其前面出现的单词,也就是说单词序列具有马尔可夫性( X t {X_t} Xt只依赖于 X t − 1 {X_{t - 1}} Xt1时,才说具有马尔可夫性),那么可以定义一阶马尔可夫链,即语言模型,如下计算语句的概率:

P ( w 1 w 2 ⋯ w s ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 w 2 ) ⋯ P ( w i ∣ w 1 w 2 ⋯ w i − 1 ) ⋯ P ( w s ∣ w 1 w 2 ⋯ w s − 1 ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 ) ⋯ P ( w i ∣ w i − 1 ) ⋯ P ( w s ∣ w s − 1 ) \begin{array}{l}P({w_1}{w_2} \cdots {w_s})\\ = P({w_1})P({w_2}|{w_1})P({w_3}|{w_1}{w_2}) \cdots P({w_i}|{w_1}{w_2} \cdots {w_{i - 1}}) \cdots P({w_s}|{w_1}{w_2} \cdots {w_{s - 1}})\\ = P({w_1})P({w_2}|{w_1})P({w_3}|{w_2}) \cdots P({w_i}|{w_{i - 1}}) \cdots P({w_s}|{w_{s - 1}})\end{array} P(w1w2ws)=P(w1)P(w2w1)P(w3w1w2)P(wiw1w2wi1)P(wsw1w2ws1)=P(w1)P(w2w1)P(w3w2)P(wiwi1)P(wsws1)

这里的第三个等式基于马尔可夫链假设。这个马尔可夫链中,状态空间为词表,一个位置上单词的产生只依赖于前一个位置的单词,而不依赖于更前面的单词。以上是一阶马尔可夫链,一般可以扩展到n阶马尔可夫链。

语言模型的学习等价于确定马尔可夫链中的转移概率值,如果有充分的语料,转移概率可以直接从语料中估计。直观上,“wreck a nice”出现后,下面出现“beach”的概率极低,所以第二个语句的概率应该更小,从语言模型的角度看第一个语句的可能性更大。

在这里插入图片描述

1.1.2 平稳分布

设有马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,},其状态空间为 S S S,转移概率矩阵为 P = ( p i j ) P = ({p_{ij}}) P=(pij),如果存在状态空间 S S S上的一个分布

π = [ π 1 π 2 ⋯ ] \pi = \left[ \begin{array}{l}{\pi _1}\\{\pi _2}\\ \cdots \end{array} \right] π= π1π2

使得

π = P π \pi = P\pi π=Pπ

则称 π \pi π为马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,}的平稳分布。直观上,如果马尔可夫链的平稳分布存在,那么以该平稳分布作为初始分布,面向未来进行随机状态转移,之后任何一个时刻的状态分布都是该平稳分布。马尔可夫链可能存在唯一平稳分布,无穷多个平稳分布,或不存在平稳分布。

1.2 连续状态马尔可夫链

在这里插入图片描述

1.3 马尔可夫链的性质

以下介绍离散状态马尔可夫链的性质,可以自然推广到连续状态马尔可夫链。

  1. 不可约

设有马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,},状态空间为 S S S,对于任意状态 i , j ∈ S i,j \in S i,jS,如果存在一个时刻 t ( t > 0 ) t\left( {t > 0} \right) t(t>0)满足:

P ( X t = i ∣ X 0 = j ) > 0 P({X_t} = i|{X_0} = j) > 0 P(Xt=iX0=j)>0

也就是说,时刻0从状态 j j j出发,时刻 t t t到达状态 i i i的概率大于0,则称此马尔可夫链 X X X是不可约的(irreducible),否则称马尔可夫链是可约的(reducible)。直观上,一个不可约的马尔可夫链,从任意状态出发,当经过充分长时间后,可以到达任意状态。
在这里插入图片描述

  1. 非周期

设有马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,},状态空间为 S S S,对于任意状态 i ∈ S i \in S iS,如果0时刻从状态 i i i出发, t t t时刻返回状态的所有时间长 { t : P ( X t = i ∣ X 0 = i ) > 0 } \{ t:P({X_t} = i|{X_0} = i) > 0\} {t:P(Xt=iX0=i)>0}的最大公约数是1,则称此马尔可夫链 X X X是非周期的(aperiodic),否则称马尔可夫链是周期的(periodic)。直观上,一个非周期性的马尔可夫链,不存在一个状态,从这一个状态出发,再返回到这个状态时所经历的时间长呈一定的周期性。
在这里插入图片描述

  1. 正常返

设有马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,},状态空间为 S S S,对于任意状态 i , j ∈ S i,j \in S i,jS,定义概率 p i j t p_{ij}^t pijt为时刻0从状态 j j j出发,时刻 t t t首次转移到状态 i i i的概率,即 p i j t = P ( X t = i , X s ≠ i , s = 1 , 2 , ⋯   , t − 1 ∣ X 0 = j ) , t = 1 , 2 , ⋯ p_{ij}^t = P({X_t} = i,{X_s} \ne i,s = 1,2, \cdots ,t - 1|{X_0} = j),t = 1,2, \cdots pijt=P(Xt=i,Xs=i,s=1,2,,t1∣X0=j),t=1,2,。若对所有状态 i , j i,j i,j都满足 lim ⁡ t → ∞ p i j t > 0 \mathop{\lim }\limits_{t \to \infty } p_{ij}^t > 0 tlimpijt>0,则称马尔可夫链 X X X是正常返的(positive recurrent)。直观上,一个正常返的马尔可夫链,其中任意一个状态,从其他任意一个状态出发,当时间趋于无穷时,首次转移到这个状态的概率不为0。下图中无限状态的马尔可夫链,当 p > q p > q p>q时是正常返的,当 p ≤ q p \le q pq不是正常返的。

在这里插入图片描述

  1. 遍历定理

设有马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,},状态空间为 S S S,若马尔可夫链 X X X是不可约、非周期且正常返的,则该马尔可夫链有唯一平稳分布 π = ( π 1 , π 2 , ⋯ ) T \pi = {\left( {{\pi _1},{\pi _2}, \cdots } \right)^{\rm T}} π=(π1,π2,)T,并且转移概率的极限分布是马尔可夫链的平稳分布

lim ⁡ t → ∞ P ( X t = i ∣ X 0 = j ) = π i , i = 1 , 2 , ⋯   ; j = 1 , 2 , ⋯ \mathop{\lim }\limits_{t \to \infty } P({X_t} = i|{X_0} = j) = {\pi _i},i = 1,2, \cdots ;j = 1,2, \cdots tlimP(Xt=iX0=j)=πi,i=1,2,;j=1,2,

f ( X ) f(X) f(X)是定义在状态空间上的函数, E π [ ∣ f ( X ) ∣ ] < ∞ {E_\pi }\left[ {\left| {f(X)} \right|} \right] < \infty Eπ[f(X)]<,则

P { f ^ t → E π [ f ( X ) ] } = 1 P\{ {{\hat f}_t} \to {E_\pi }\left[ {f(X)} \right]\} = 1 P{f^tEπ[f(X)]}=1

这里

f ^ t = 1 t ∑ s = 1 t f ( x s ) {{\hat f}_t} = \frac{1}{t}\sum\limits_{s = 1}^t {f({x_s})} f^t=t1s=1tf(xs)

E π [ f ( X ) ] = ∑ i f ( i ) π i {E_\pi }\left[ {f(X)} \right] = \sum\limits_i {f(i)} {\pi _i} Eπ[f(X)]=if(i)πi f ( X ) f(X) f(X)关于平稳分布 π = ( π 1 , π 2 , ⋯ ) T \pi = {\left( {{\pi _1},{\pi _2}, \cdots } \right)^{\rm T}} π=(π1,π2,)T的数学期望,式子表示为:

f ^ t → E π [ f ( X ) ] , t → ∞ {{\hat f}_t} \to {E_\pi }\left[ {f(X)} \right],t \to \infty f^tEπ[f(X)],t

几乎处处成立或以概率1成立。

遍历定理的直观解释:满足相应条件的马尔可夫链,当时间趋于无穷时,马尔克夫链的状态分布趋近于平稳分布,随机变量的函数的样本均值以概率1收敛于该函数的数学期望。样本均值可以认为是时间均值,而数学期望是空间均值。遍历定理实际表述了遍历性的含义:当时间趋于无穷时,时间均值等于空间均值。遍历定理的三个条件:不可约,非周期、正常返,保证了当时间趋于无穷时达到任意一个状态的概率不为0。

理论上并不知道经过多少次迭代,马尔可夫链的状态分布才能接近于平稳分布,在实际应用遍历定理时,取一个足够大的整数m,经过m次迭代之后认为状态分布就是平稳分布,这时计算从第m+1次迭代到第n次迭代的均值,即

E ^ f = 1 n − m ∑ i = m + 1 n f ( x i ) \hat Ef = \frac{1}{{n - m}}\sum\limits_{i = m + 1}^n {f({x_i})} E^f=nm1i=m+1nf(xi)

称为遍历均值。

  1. 可逆马尔可夫链

设有马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,},状态空间为 S S S,转移概率矩阵为 P P P,如果有状态分布 π = ( π 1 , π 2 , ⋯ ) T \pi = {\left( {{\pi _1},{\pi _2}, \cdots } \right)^{\rm T}} π=(π1,π2,)T,对于任意状态 i , j ∈ S i,j \in S i,jS,对任意一个时刻 t t t满足

P ( X t = i ∣ X t − 1 = j ) π j = P ( X t − 1 = j ∣ X t = i ) π i , i , j = 1 , 2 , ⋯ P({X_t} = i|{X_{t - 1}} = j){\pi _j} = P({X_{t - 1}} = j|{X_t} = i){\pi _i},i,j = 1,2, \cdots P(Xt=iXt1=j)πj=P(Xt1=jXt=i)πi,i,j=1,2,

或简写为

p j i π j = p i j π i , i , j = 1 , 2 , ⋯ {p_{ji}}{\pi _j} = {p_{ij}}{\pi _i},i,j = 1,2, \cdots pjiπj=pijπi,i,j=1,2,

则称此马尔可夫链 X X X为可逆马尔可夫链(reversible Markov chain),上式称为细致平衡方程(detailed balance equation)。

直观上,如果有可逆的马尔可夫链,那么以该马尔可夫链的平稳分布作为初始分布,进行随机状态转移,无论是面向未来还是过去,任何一个时刻的状态分布都是该平稳分布。

2. 马尔可夫蒙特卡罗法

2.1 基本想法

假设目标是对一个概率分布进行随机抽样,或者是求函数关于该概率分布的数学期望。可以采用传统的蒙特卡罗法,如接受-拒绝法、重要性抽样法,也可以使用马尔可夫链蒙特卡罗法。马尔可夫蒙特卡罗法更适合于随机变量是多元的、密度函数是非标准形式的、随机变量各分量不独立等情况。

假设多元随机变量 x x x,满足 x ∈ χ x \in \chi xχ,其概率密度函数为 p ( x ) p(x) p(x) f ( x ) f(x) f(x)为定义在 x ∈ χ x \in \chi xχ上的函数,目标是获得概率分布 p ( x ) p(x) p(x)的样本集合,以及求函数 f ( x ) f(x) f(x)的数学期望 E p ( x ) [ f ( x ) ] {E_{p(x)}}\left[ {f(x)} \right] Ep(x)[f(x)]

应用马尔可夫链蒙特卡罗法解决这个问题。基本想法是:在随机变量 x x x的状态空间 S S S上定义一个满足遍历定理的马尔可夫链 X = { X 0 , X 1 , ⋯   , X t , ⋯ } X = \left\{ {{X_0},{X_1}, \cdots ,{X_t}, \cdots } \right\} X={X0,X1,,Xt,},使其平稳分布就是抽样的目标分布 p ( x ) p(x) p(x)。然后在这个马尔可夫链上进行随机游走,每个时刻得到一个样本。根据遍历定理,当时间趋于无穷时,样本的分布趋近于平稳分布,样本的函数均值趋近函数的数学期望。所以,当时间足够长时(时刻大于某个正整数m),在之后的时间(时刻小于等于某个正整数n,n>m)里随机游走得到的样本集合 { x m + 1 , x m + 2 , ⋯   , x n } \left\{ {{x_{m + 1}},{x_{m + 2}}, \cdots ,{x_n}} \right\} {xm+1,xm+2,,xn}就是目标概率分布的抽样结果,得到的函数均值(遍历均值)就是要计算的数学期望值:

E ^ f = 1 n − m ∑ i = m + 1 n f ( x i ) \hat Ef = \frac{1}{{n - m}}\sum\limits_{i = m + 1}^n {f({x_i})} E^f=nm1i=m+1nf(xi)

到时刻m为止的时间段称为燃烧期。

如何构建具体的马尔可夫链成为这个方法的关键。连续变量的时候,需要定义转移核函数;离散变量的时候,需要定义转移矩阵。一个方法是定义特殊的转移核函数或者转移矩阵,构建可逆马尔可夫链,这样可以保证遍历定理成立。常用的马尔可夫链蒙特卡罗法有Metropolis-Hastings算法、吉布斯抽样。

由于这个马尔可夫链满足遍历定理,随机游走的起始点并不影响得到的结果,即从不同的起始点出发,都会收敛到同一平稳分布。

马尔可夫链蒙特卡罗法的收敛性的判断通常是经验性的,比如,在马尔可夫链上进行随机游走,检验遍历均值是否收敛。具体地,每隔一段时间取一次样本,得到多个样本以后,计算遍历均值,当计算的均值稳定后,认为马尔可夫链已经收敛。再比如,在马尔可夫链上并行进行多个随机游走,比较各个随机游走的遍历均值是否接近一致。

马尔可夫链蒙特卡罗法中的到的样本序列,相邻的样本点是相关的,而不是独立的。因此,在需要独立样本时,可以在该样本序列中再次进行随机抽样,比如每隔一段时间取一次样本,将这样得到的子样本集合作为独立样本集合。

马尔可夫链蒙特卡罗法比接受-拒绝法更容易实现,因为只需要定义马尔可夫链,而不需要定义建议分布。一般来说马尔可夫链蒙特卡罗法比接受-拒绝法效率更高,没有大量被拒绝的样本,虽然燃烧期的样本也要抛弃。

2.2 基本步骤

根据上面的讨论,可以将马尔可夫链蒙特卡罗法概括为以下三步:

(1)首先,在随机变量 x x x的状态空间 S S S上构造一个满足遍历定理的马尔可夫链,使其平稳分布为目标分布 p ( x ) p(x) p(x);

(2)从状态空间的某一点 x 0 {x_0} x0出发,用构造的马尔可夫链进行随机游走,产生样本序列 x 0 , x 1 , ⋯   , x t , ⋯ {x_0},{x_1}, \cdots ,{x_t}, \cdots x0,x1,,xt,

(3)应用马尔可夫链的遍历定理,确定正整数m和n,(m<n),得到样本集合 { x m + 1 , x m + 2 , ⋯   , x n } \left\{ {{x_{m + 1}},{x_{m + 2}}, \cdots ,{x_n}} \right\} {xm+1,xm+2,,xn},求得函数 f ( x ) f(x) f(x)的均值(遍历均值)

E ^ f = 1 n − m ∑ i = m + 1 n f ( x i ) \hat Ef = \frac{1}{{n - m}}\sum\limits_{i = m + 1}^n {f({x_i})} E^f=nm1i=m+1nf(xi)

就是马尔可夫链蒙特卡罗法的计算公式。

这里有几个重要的问题:

(1)如何定义马尔可夫链,保证马尔可夫链蒙特卡罗法的条件成立。

(2)如何确定收敛步数m,保证样本抽样的无偏性。

(3)如何确定迭代步数n,保证遍历均值计算的精度。

2.3 马尔可夫链蒙特卡罗法与统计学习

马尔可夫链蒙特卡罗法在统计学习,特别是贝叶斯学习中,起着重要的作用。主要是因为马尔可夫链蒙特卡罗法可以用在概率模型的学习和推理上。

假设观测数据由随机变量 y ∈ Y y \in Y yY表示,模型由随机变量 x ∈ χ x \in \chi xχ表示,贝叶斯学习通过贝叶斯定理计算给定数据条件下模型的后验概率,并选择后验概率最大的模型。

后验概率:

p ( x ∣ y ) = p ( x ) p ( y ∣ x ) ∫ χ p ( y ∣ x ′ ) p ( x ′ ) d x ′ p(x|y) = \frac{{p(x)p(y|x)}}{{\int_\chi {p(y|x')p(x')dx'} }} p(xy)=χp(yx)p(x)dxp(x)p(yx)

贝叶斯学习中经常需要进行三种积分运算:归范化(normalization)、边缘化(marginalization)、数学期望(expectation)。

后验概率计算中需要规范化计算:

∫ χ p ( y ∣ x ′ ) p ( x ′ ) d x ′ \int_\chi {p(y|x')p(x')dx'} χp(yx)p(x)dx

如果有隐变量 z ∈ Z z \in Z zZ,后验概率的计算需要边缘化计算:

p ( x ∣ y ) = ∫ Z p ( x , z ∣ y ) d z p(x|y) = \int_Z {p(x,z|y)dz} p(xy)=Zp(x,zy)dz

如果有一个函数 f ( x ) f(x) f(x),可以计算该函数的关于后验概率分布的数学期望:

E P ( x ∣ y ) [ f ( x ) ] = ∫ χ f ( x ) p ( x ∣ y ) d x {E_{P(x|y)}}\left[ {f(x)} \right] = \int_\chi {f(x)} p(x|y)dx EP(xy)[f(x)]=χf(x)p(xy)dx

当观测数据和模型都很复杂的时候,以上的积分计算变得困难。马尔可夫链蒙特卡罗法为这些计算提供了一个通用的有效解决方案。

总结

本次周报系统地探讨了马尔可夫链及其在机器学习中的重要应用,特别是在自然语言处理和语音识别中的作用。通过对平稳分布和马尔可夫链蒙特卡罗法的详细分析,展示了其在贝叶斯学习中不可或缺的地位。下周将介绍代表马尔可夫蒙特卡罗法的两个具体算法:Metropolis-Hastings算法和吉布斯抽样。

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

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

相关文章

77.【C语言】文件操作(3)

目录 6.文件的顺序读写 1.几个顺序读写函数 1.fgetc函数 代码示例 代码改进 2.fputc函数 3.fputs函数 如果需要换行,应该写入换行符(\n) 4.fgets函数 1.读取单行字符串 2.读取多行字符串 6.文件的顺序读写 1.几个顺序读写函数 分组:(fgetc,fputc),(fgets,fputs),(f…

服务器数据恢复—Raid5阵列硬盘磁头损坏导致掉线的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌存储设备上有一组由10块硬盘&#xff08;9块数据盘1块热备盘&#xff09;组建的raid5阵列&#xff0c;上层部署vmware exsi虚拟化平台。 服务器故障&#xff1a; raid5阵列中两块硬盘对应的指示灯亮黄灯掉线。硬盘序列号无法读取&am…

【动手学深度学习】6.3 填充与步幅(个人向笔记)

卷积的输出形状取决于输入形状和卷积核的形状在应用连续的卷积后&#xff0c;我们最终得到的输出大小远小于输入大小&#xff0c;这是由于卷积核的宽度和高度通常大于1导致的比如&#xff0c;一个 240 240 240240 240240像素的图像&#xff0c;经过10层 5 5 55 55的卷积后&am…

D3.js(五):实现组织架构图

实现组织架构图 效果初始化组织机构容器并实现缩放平移功能效果源码 渲染节点效果源码 渲染连线效果源码 完整源码 效果 初始化组织机构容器并实现缩放平移功能 效果 源码 import {useEffect} from react; import TreeData from ./json/tree-data.json;interface ITreeConfig…

电子电气架构---汽车OEM敏捷式集成方案简介

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

数据在内存中的存储【下】

三.浮点数在内存中的存储 我们常见的浮点数&#xff1a;3.14159&#xff0c;1E10等&#xff0c;浮点数家族包括&#xff1a;float&#xff0c;double, long double类型。浮点数表示的范围&#xff1a;float.h中定义。之前我们说过浮点数在内存中无法精确保存&#xff0c;那为什…

OKHTTP 如何处理请求超时和重连机制

&#x1f604;作者简介&#xff1a; 小曾同学.com,一个致力于测试开发的博主⛽️&#xff0c;主要职责&#xff1a;测试开发、CI/CD 如果文章知识点有错误的地方&#xff0c;还请大家指正&#xff0c;让我们一起学习&#xff0c;一起进步。 &#x1f60a; 座右铭&#xff1a;不…

动态规划练习一

一、动态规划基本思路 1、状态表示&#xff1a;dp[i]的含义是什么 在一维数组中一般是“以 i 位置为结尾 / 起点....” 2、状态转移方程&#xff1a;dp[i]等于什么 一般是要根据最近的一步分情况进行讨论得出。 3、初始化dp表边界情况&#xff1a;保证在循环填表时不越界 …

80.【C语言】数据结构之时间复杂度

目录 1.数据结构的定义 2.算法的定义 3.算法的效率 1.衡量一个算法的好坏的方法 例题:计算以下代码的循环次数 2.大O的渐进表示法 练习1:求下列代码的时间复杂度 练习2:求下列代码的时间复杂度 练习3:求下列代码的时间复杂度 练习4:求下列代码的时间复杂度 4.总结:计…

9.存储过程安全性博客大纲(9/10)

存储过程安全性博客大纲 引言 在数据库系统中&#xff0c;存储过程是一种预先编写好的SQL代码集合&#xff0c;它被保存在数据库服务器上&#xff0c;可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句&#xff0c;如IF条件语句、WHILE循环等&#xff0c;使…

SpringBoot项目-Thymeleaf安装

SpringBoot项目-Thymeleaf安装 参考文章:SpringBoot 整合Thymeleaf教程及使用方法 参考视频:模板引擎Thymeleaf快速入门 其实,参考的文章和视频,他们丢失了一些细节,我搞的时候还是有错 第1步:pom.xml增加依赖 <!-- SpringBoot集成thymeleaf模板 --><depe

【数据服务篇】KML卫星波束覆盖数据:区域可视化利器

大纲 1.概述2.文件结构3.覆盖区域详细信息4.应用场景5.使用说明6.数据样例7.结语 1.概述 文件使用 KML&#xff08;Keyhole Markup Language&#xff09;格式&#xff0c;用于展示卫星在特定地区的波束覆盖情况&#xff0c;便于在地理信息系统&#xff08;GIS&#xff09;中进…

【Linux】命令行下的增删查改之“查看”

致谢:Linux常用命令大全(手册) – 真正好用的Linux命令在线查询网站 提供的命令查询 这一期部分介绍借用了网站内容. 头部内容获取(head) head命令的功能是显示文件开头的内容&#xff0c;默认值为前10行。 指令参数&#xff1a; -n 定义显示行数 -c 指定显示头部内容的…

麒麟信安CentOS安全加固案例获评中国信通院第三届“鼎新杯”数字化转型应用奖

“鼎新杯”数字化转型应用大赛&#xff0c;由中国通信标准化协会主办、中国信息通信研究院承办&#xff0c;以落实国家“十四五”规划关于“加快数字化发展&#xff0c;建设数字中国”的总体要求为目标&#xff0c;意在打造一批具有产业引领与推广应用效应的企业数字化转型应用…

深度学习中一些好的博客

pandas中的基本知识 假设我们的pf是一个pandas的结构 pf.column_namedf[‘column_name’]df.loc[:, ‘column_name’]df.iloc[:, column_index] 如果想将 pandas 中的数据转换为 NumPy 格式&#xff0c;你可以使用 .values 或 .to_numpy() 方法。 反向传播 想要有grad&…

安全、专属且高效:WorkPlus即时通讯平台引领高效协作新纪元

在信息和技术迅速发展的现代社会&#xff0c;企业的工作方式正发生深刻的变革。随着全球化和数字化进程的加快&#xff0c;企业所面临的沟通与协调挑战也愈发明显。传统的沟通方式已无法适应快速发展的市场需求&#xff0c;企业迫切需要一种既安全又高效的即时通讯工具&#xf…

Unity 从零开始搭建一套简单易用的UGUI小框架 基础分析篇

一套UGUI的小框架用一篇文章显然是不够的&#xff0c;因为会很长很长大约有上万字&#xff0c;想必读者也没有那个耐心一点点读完&#xff08;主要是我也懒&#xff09;&#xff0c;所以我就将其分为三个部分 基础分析篇 功能撰写与优化篇 扩展与总结篇 我将其都放在了同一个专…

Opencv之读取图片

目录 安装opencv读取彩色图片显示图片读取灰度图片结论 安装opencv pip install opencv-python读取彩色图片 使用OpenCV库读取彩色图片&#xff0c;其格式默认为BGR。 下面的代码展示了如何读取一张名为bg.jpg的彩色图片&#xff0c;并获取其相关信息。 import cv2# 读取彩…

Brave编译指南2024 Linux篇-构建与运行(七)

引言 在完成了构建环境的初始化后&#xff0c;我们终于可以开始编译Brave浏览器了。本文将详细介绍如何构建Brave浏览器&#xff0c;以及如何运行编译好的浏览器。 1.编译Brave浏览器 1.1 构建 使用下面的命令进行发布构建 npm run build 这个命令会触发一系列的编译过程…

【pyspark学习从入门到精通5】弹性分布式数据集_3

目录 Actions .take(...) 方法 .collect(...) 方法 .reduce(...) 方法 .count(...) 方法 .saveAsTextFile(...) 方法 .foreach(...) 方法 Actions 与转换不同&#xff0c;动作是在数据集上执行计划任务的&#xff1b;一旦您完成了数据的转换&#xff0c;就可以执行您的转…