【白话机器学习的数学】读书笔记(3)学习分类(感知机、逻辑回归)

news2024/11/27 21:40:03

三、学习分类

1.分类的目的

在这里插入图片描述

找到一条线把白点和黑点分开。这条直线是使权重向量成为法线向量的直线。(解释见下图)

直线的表达式为:
ω ⋅ x = ∑ i = 1 n ω i ⋅ x i = 0 \omega·x = \sum_{i=1}^n\omega_i · x_i = 0 ωx=i=1nωixi=0

  • ω \omega ω是权重向量
  • 权重向量就是我们想要知道的未知参数
  • 他和回归中的 θ \theta θ是一样的

举个例子:
ω ⋅ x = ( 1 , 1 ) ⋅ ( x 1 , x 2 ) = ω 1 ⋅ x 1 + ω 2 ⋅ x 2 = x 1 + x 2 = 0 \omega·x = (1,1)·(x_1,x_2) = \omega_1·x_1 + \omega_2·x_2 = x_1 + x_2 = 0 ωx=(1,1)(x1,x2)=ω1x1+ω2x2=x1+x2=0
对应的图像:
在这里插入图片描述

权重向量和这条直线是垂直的。

2.感知机

1定义

将权重向量用作参数,创建更新表达式来更新参数。基本做法是和回归相同的,感知机是接受多个输入后将每个值与各自的权重相乘,最后输出总和的模型。

感知机的表示:
在这里插入图片描述

2判别函数

在这里插入图片描述

