【HMM】Hidden Markov Model

文章目录

  • 1 HMM 的概念
    • 1.1 引入
      • 1.1.1 Markov property
      • 1.1.2 Markov chain
      • 1.1.3 一阶离散马尔可夫模型
    • 1.2 HMM 的定义
    • 1.3 观测序列的生成过程
    • 1.4 HMM 的 3 个基本问题
  • 2 三个基本问题的解法
    • 2.1 概率计算算法
      • 2.1.1 直接计算法
      • 2.1.2 向前算法
      • 2.1.3 向后算法
      • 2.1.4 一些概率与期望值的计算
    • 2.2 学习算法
    • 2.3 预测算法

来自《统计学习方法》—李航


隐马尔可夫模型(Hidden Markov Model,HMM)是可用于标注问题(tagging,给定观测的序列预测其对应的标记序列)的统计学模型,描述由隐藏的马尔科夫链随机生成观测序列的过程,属于生成模型。HMM 在语音识别、自然语言处理、生物信息、模式识别等领域有着广泛的应用。

输入变量与输出变量均为连续变量的预测问题称为回归问题;
输出变量为有限个离散变量的预测问题称为分类问题;
输入变量与输出变量均为变量序列的预测问题称为标注问题。

1 HMM 的概念

1.1 引入

这里写图片描述

马尔可夫模型的观测序列本身就是状态序列;
隐马尔可夫模型的观测序列不是状态序列

1.1.1 Markov property

如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程。
X ( t + 1 ) = f ( X ( t ) ) X(t+1) = f(X(t)) X(t+1)=f(X(t))

1.1.2 Markov chain

时间状态都离散的马尔可夫过程称为马尔可夫链

几种典型形状的马尔可夫链

这里写图片描述

  • (a). 状态转义概率组成的A矩阵没有零值的Markov链
  • (b). A矩阵有零值的Markov链
  • (c./d). 左-右形式的Markov链

Probabilistic Graphical Model

1.1.3 一阶离散马尔可夫模型

在这里插入图片描述

  • N N N 个状态, S 1 S_1 S1, S 2 S_2 S2 S N S_N SN
  • 存在一个离散的时间序列 t = 0 , t = 1 … … t=0,t=1…… t=0,t=1……
  • 在每个时刻t,系统只能处于唯一一个状态 q t q_t qt
  • 下一个时刻所处的状态是随机出现的
  • 当前状态 q t q_t qt 只与前面相邻的一个状态 q t − 1 q_{t-1} qt1 有关,与其他状态无关(日光族,积蓄什么的,不存在的)

P [ q t = j ∣ q t − 1 = i , q t − 1 = k ] = P [ q t = j ∣ q t − 1 = i ] P[q_t = j | q_{t-1} = i, q_{t-1} = k] = P[q_t = j | q_{t-1} = i] P[qt=jqt1=i,qt1=k]=P[qt=jqt1=i]

1.2 HMM 的定义

HMM 是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列(state sequence),再由各个状态生成一个观测而产生观测随机序列(观测序列,observation sequence)的过程。

序列的每一个位置又可以看作是一个时刻。

HMM 由初始概率分布状态转移概率分布以及观测概率分布确定,定义如下:

  • Q Q Q 是所有可能的状态的集合 V V V 是所有可能的观测的集合

Q = { q 1 , q 2 , . . . , q N } , V = { v 1 , v 2 , . . . , v M } Q = \{q_1,q_2,...,q_N\},V = \{v_1,v_2,...,v_M\} Q={q1,q2,...,qN}V={v1,v2,...,vM}

其中, N N N 是可能的状态数, M M M 是可能的观测数

  • I I I 是长度为 T T T状态序列 O O O 是对应的观测序列
    I = ( i 1 , i 2 , . . . , i T ) , O = ( o 1 , o 2 , . . . , o T ) I = (i_1,i_2,...,i_T),O = (o_1,o_2,...,o_T) I=(i1,i2,...,iT)O=(o1,o2,...,oT)

  • A A A状态转移概率矩阵