根据参数向量 x 来判断图像是横向还是纵向的函数,即返回 1 或者 −1 的函数 f w ( x ) f_w(x) fw(x)的定义如下。这个函数被称为判别函数
f ω = ​ {   1 ,      ( ω ⋅ x ≥ 0 ) − 1 ,    ( ω ⋅ x < 0 ) f_\omega= ​\begin{cases}~1,~~~~(\omega·x\ge0) \\-1,~~(\omega·x\lt0)\end{cases} fω={ 1,    (ωx0)1,  (ωx<0)
其实, ω ⋅ x \omega · x ωx还可以写成 ω ⋅ x = ∣ ω ∣ ⋅ ∣ x ∣ ⋅ cos ⁡ θ \omega · x = |\omega| ·| x|·\cos \theta ωx=ωxcosθ,那么我们可以推断出 ω ⋅ x \omega · x ωx的正负只跟 θ \theta θ有关系。

向量与权重向量 ω \omega ω之间的夹角为 θ,在 90°<θ< 270° cos ⁡ θ \cos \theta cosθ为负,所以在 90°<θ< 270°范围内的所有向量都满足内积为负。

在这里插入图片描述

3权重向量的更新表达式

ω : = { ω + y ( i ) x ( i ) ,     f ω ( x ( i ) ) ≠ y ( i ) ω ,                     f ω ( x ( i ) ) = y ( i ) \omega:= \begin{cases} \omega + y^{(i)}x^{(i)},~~~f_\omega(x^{(i)})\ne y^{(i)} \\ \omega,~~~~~~~~~~~~~~~~~~~f_\omega(x^{(i)}) = y^{(i)} \end{cases} ω:={ω+y(i)x(i),   fω(x(i))=y(i)ω,                   fω(x(i))=y(i)

  • i指的是训练数据的索引,也就是第i个训练数据的意思
  • f ω ( x ( i ) ) = y ( i ) f_\omega(x^{(i)}) = y^{(i)} fω(x(i))=y(i)时说明判别函数的分类结果是准确的,此时不用更新 ω \omega ω
  • f ω ( x ( i ) ) ≠ y ( i ) f_\omega(x^{(i)})\ne y^{(i)} fω(x(i))=y(i)时说明判别函数的分类结果不正确,此时需要更新表达式

下面来解释为什么 f ω ( x ( i ) ) ≠ y ( i ) f_\omega(x^{(i)})\ne y^{(i)} fω(x(i))=y(i)时需要更新表达式
在这里插入图片描述

现在权重向量 ω \omega ω 和训练数据的向量 x ( 1 ) x^{(1)} x(1)二者的方向几乎相反, ω \omega ω x ( 1 ) x^{(1)} x(1)之间的夹角 θ 的范围是 90◦ <θ< 270◦ ,内积为负。
也就是说,判别函数 f ω ( x ( 1 ) ) f_\omega(x^{(1)}) fω(x(1))的结果为 −1。

在这里插入图片描述

f ω ( x ( 1 ) ) ≠ y ( 1 ) f_\omega(x^{(1)}) \ne y^{(1)} fω(x(1))=y(1),说明分类失败。

更新: 由于 y ( 1 ) = 1 ,故 ω + y ( 1 ) x ( 1 ) = ω + x ( 1 ) 由于y^{(1)} = 1,故\omega + y^{(1)}x^{(1)} = \omega + x^{(1)} 由于y(1)=1,故ω+y(1)x(1)=ω+x(1)

图像的变化更明显一些:

在这里插入图片描述

这个 ω + x ( 1 ) \omega + x^{(1)} ω+x(1)就是下一个新的 ω \omega ω,相当于把原来的线旋转了一下。

刚才处理的是标签值 y = 1 的情况,而对于 y = −1 的情况,只是更新表达式的向量加法变成了减法。本质的做法都是在分类
失败时更新权重向量,使得直线旋转相应的角度。这样重复更新所有的参数,就是感知机的学习方法。

4感知机的缺点

只能解决线性可分的问题。线性可分指的就是能够使用直线分类的情况。

之前提到的感知机也被称为简单感知机或单层感知机,是很弱的模型。既然有单层感知机,那么就会有多层感知机。实际上多层感知机就是神经网络

3.逻辑回归

与感知机的不同之处在于,它是把分类作为概率来考虑的,举个例子,x是横向的概率是80%,而感知机的结果是A是横向。然后判别函数的两个值设置为0和1。
f ω = ​ { 1 ,     ( ω ⋅ x ≥ 0 ) 0 ,     ( ω ⋅ x < 0 ) f_\omega= ​\begin{cases}1,~~~(\omega·x\ge0) \\0,~~~(\omega·x\lt0)\end{cases} fω={1,   (ωx0)0,   (ωx<0)

1 Sigmoid函数

能够将未知数据分类为某个类别的函数 f θ ( x ) f_\theta(x) fθ(x) ,类似感知机的判别函数 f ω ( x ) f_\omega(x) fω(x),在这里我们把 f θ ( x ) f_\theta(x) fθ(x)当作概率,对应的前面举的横向的例子。 f θ ( x ) = 80 % f_\theta(x) = 80\% fθ(x)=80% 表示的就是x是横向图像的概率是80%。
f θ ( x ) = 1 1 + e ( − θ T x ) f_\theta(x) = \frac{1}{1+e^{(-\theta^Tx)}} fθ(x)=1+e(θTx)1
函数图像

在这里插入图片描述

两个特征

  • θ T x = 0 \theta^Tx = 0 θTx=0时, f θ ( x ) = 0.5 f_\theta(x) = 0.5 fθ(x)=0.5
  • 0 < f θ ( x ) ≤ 1 0\lt f_\theta(x)\le1 0<fθ(x)1
2 决策边界

f θ ( x ) f_\theta(x) fθ(x)当作概率,我们还可以有另一种等价的表达式
f θ ( x ) = P ( y = 1 ∣ x ) f_\theta(x) = P(y=1|x) fθ(x)=P(y=1∣x)
P ( y = 1 ∣ x ) P(y=1|x) P(y=1∣x)表示给出x数据时y=1的概率

假如 f θ ( x ) = 0.7 f_\theta(x) = 0.7 fθ(x)=0.7,我们会把x分类为横向。 f θ ( x ) = 0.2 f_\theta(x) = 0.2 fθ(x)=0.2,横向的概率为20%,纵向的概率为80%,这种状态可以分类为纵向。这里我们就是以0.5为阈值,然后把$f_\theta(x) $的结果与其比较,从而得到分类的结果。

即你的分类表达式为:
y = ​ { 1 ,     ( f θ ( x ) ≥ 0.5 ) 0 ,     ( f θ ( x ) < 0.5 ) y= ​\begin{cases}1,~~~(f_\theta(x)\ge0.5) \\0,~~~(f_\theta(x)\lt0.5)\end{cases} y={1,   (fθ(x)0.5)0,   (fθ(x)<0.5)
从图像中可以看出 f θ ( x ) ≥ 0.5 f_\theta(x) \ge 0.5 fθ(x)0.5时, θ T x ≥ 0 \theta^Tx\ge0 θTx0,反之。

所以分类表达式可以写成:
y = ​ { 1 ,     ( θ T x ≥ 0 ) 0 ,     ( θ T x < 0 ) y= ​\begin{cases}1,~~~(\theta^Tx\ge0) \\0,~~~(\theta^Tx\lt0)\end{cases} y={1,   (θTx0)0,   (θTx<0)
假设有一个训练数据为
θ = [ θ 0 θ 1 θ 2 ] = [ − 100 2 1 ] , x = [ 1 x 1 x 2 ] (2) \theta = \begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \end{bmatrix} \tag{2} = \begin{bmatrix} -100\\2\\1 \end{bmatrix} , x = \begin{bmatrix} 1\\x_1\\x_2 \end{bmatrix} θ= θ0θ1θ2 = 10021 ,x= 1x1x2 (2)
所以
θ T x = − 100 ⋅ 1 + 2 x 1 + x 2 ≥ 0 → x 2 ≥ − 2 x 2 + 100 \theta^Tx = -100\cdot1+2x_1+x_2\ge0 \to x_2\ge -2x_2+100 θTx=1001+2x1+x20x22x2+100
对应的图像为

在这里插入图片描述

θ T x = 0 \theta^Tx = 0 θTx=0 这条直线作为边界线,就可以把这条线两侧的数据分类为横向和纵向

这样用于数据分类的直线称为决策边界

然后的做法和回归一样,为了求得正确的参数 θ 而定义目标函数,进行微分,然后求出参数的更新表达式。

4.似然函数(解决逻辑回归中参数更新表达式问题)

P(y = 1|x) 是图像为横向的概率,P(y = 0|x) 是图像为纵向的概率

  • y = 1 的时候,我们希望概率 P(y = 1|x) 是最大的
  • y = 0 的时候,我们希望概率 P(y = 0|x) 是最大的

在这里插入图片描述

假定所有的训练数据都是互不影响、独立发生的,这种情况下整体的概率就可以用下面的联合概率来表示
L ( θ ) = P ( y ( 1 ) = 0 ∣ x ( 1 ) ) P ( y ( 2 ) = 0 ∣ x ( 2 ) ) ⋅ ⋅ ⋅ P ( y ( 6 ) = 1 ∣ x ( 6 ) ) L(θ) = P(y^{(1)} = 0 | x^{(1)})P(y^{(2)} = 0 | x^{(2)})··· P(y^{(6)} = 1 | x^{(6)}) L(θ)=P(y(1)=0∣x(1))P(y(2)=0∣x(2))⋅⋅⋅P(y(6)=1∣x(6))
将联合概率一般化:
L ( θ ) = ∏ i = 1 n P ( y ( i ) = 1 ∣ x ( i ) ) y ( i ) P ( y ( i ) = 0 ∣ x ( i ) ) 1 − y ( i ) L(θ) =\prod_{i=1}^n P(y^{(i)} = 1 | x^{(i)})^{y^{(i)}} P(y^{(i)} = 0 | x^{(i)})^{1−y^{(i)}} L(θ)=i=1nP(y(i)=1∣x(i))y(i)P(y(i)=0∣x(i))1y(i)
回归的时候处理的是误差,所以要最小化,而现在考虑的是联合概率,我们希望概率尽可能大,所以要最大化。这里的目标函数 L ( θ ) L(\theta) L(θ)也被称为似然,L就是Likelihood。

我们可以认为似然函数 L(θ) 中,使其值最大的参数 θ 能够最近似地说明训练数据

1.对数似然函数

直接对似然函数进行微分有点困难,在此之前要把函数变形。取似然函数的对数,在等式两边加上 log:
log ⁡ L ( θ ) = log ⁡ ∏ i = 1 n P ( y ( i ) = 1 ∣ x ( i ) ) y ( i ) P ( y ( i ) = 0 ∣ x ( i ) ) 1 − y ( i ) \log L(θ) = \log \prod_{i=1}^n P(y^{(i)} = 1 | x^{(i)})^{y^{(i)}} P(y^{(i)} = 0 | x^{(i)})^{1−y^{(i)}} logL(θ)=logi=1nP(y(i)=1∣x(i))y(i)P(y(i)=0∣x(i))1y(i)
然后进行变形:

在这里插入图片描述

最终得到:
log ⁡ L ( θ ) = ∑ i = 1 n [ y ( i ) log ⁡ f θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − f θ ( x ( i ) )   ) ] \log L(θ) = \sum_{i=1}^n \bigg [y^{(i)}\log f_\theta(x^{(i)})+ (1−y^{(i)})\log (1 - f_\theta(x^{(i)})~)\bigg] logL(θ)=i=1n[y(i)logfθ(x(i))+(1y(i))log(1fθ(x(i)) )]

2.似然函数的微分

逻辑回归就是要将这个对数似然函数用作目标函数:
log ⁡ L ( θ ) = ∑ i = 1 n [ y ( i ) log ⁡ f θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − f θ ( x ( i ) )   ) ] \log L(θ) = \sum_{i=1}^n \bigg [y^{(i)}\log f_\theta(x^{(i)})+ (1−y^{(i)})\log (1 - f_\theta(x^{(i)})~)\bigg] logL(θ)=i=1n[y(i)logfθ(x(i))+(1y(i))log(1fθ(x(i)) )]
接下来对每个参数 θ j \theta_j θj求微分:
∂ log ⁡ L ( θ ) ∂ θ j = ∂ ∂ θ j ∑ i = 1 n [ y ( i ) log ⁡ f θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − f θ ( x ( i ) )   ) ] \frac{\partial \log L(θ)}{\partial \theta_j} = \frac{\partial}{\partial \theta_j}\sum_{i=1}^n \bigg [y^{(i)}\log f_\theta(x^{(i)})+ (1−y^{(i)})\log (1 - f_\theta(x^{(i)})~)\bigg] θjlogL(θ)=θji=1n[y(i)logfθ(x(i))+(1y(i))log(1fθ(x(i)) )]
接下来的求解步骤和回归的也差不多:

1.改写成复合函数求微分

u = log ⁡ L ( θ ) v = f θ ( x ) ∂ u ∂ θ j = ∂ u ∂ v ⋅ ∂ v ∂ θ j u = \log L(\theta)\\ v = f_\theta(x)\\ \frac{\partial u}{\partial \theta_j} = \frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_j} u=logL(θ)v=fθ(x)θju=vuθjv

2.计算第一项 ∂ u ∂ v \frac{\partial u}{\partial v} vu

∂ u ∂ v = ∂ ∂ θ j ∑ i = 1 n [ y ( i ) log ⁡ ( v ) + ( 1 − y ( i ) ) log ⁡ ( 1 − v ) ] d log ⁡ ( v ) d v = 1 v ,    d log ⁡ ( 1 − v ) d v = − 1 1 − v ∂ u ∂ v = ∑ i = 1 n ( y ( i ) v − 1 − y ( i ) 1 − v ) \frac{\partial u}{\partial v} = \frac{\partial}{\partial \theta_j}\sum_{i=1}^n \bigg [y^{(i)}\log(v)+ (1−y^{(i)})\log (1 - v)\bigg]\\ \frac{d\log(v)}{dv} = \frac{1}{v} , ~~\frac{d\log(1-v)}{dv} = -\frac{1}{1-v}\\ \frac{\partial u}{\partial v} = \sum_{i=1}^n(\frac{y^{(i)}}{v} - \frac{1−y^{(i)}}{1-v}) vu=θji=1n[y(i)log(v)+(1y(i))log(1v)]dvdlog(v)=v1,  dvdlog(1v)=1v1vu=i=1n(vy(i)1v1y(i))

3.计算第二项 ∂ v ∂ θ j \frac{\partial v}{\partial \theta_j} θjv

∂ v ∂ θ j = ∂ ∂ θ j 1 1 + e − θ T x z = θ T x v = f θ ( x ) = 1 1 + e − z ∂ v ∂ θ j = ∂ v ∂ z ⋅ ∂ z ∂ θ j \frac{\partial v}{\partial \theta_j }= \frac{\partial }{\partial \theta_j }\frac{1}{1+e^{-\theta^Tx}}\\ z = θ^Tx\\ v = f_θ(x) = \frac{1}{1 + e^{−z}}\\ \frac{\partial v}{\partial \theta_j} = \frac{\partial v}{\partial z} \cdot \frac{\partial z}{\partial \theta_j} θjv=θj1+eθTx1z=θTxv=fθ(x)=1+ez1θjv=zvθjz

其中(过程可以手推一次):
∂ v ∂ z = v ( 1 − v ) ∂ z ∂ θ j = x j \frac{\partial v}{\partial z} = v(1-v)\\ \frac{\partial z}{\partial \theta_j} = x_j\\ zv=v(1v)θjz=xj
所以:
∂ v ∂ θ j = v ( 1 − v ) ⋅ x j \frac{\partial v}{\partial \theta_j} =v(1-v)\cdot x_j θjv=v(1v)xj

4.整合

∂ u ∂ θ j = ∂ u ∂ v ⋅ ∂ v ∂ θ j = ∑ i = 1 n ( y ( i ) v − 1 − y ( i ) 1 − v ) ⋅ v ( 1 − v ) ⋅ x j ( i ) = ∑ i = 1 n ( y ( i ) ( 1 − v ) − ( 1 − y ( i ) ) v ) x j ( i ) = ∑ i = 1 n ( y ( i ) − y ( i ) v − v + y ( i ) v ) x j ( i ) = ∑ i = 1 n ( y ( i ) − v ) x j ( i ) = ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) ) x j ( i ) \begin{aligned} \frac{\partial u}{\partial \theta_j} &= \frac{\partial u}{\partial v} \cdot \frac{\partial v}{\partial \theta_j} \\ &=\sum_{i=1}^n(\frac{y^{(i)}}{v} - \frac{1−y^{(i)}}{1-v})\cdot v(1-v)\cdot x_j^{(i)}\\ &=\sum_{i=1}^n\bigg(y^{(i)}(1-v) - (1−y^{(i)})v\bigg) x_j^{(i)}\\ &=\sum_{i=1}^n\bigg(y^{(i)} - y^{(i)}v - v + y^{(i)}v\bigg) x_j^{(i)}\\ &=\sum_{i=1}^n\bigg(y^{(i)} - v\bigg) x_j^{(i)}\\ &=\sum_{i=1}^n\bigg(y^{(i)} - f_θ(x^{(i)})\bigg) x_j^{(i)}\\ \end{aligned} θju=vuθjv=i=1n(vy(i)1v1y(i))v(1v)xj(i)=i=1n(y(i)(1v)(1y(i))v)xj(i)=i=1n(y(i)y(i)vv+y(i)v)xj(i)=i=1n(y(i)v)xj(i)=i=1n(y(i)fθ(x(i)))xj(i)

3.得到参数更新表达式

现在是以最大化为目标,所以必须按照与最小化时相反的方向移动参数,所以更新表达式中变成了+:
θ j : = θ j + η ∑ i = 1 n ( y ( i ) − f θ ( x ( i ) ) ) x j ( i ) \theta_j := \theta_j + \eta\sum_{i=1}^n\bigg(y^{(i)} - f_θ(x^{(i)})\bigg) x_j^{(i)} θj:=θj+ηi=1n(y(i)fθ(x(i)))xj(i)
当然也可以为了和回归的式子保持一致,这样的话 η \eta η后面括号里面的式子就要变号了:
θ j : = θ j − η ∑ i = 1 n ( f θ ( x ( i ) − y ( i ) ) ) x j ( i ) \theta_j := \theta_j - \eta\sum_{i=1}^n\bigg(f_θ(x^{(i)} - y^{(i)})\bigg) x_j^{(i)} θj:=θjηi=1n(fθ(x(i)y(i)))xj(i)

5.线性不可分

类似下图这样的,就是线性不可分:
在这里插入图片描述

直线不能分类,但曲线是可以将其分类的。所以我们可以像学习多项式回归那样去增加次数。即:
θ = [ θ 0 θ 1 θ 2 θ 3 ] , x = [ 1 x 1 x 2 x 1 2 ] (2) \theta = \begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \theta_3\\ \end{bmatrix} \tag{2} , x = \begin{bmatrix} 1\\x_1\\x_2\\x_1^2 \end{bmatrix} θ= θ0θ1θ2θ3 ,x= 1x1x2x12 (2)
所以:
θ T x = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 \theta^Tx = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1^2 θTx=θ0+θ1x1+θ2x2+θ3x12

举个例子:
θ = [ θ 0 θ 1 θ 2 θ 3 ] = [ 0 0 1 − 1 ] (2) \theta = \begin{bmatrix} \theta_0\\ \theta_1\\ \theta_2\\ \theta_3\\ \end{bmatrix} \tag{2} = \begin{bmatrix} 0\\ 0\\ 1\\ -1\\ \end{bmatrix} θ= θ0θ1θ2θ3 = 0011 (2)
所以:
θ T x = x 2 − x 1 2 ≥ 0 \theta^Tx = x_2 - x_1^2 \ge 0 θTx=x2x120
对应的图像:

在这里插入图片描述

根据图像我们也可以看出。前面的决策边界是直线,现在是曲线。这也就是逻辑回归应用于线性不可分问题的方法。

通过随意地增加次数,就可以得到复杂形状的决策边界。

同样,在逻辑回归的参数更新中也可以使用随机梯度下降法。

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

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

相关文章

IIS 缓存, 更新后前端资源不能更新问题

解决办法: 通常只需要index.html 不缓存即可, 其他文件都是根据index.html 中的引用去加载; 正确的做法是在 站点下增加 web.config 文件, 内容如下: 我这个是因为目录下有个config.js 配置文件, 也不能缓存, 所以加了两个 <?xml version"1.0" encoding&quo…

2018年认证杯SPSSPRO杯数学建模D题(第一阶段)投篮的最佳出手点全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 对于投篮最佳出手点的探究 D题 投篮的最佳出手点 原题再现&#xff1a; 影响投篮命中率的因素不仅仅有出手角度、球感、出手速度&#xff0c;还有出手点的选择。规范的投篮动作包含两膝微屈、重心落在两脚掌上、下肢蹬地发力、身体随之向前上…

迅为RK3588开发板编译 Buildroot单独编译图形化界面(打包镜像)

上面 Kernel/U-Boot/Recovery/Rootfs 各个部分的编译后&#xff0c;将打包要用到的所有固件移动到 rockdev 目录下&#xff0c;然后打包为完整的 update.img 镜像。 首先在 linux 源码目录下输入以下命令进入编译的 UI 界面&#xff0c;进入之后如下所示&#xff1a; ./buil…

nginx+lua配置,一个域名配置https,docker集群使用

没安装kua的先安装lua 没有resty.http模块的&#xff0c;许配置 nginxlua配置&#xff0c;一个域名配置https&#xff0c;docker集群使用&#xff0c;一个域名配置https管理整个集群 lua做转发&#xff08;方向代理&#xff09; 1、ad_load.lua文件 ngx.header.content_typ…

如何录制屏幕视频?让视频制作更简单!

随着数字化时代的来临&#xff0c;录制屏幕视频成为一种常见的传播和教学方式。无论是制作演示文稿、教学视频&#xff0c;还是记录游戏操作&#xff0c;屏幕录制为用户提供了强大而灵活的工具。可是您知道如何录制屏幕视频吗&#xff1f;本文将深入介绍两种常见的屏幕录制方法…

蓝桥杯备赛 day 3 —— 高精度(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 高精度的概念 &#x1f4c1; 高精度加法和其模板 &#x1f4c1; 高精度减法和其模板 &#x1f4c1; 高精度乘法和其模板 &#x1f4c1; 高精度除法和其模板 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文…

web开发学习笔记(8.java web后端开发基础知识)

1.使用spring开发的优势&#xff0c;spring发展到今天已经形成了一种开发生态圈&#xff0c;提供了若干个子项目&#xff0c;每个项目用于完成特定的功能。使用spring全家桶&#xff0c;可以做到很多事情&#xff0c;可以很方便的套用很多的组件。 2.pom构成 指定父工程 <p…

jeecgboot 前端bug or 后端 看图

无法显示文本 只能显示value 很恶心 如果用 varchar 就可以 不知道有没有别的方式 用int 解决 ,可能是我没有发现好的方法

尚无忧【无人共享空间 saas 系统源码】无人共享棋牌室系统源码共享自习室系统源码,共享茶室系统源码

可saas多开&#xff0c;非常方便&#xff0c;大大降低了上线成本 UNIAPPthinkphpmysql 独立开源&#xff01; 1、定位功能&#xff1a;可定位附近是否有店 2、能通过关键字搜索现有的店铺 3、个性轮播图展示&#xff0c;系统公告消息提醒 4、个性化功能展示&#xff0c;智能…

驱动开发--阻塞与非阻塞

一、五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞&#xff1a;不能操作就返回错误 多路复用&#xff1a;委托中介监控 信号驱动&#xff1a;让内核如果能操作时发信号&#xff0c;在信号处理函数中操作 异步IO&#xff1a;向内核注册操作请求&#xff…

助力工业焊缝质量检测,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建工业焊接场景下钢材管道焊缝质量检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《轻量级模型YOLOv5-Lite基于自己的数据集【焊接质量检测】从零构建模型超详细教程》 《基于DeepLabV3Pl…

5-微信小程序语法参考

1. 数据绑定 官网传送门 WXML 中的动态数据均来自对应 Page 的 data。 数据绑定使用 Mustache 语法&#xff08;双大括号&#xff09;将变量包起来 ts Page({data: {info: hello wechart!,msgList: [{ msg: hello }, { msg: wechart }]}, })WXML <view class"vie…

分类问题:人工神经网络(ANN)+BP算法(误差后向传播)+考试例题讲解

学习链接:分类问题:人工神经网络(ANN)+BP算法(误差后向传播)+考试例题讲解 资料链接:链接:https://pan.baidu.com/s/1ijvMQmwtRgLO4KDSsNODMw 提取码:vyok 神经网络的应用非常的广,它核心思想非常简单,就是人是如何认知感知并且处理这个世界中的现实问题的。…

【React】Redux的使用详解

文章目录 Redux的三大原则Redux官方图react-redux使用 1、创建store管理全局状态​ 2、在项目index.js根节点引用 3、 在需要使用redux的页面或者组件中&#xff0c;通过connect高阶组件映射到该组件的props中 redux中异步操作如何使用redux-thunkcombineReducers函数 Re…

[C#]winform部署官方yolov8-rtdetr目标检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 RTDETR&#xff0c;全称“Real-Time Detection with Transformer for Object Tracking and Detection”&#xff0c;是一种基于Transformer结构的实时目标检测和跟踪算法。它在目标检测和跟踪领域…

保证Kafka消息有序性

一、Kafka特性 写入同一个partion分区中的数据是一定有顺序的kafka中一个消费者消费一个partion的数据&#xff0c;消费者取出数据时&#xff0c;也是有顺序的 二、保证消息Kafka消息有序性 在生产者端&#xff0c;应保证消息被写入同一分区。可以在构造消息时指定消息的key…

Kafka-消费者-KafkaConsumer分析

与KafkaProducer不同的是&#xff0c;KafkaConsumer不是一个线程安全的类。 为了便于分析&#xff0c;我们认为下面介绍的所有操作都是在同一线程中完成的&#xff0c;所以不需要考虑锁的问题。 这种设计将实现多线程处理消息的逻辑转移到了调用KafkaConsumer的代码中&#x…

葡萄酒术语“干”是什么意思呢?

一个初学品酒的人常常会感到力不从心&#xff0c;有如此多的术语&#xff0c;如甜、干、单宁、酒体等等&#xff0c;很容易让人迷失。嗯&#xff0c;就像情人眼里出西施一样&#xff0c;“好酒”因人而异。虽然品尝各种不同的葡萄酒是了解你喜欢什么的最好方法&#xff0c;但我…

springboot开启HTTPS

目录 一、前言 HTTP和HTTPS的含义以及区别 二、域名映射 三、添加SSL证书 四、Http转Https 五、内网穿透 一、前言 我们平常写完一个接口&#xff0c;其访问一般都是使用http协议 我们最终想要的结果是使用安全的HTTPS来访问 在我们开始实现之前&#xff0c;我们要先搞明…

前端——框架——Vue

提示&#xff1a; 本文只是从宏观角度简要地梳理一遍vue3&#xff0c;不至于说学得乱七八糟、一头雾水、不知南北&#xff0c;如果要上手写代码、撸细节&#xff0c;可以根据文中的关键词去查找资料 简问简答&#xff1a; vue.js是指vue3还是vue2&#xff1f; Vue.js通常指的是…