A = [ a i j ] N × N A = [a_{ij}]_{N \times N} A=[aij]N×N

其中,

a i j = P ( i t + 1 = q j ∣ i t = q i ) , i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , N a_{ij} = P(i_{t+1} = q_j|i_t = q_i), i = 1,2,...,N; j = 1,2,...,N aij=P(it+1=qjit=qi),i=1,2,...,N;j=1,2,...,N

是在时刻 t t t 处于状态 q i q_i qi 条件下在时刻 t + 1 t+1 t+1 转移到状态 q j q_j qj 的概率。

  • B B B观测概率矩阵

B = [ b j ( k ) ] N × M B = [b_j(k)]_{N \times M} B=[bj(k)]N×M

其中,

b j ( k ) = P ( o t = v k ∣ i t = q j ) , k = 1 , 2 , . . . , M ; j = 1 , 2 , . . . , N b_j(k) = P(o_t = v_k | i_t = q_j), k=1,2,...,M;j = 1,2,...,N bj(k)=P(ot=vkit=qj),k=1,2,...,M;j=1,2,...,N
是在时刻 t t t 处于状态 q j q_j qj 的条件下生成观测 v k v_k vk 的概率。

  • π \pi π初始状态概率向量

π = ( π i ) \pi = (\pi_i) π=(πi)

其中,

π = P ( i 1 = q i ) , i = 1 , 2 , . . . , N \pi = P(i_1 = q_i),i=1,2,...,N π=P(i1=qi),i=1,2,...,N

是时刻 t = 1 t=1 t=1 处于状态 q i q_i qi 的概率。


HMM 由初始状态概率向量 π \pi π状态转移概率矩阵 A A A观测概率矩阵 B B B 决定。 π \pi π A A A 决定状态序列, B B B 决定观测序列。因此 HMM λ \lambda λ 可用如下的三元符号表示:

λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π)

A , B , π A,B,\pi A,B,π 称为 HMM 的三要素。

状态转移概率矩阵 A A A 与初始状态概率向量 π \pi π 确定了隐藏的马尔可夫链,生成不可观测的状态序列。观测概率矩阵 B B B 确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列

我们仔细分析下有效参数量

  • π ∈ R N \pi \in \mathbb{R}^{N} πRN,有效参数量为 N − 1 N-1 N1,因为所有初始状态概率的和要求为 1
  • A ∈ R N × N A \in \mathbb{R}^{N \times N} ARN×N,有效参数量为 N × N − N N×N-N N×NN,因为每行的概率的和要求为 1
  • B ∈ R N × M B \in \mathbb{R}^{N \times M} BRN×M,有效参数量为 N × M − N N×M-N N×MN,因为每行的概率的和要求为 1

从定义可知,HMM 作了两个基本假设:

  • 齐次马尔可夫性假设,即假设隐藏的马尔可夫链在任意时刻 t t t 的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻 t t t 无关。
  • 观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔可夫链的状态,与其他观测及状态无关。

P ( o t ∣ i r , o r , i T − 1 , o T − 1 , . . . , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , . . . . , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_r,o_r,i_{T-1},o_{T-1},...,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},....,i_1,o_1) = P(o_t | i_t) P(otir,or,iT1,oT1,...,it+1,ot+1,it,it1,ot1,....,i1,o1)=P(otit)

HMM 可以用于标注(tagging),这时状态对应着标记,标注问题是给定观测的序列预测其对应的标记序列(反向操作)。可以假设标注问题的数据是由 HMM 生成的,这样我们可以利用 HMM 的学习和预测算法进行标注。


下面看一个 HMM 的例子。

盒子和球模型)假设有 4 个盒子,每个盒子里都装有红白两种颜色的球,盒子里红白数如下表所示:

盒子1234
红球数5368
白球数5742

按照下面的方法抽球,产生一个球的颜色的观测序列:开始,从 4 个盒子里以等概率随机选取 1 个盒子,从这个盒子里随机抽出 1 个球,记录其颜色后,放回;然后,从当前盒子随机转移到下一个盒子,规则是:如果当前盒子是盒子 1,那么下一盒子一定是盒子 2,如果当前是盒子 2 或 3,那么分别以概率 0.4 和 0.6 转移到左边或右边的盒子,如果当前是盒子 4,那么各以 0.5 的概率停留在盒子 4 或转移到盒子 3;确定转移的盒子后,再从这个盒子里随机抽出一歌球,记录其颜色,放回去;如此下去重复 4 次,得到一个球的颜色的观测序列

O = { 红,红,白,白,红 } O = \{红,红,白,白,红\} O={红,红,白,白,红}

在这里插入图片描述
在这个过程中,观察者只能观测到球的颜色的序列,观测不到球是从哪个盒子取出的,即观测不到盒子的序列(状态序列)。

在这个例子中有两个随机序列,一个是盒子的序列(状态序列),一个是球的颜色的观测序列(观测序列)。前者是隐藏的,只有后者是可观测的。这是一个 HMM 的例子,根据所给条件,可以明确状态集合、观测集合、序列长度以及模型的三要素。

  • 盒子对应状态,状态的集合是
    Q = { 盒子 1 ,盒子 2 ,盒子 3 ,盒子 4 } Q =\{盒子1,盒子2,盒子3,盒子4\} Q={盒子1,盒子2,盒子3,盒子4}

  • 球的颜色对应观测,观测的集合是

V = { 红,白 } , M = 2 V = \{红,白\},M=2 V={红,白},M=2

  • 状态序列观测序列长度 T = 5 T=5 T=5

  • 初始概率分布 π \pi π

π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T \pi = (0.25,0.25,0.25,0.25)^T π=(0.25,0.25,0.25,0.25)T

  • 状态转移概率分布 A A A

A = [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] A = \begin{bmatrix} 0& 1& 0& 0\\ 0.4& 0& 0.6& 0\\ 0& 0.4& 0& 0.6\\ 0& 0& 0.5& 0.5 \end{bmatrix} A= 00.400100.4000.600.5000.60.5

  • 观测概率分布 B B B

B = [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] B = \begin{bmatrix} 0.5 & 0.5\\ 0.3 & 0.7\\ 0.6 & 0.4\\ 0.8 & 0.2 \end{bmatrix} B= 0.50.30.60.80.50.70.40.2

1.3 观测序列的生成过程

根据 HMM 定义,可以将一个长度为 T T T 的观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的生成过程描述如下:

输入: HMM λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π),观测序列长度 T T T
输出: 观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)

(1)按照初始状态分布 π \pi π 产生状态 i 1 i_1 i1
(2)令 t = 1 t=1 t=1
(3)按照状态 i t i_t it 的观测概率分布 b i t ( k ) b_{i_t}(k) bit(k) 生成 o t o_t ot
(4)按照状态 i t i_t it 的状态转移概率分布 { a i t , i t + 1 a_{i_t,i_{t+1}} ait,it+1}, i t + 1 = 1 , 2 , . . . , N i_{t+1} = 1,2,...,N it+1=1,2,...,N
(5)令 t = t + 1 t = t+1 t=t+1;如果 t < T t<T t<T,转步(3);否则,终止

1.4 HMM 的 3 个基本问题

HMM 有三个基本问题:

(1)概率计算问题(评估问题,求观测序列出现的概率)。给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

(2)学习问题(求HMM模型参数)。已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),估计模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 参数,使得在该模型下观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 最大。即用极大似然估计的方法估计参数。

(3)预测问题(求状态序列),也称解码(decoding)问题。已经模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),求给定观测序列条件概率 P ( I ∣ O ) P(I|O) P(IO) 最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT)。即给定观测序列,求最有可能的对应的状态序列。

下面用一个例子,来形象化上面三个问题

赌场的欺诈

在这里插入图片描述
在这里插入图片描述

某赌场在投骰子根据点数决定胜负时,暗中采取了如下作弊手段,在连续多次投骰子的过程中,通常使用公平骰子 S 1 S_1 S1,偶尔混进一个灌铅骰子 S 2 S_2 S2

公平骰子 S 1 S_1 S1 和灌铅骰子 S 2 S_2 S2 的区别如下:

骰子 S 1 S_1 S1骰子 S 2 S_2 S2
1 1 11/60
2 2 21/61/8
3 3 31/61/8
4 4 41/63/16
5 5 51/63/16
6 6 61/63/8

一次连续投骰子的过程模拟如下:

时间1234567
骰子 S 1 S_1 S1 S 1 S_1 S1 S 1 S_1 S1 S 2 S_2 S2 S 1 S_1 S1 S 1 S_1 S1 S 1 S_1 S1
投出点数3345162

上表中,第二列“骰子”相当于状态序列(隐序列),第三列“投出点数”相当于观测序列(明序列)

问题1—概率计算问题(评估问题)

  • 一个骰子投出的点数记录为,131452,会出现这个点数记录的概率有多大

问题2—学习问题(似然估计)

  • 一个骰子投出的点数记录为,131452,作弊骰子投出各点数的概率是怎么样?公平骰子投出各点数的概率又是怎么样的?赌场是何时换用骰子的(转换概率如何)?——从大量的点数序列样本中学习得出

问题3—预测问题(解码问题)

  • 一个骰子投出的点数记录为,131452,点数序列中的哪些点数是用骰子 S 2 S2 S2 投出的?

2 三个基本问题的解法

2.1 概率计算算法

概率计算问题(评估问题,求观测序列出现的概率)。给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

一个骰子投出的点数记录为,131452,会出现这个点数记录的概率有多大

本小节介绍计算观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 的向前(forward)与向后(backward)算法。先介绍概念上可行但计算上不可行的直接计算法。

2.1.1 直接计算法

给定模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π) 和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT),计算在模型 λ \lambda λ 下观测序列 O O O 出现的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ)。最直接的方法是按概率公式直接计算。通过列举所有可能的长度为 T T T 的状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT),求各个状态序列 I I I 与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的联合概率 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,Iλ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O|\lambda) P(Oλ)

状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT) 的概率是

P ( I ∣ λ ) = π i 1 a i 1 i 2 a i 2 i 3 . . . a i T − 1 i T P(I|\lambda) = \pi_{i_1}a_{i_1i_2}a_{i_2i_3}...a_{i_{T-1}i_T} P(Iλ)=πi1ai1i2ai2i3...aiT1iT

对固定的状态序列 I = ( i 1 , i 2 , . . . , i T ) I = (i_1,i_2,...,i_T) I=(i1,i2,...,iT),观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT) 的概率是 P ( O ∣ I , λ ) P(O|I,\lambda) P(OI,λ)

P ( O ∣ I , λ ) = b i 1 ( o 1 ) b i 2 ( o 2 ) . . . b i T ( o T ) P(O|I,\lambda) = b_{i_1}(o_1)b_{i_2}(o_2)...b_{i_T}(o_T) P(OI,λ)=bi1(o1)bi2(o2)...biT(oT)

O O O I I I 同时出现的联合概率为

P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) . . . a i T − 1 i T b i T ( o T ) P(O,I|\lambda) = P(O|I,\lambda)P(I|\lambda)=\pi_{i_1} b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(O,Iλ)=P(OI,λ)P(Iλ)=πi1bi1(o1)ai1i2bi2(o2)...aiT1iTbiT(oT)

然后,对所有可能的状态序列 I I I 求和,得到观测序列 O O O 的概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ),也即

P ( O ∣ λ ) = ∑ I P ( O , I ∣ λ ) = ∑ i 1 , i 2 , . . . , i T π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) . . . a i T − 1 i T b i T ( o T ) P(O|\lambda) = \sum_IP(O,I|\lambda) = \sum_{i_1,i_2,...,i_T}\pi_{i_1} b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)...a_{i_{T-1}i_T}b_{i_T}(o_T) P(Oλ)=IP(O,Iλ)=i1,i2,...,iTπi1bi1(o1)ai1i2bi2(o2)...aiT1iTbiT(oT)

但是,上面公式的计算量很大,是 O ( T N T ) O(TN^T) O(TNT) 阶的( I I I 的所有排列组合是 T ! T! T!,采用递归方式计算的话,复杂度是 T T T,序列长度 T T T,每个位置 N N N 种情况,也就是 N T N^T NT),这种算法不可行!下面介绍计算观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(Oλ) 的有效算法,前向-后向算法(forward-backward algorithm)

未完待续。。。

2.1.2 向前算法

2.1.3 向后算法

2.1.4 一些概率与期望值的计算

2.2 学习算法

2.3 预测算法

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

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

相关文章

localhost与127.0.0.1的区别 竟然还有人不知道?

localhost和127.0.0.1有什么区别&#xff1f;   很多用户都有接触过回送地址127.0.0.1用来测试一些数据&#xff0c;localhost在严格意义上来说是一个本地的服务器&#xff0c;编程用户或许更了解localhost的存在意义。   大多数使用localhost的编程工作者&#xff0c;实际…

java.lang.NoSuchFieldError: ASSIGN_ID

一、写在前面 很多时候我们都会遇到这个异常&#xff0c;我的场景是与mybatis有关&#xff0c;若看客不是此类情形&#xff0c;仅做参考即可。 二、异常提示 Caused by: java.lang.NoSuchFieldError: ASSIGN_IDat com.baomidou.mybatisplus.core.config.GlobalConfig$DbConf…

基于cifar-10的图像分类

一、 背景 CIFAR-10 数据集由 10 类中的 60000 张 32x32 彩色图像组成&#xff0c;每类 6000 张图像。有 50000 张训练图像和 10000 张测试图像。数据集分为五个训练批次和一个测试批次&#xff0c;每个批次有 10000 张图像。测试批次包含来自每个类的 1000 个随机选择的图像。…

国创证券|新手建议不要买哪些股票?新手股票避雷!

出资者在进行股票生意之前&#xff0c;对股票的选择也是一种很重要的环节&#xff0c;特别是对于新手出资者来说&#xff0c;很简单踩雷。那么新手主张不要买哪些股票&#xff1f;下面就由国创证券为我们分析&#xff1a; 新手主张不要买哪些股票&#xff1f; 1、业绩差的股票…

[LeetCode][LCR170]交易逆序对的总数

题目 LCR 170. 交易逆序对的总数 在股票交易中&#xff0c;如果前一天的股价高于后一天的股价&#xff0c;则可以认为存在一个「交易逆序对」。请设计一个程序&#xff0c;输入一段时间内的股票交易记录 record&#xff0c;返回其中存在的「交易逆序对」总数。 示例 1&#xf…

ABAQUS应用05——将开发好的Python封装起来供后续开发调用

闲话不多说&#xff0c;把写好的py文档放置在这里调用即可。 放置进来以后&#xff0c;会自动形成同名的pyc文件。有意思的是&#xff0c;此时将py文件和pyc文件删掉都不会影响建模&#xff0c;但是关掉ABAQUS再打开就会找不到。不过我想如果保留pyc文件的话应该不成问题。当…

AI - 机器学习GBDT算法

目录 GBDT 提升树 梯度提升树 GBDT算法实战案例 XGBoost &#x1f606;&#x1f606;&#x1f606;感谢大家的观看&#x1f606;&#x1f606; GBDT 梯度提升决策树&#xff08;Gradient Boosting Decision Tree&#xff09;&#xff0c;是一种集成学习的算法&…

web前端之多种方式实现switch滑块功能、动态设置css变量、after伪元素、选择器、has伪类

MENU 效果图htmlcsshtmlcssJS 效果图 htmlcss html <div class"s"><input type"checkbox" id"si" class"si"><label for"si" class"sl"></label> </div>style * {margin: 0;pad…

vue-admin-template极简的 vue admin 管理后台的动态路由实现方法

项目源码地址&#xff1a;GitHub - PanJiaChen/vue-admin-template: a vue2.0 minimal admin template 注意&#xff1a;项目中的路由均写在 src\router\index.js 中&#xff0c;其中默认包含 constantRoutes 数组&#xff0c;这是固定路由&#xff0c;无论用户是什么角色&…

基于PostgreSQL的无代码数据库Teable

什么是 Teable &#xff1f; Teable 是一个基于 Postgres 构建的超快速、实时、专业、开发人员友好的无代码数据库。它使用简单的、类似电子表格的界面来创建复杂的企业级数据库应用程序。通过无代码解锁高效的应用程序开发&#xff0c;摆脱数据安全性和可扩展性的障碍。 下面&…

JAVA EE (计算机是如何工作的)

学前注意事项 出去面试的时候java岗位不需要懂前端&#xff08;会少量讲解&#xff09; 但是我们做项目的时候多少回用到一些前端的东西 1.什么是计算机 1.1前情提要 不仅仅只有电脑是计算机 计算机还不仅仅是电脑手机和平板 路由器 智能洗衣机 刷脸打卡机都可以说是计算…

【机器学习-06】线性回归(LinearRegression)的手动建模实验

在此前的两节课程中&#xff0c;我们已经介绍了关于线性回归模型的基本概念&#xff0c;并且介绍了一个多元线性回归的损失函数求解方法——最小二乘法。在有了这一些列理论推导之后&#xff0c;本节我们将结合【机器学习-01】机器学习一般建模流程&#xff0c;并首先尝试在一个…

2024.3.9|第十五届蓝桥杯模拟赛(第三期)

2024.3.9|十五届蓝桥杯模拟赛&#xff08;第三期&#xff09; 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第八题 第九题 第十题 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&…

ubuntu20.04_PX4_1.13

说在前面&#xff1a;&#xff08;最好找一个干净的Ubuntu系统&#xff09;如果配置环境的过程中出现很多编译的错误或者依赖冲突&#xff0c;还是建议新建一个虚拟机&#xff0c;或者重装Ubuntu系统&#xff0c;这样会避免很多麻烦&#x1f490; &#xff0c; 安装PX4 1.13.2 …

SpringCloud Gateway工作流程

Spring Cloud Gateway的工作流程 具体的流程&#xff1a; 用户发送请求到网关 请求断言&#xff0c;用户请求到达网关后&#xff0c;由Gateway Handler Mapping&#xff08;网关处理器映射&#xff09;进行Predicates&#xff08;断言&#xff09;&#xff0c;看一下哪一个符合…

室友打团太吵?一条命令断掉它的WiFi

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;更多干货&#xff0c;请关注专栏《网络安全自学教程》 ARP欺骗原理 1、arpspoof实现ARP欺骗1.1、主机探测1.2、欺骗…

深入理解Java并发工具包中的CyclicBarrier

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java的并发编程世界中&#xff0c;协调和管理多个线程的执行是一项复杂而关键的任务。为了简化这一挑战&#xff0c;Java并发包…

GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

ubuntu 如何使用阿里云盘

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

算法---二分查找练习-2(寻找旋转排序数组中的最小值)

寻找旋转排序数组中的最小值 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;点这里 2. 讲解算法原理 首先&#xff0c;检查数组的最后一个元素是否大于第一个元素。如果是&#xff0c;说明数组没有进行旋转&#xff0c;直接返回第一个元素作为最小值…
最新文章