【机器学习与实现】线性回归分析

news2024/12/23 16:27:14

目录


一、相关和回归的概念

(一)变量间的关系

——函数关系和相关关系

(1)是一一对应的确定关系

(2)变量间关系不能用函数关系精确表达

在这里插入图片描述
1、函数关系的例子

  • 某种商品的销售额 (y) 与销售量 (x) 之间的关系可表示为 y = p x y = p x y=px ( p p p为单价)

2、相关关系的例子

  • 商品的消费量 ( y y y) 与居民收入 ( x x x) 之间的关系
  • 父亲身高 ( y y y) 与子女身高 ( x x x) 之间的关系

3、相关关系的图示

在这里插入图片描述

(二)Pearson(皮尔逊)相关系数

随机变量 X \color{red}X X Y \color{red}Y Y D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x m , y m ) } \color{blue}D=\{ (x_1, y_1) , (x_2, y_2), \cdots, (x_m, y_m) \} D={(x1,y1),(x2,y2),,(xm,ym)}
μ X = 1 m ∑ i = 1 m x i , μ Y = 1 m ∑ i = 1 m y i , \mu_X=\frac{1}{m}\sum_{i=1}^mx_i,\mu_Y=\frac{1}{m}\sum_{i=1}^my_i, μX=m1i=1mxiμY=m1i=1myi σ X = 1 m − 1 ∑ i = 1 m ( x i − μ X ) 2 , σ Y = 1 m − 1 ∑ i = 1 m ( y i − μ Y ) 2 , \sigma_X=\sqrt{\frac{1}{m-1}\sum_{i=1}^m(x_i-\mu_X)^2},\sigma_Y=\sqrt{\frac{1}{m-1}\sum_{i=1}^m(y_i-\mu_Y)^2}, σX=m11i=1m(xiμX)2 σY=m11i=1m(yiμY)2 C o v ( X , Y ) = 1 m − 1 ∑ i = 1 m ( x i − μ X ) ( y i − μ Y ) , Cov(X,Y)=\frac{1}{m-1}\sum_{i=1}^m(x_i-\mu_X)(y_i-\mu_Y), Cov(X,Y)=m11i=1m(xiμX)(yiμY) ρ = C o v ( X , Y ) σ X σ Y \boxed{ρ=\frac{Cov(X,Y)}{\sigma_X\sigma_Y}} ρ=σXσYCov(X,Y)

  • 相关系数 r r r 等于 X X X Y Y Y 的协方差除以它们各自标准差的乘积
  • 相关系数 r r r 的取值 [ − 1 , 1 ] [-1,1] [1,1]
  • 1表示完全正相关,-1表示完全负相关,0表示不相关

二、线性回归的概念和方程

(一)回归分析概述

回归分析指研究一组随机变量 ( X 1 , X 2 , ⋯   , X k ) (X_1, X_2,\cdots, X_k) (X1,X2,,Xk) 和另一组变量 ( Y 1 , Y 2 , ⋯   , Y i ) (Y_1,Y_2,\cdots,Y_i) (Y1,Y2,,Yi) 之间相关关系的统计分析方法。

  • 按自变量:一元回归和多元回归
  • 按因变量:简单回归和多重回归
  • 按函数形式:线性回归和非线性回归

X i X_i Xi自变量 Y i Y_i Yi取连续值的因变量

(二)线性回归方程

1、一元线性回归

一元线性回归由大体上有线性关系的一个自变量和一个因变量组成;模型是 Y = a + b x + ε Y=a+ bx +ε Y=a+bx+ε X X X是自变量, Y Y Y是因变量, ε ε ε是随机误差)。

回归分析的任务就是寻找一条拟合直线,使得所有样本点到该直线的距离之和最小。

在这里插入图片描述
2、多元线性回归

如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
h ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n + ε i h(x)=\theta_0+\theta_1x_1+\theta_2x_2+\cdots+\theta_nx_n+\varepsilon_i h(x)=θ0+θ1x1+θ2x2++θnxn+εi x 0 = 1 x_0=1 x0=1,则上式可写成 h θ ( x ) = θ T X = X T θ h_\theta(x)=\theta^TX=X^T\theta hθ(x)=θTX=XTθ θ = ( θ 0 θ 1 ⋯ θ n ) , X = ( x 0 x 1 ⋯ x n ) \theta=\left(\begin{matrix}\theta_0\\\theta_1\\\cdots\\\theta_n\end{matrix}\right),X=\left(\begin{matrix}x_0\\x_1\\\cdots\\x_n\end{matrix}\right) θ= θ0θ1θn X= x0x1xn

θ θ θ称为参数向量,也是要求解的一个量(注意:向量默认是列向量

多元线性回归方程的直观解释:

在这里插入图片描述

三、线性回归模型的损失函数与参数估计

线性回归方程参数的求解:
线性回归分析的目标是求出线性回归方程中参数向量 θ θ θ 的值,这有两种方法。
① 正规解方程法(最小二乘法)
② 梯度下降法

(一)正规解方程法(最小二乘法)

1、线性回归模型方程

假设房屋价格与以下因子(自变量或者特征)存在线性关系,求解预测房屋 m m m价格(因变量或者预测量)

面积房间数人口密度房龄价格
70250574.2
602601066.2
11047020117.4
803401584.3
703301074.3
9036010m?

2、将样本代入线性回归方程

f ( X ) f(X) f(X) 为预测值,也写作 y ^ \hat{y} y^ y y y 为实际值。
{ f ( X ) = θ 0 + 70 θ 1 + 2 θ 2 + 50 θ 3 + 5 θ 4 f ( X ) = θ 0 + 60 θ 1 + 2 θ 2 + 60 θ 3 + 10 θ 4 f ( X ) = θ 0 + 110 θ 1 + 4 θ 2 + 70 θ 3 + 20 θ 4 f ( X ) = θ 0 + 80 θ 1 + 3 θ 2 + 40 θ 3 + 15 θ 4 f ( X ) = θ 0 + 70 θ 1 + 3 θ 2 + 30 θ 3 + 10 θ 4 \left\{ \begin{array}{l} f(X)=\theta_0+70\theta_1+2\theta_2+50\theta_3+5\theta_4 \\[1ex] f(X)=\theta_0+60\theta_1+2\theta_2+60\theta_3+10\theta_4 \\[1ex] f(X)=\theta_0+110\theta_1+4\theta_2+70\theta_3+20\theta_4 \\[1ex] f(X)=\theta_0+80\theta_1+3\theta_2+40\theta_3+15\theta_4 \\[1ex] f(X)=\theta_0+70\theta_1+3\theta_2+30\theta_3+10\theta_4 \end{array} \right. f(X)=θ0+70θ1+2θ2+50θ3+5θ4f(X)=θ0+60θ1+2θ2+60θ3+10θ4f(X)=θ0+110θ1+4θ2+70θ3+20θ4f(X)=θ0+80θ1+3θ2+40θ3+15θ4f(X)=θ0+70θ1+3θ2+30θ3+10θ4 X b ⋅ θ = [ 1 X 1 ( 1 ) X 2 ( 1 ) ⋯ X n ( 1 ) 1 X 1 ( 2 ) X 2 ( 2 ) ⋯ X n ( 2 ) ⋯ ⋯ 1 X 1 ( m ) X 2 ( m ) ⋯ X n ( m ) ] ⋅ [ θ 0 θ 1 θ 2 ⋯ θ n ] = f ( X ) X_b\cdot\theta=\left[ \begin{matrix} 1 & X_1^{(1)} & X_2^{(1)} & \cdots & X_n^{(1)} \\[1ex] 1 & X_1^{(2)} & X_2^{(2)} & \cdots & X_n^{(2)} \\[1ex] \cdots & & & & \cdots \\[1ex] 1 & X_1^{(m)} & X_2^{(m)} & \cdots & X_n^{(m)} \end{matrix} \right] \cdot\left[ \begin{matrix} \theta_0 \\[1ex] \theta_1 \\[1ex] \theta_2 \\[1ex] \cdots \\[1ex] \theta_n \end{matrix} \right] =f(X) Xbθ= 111X1(1)X1(2)X1(m)X2(1)X2(2)X2(m)Xn(1)Xn(2)Xn(m) θ0θ1θ2θn =f(X)

  • m m m 个样本(上标)
  • n n n 个特征(下标)
  • X X X ( m , n + 1 ) (m,n+1) (m,n+1) 特征矩阵
  • θ \theta θ:权重向量/系数向量

3、线性回归的损失函数

在这里插入图片描述

4、线性回归参数估计

目标:找到 θ 0 , θ 1 , θ 2 , ⋯   , θ n \theta_0,\theta_1,\theta_2,\cdots,\theta_n θ0,θ1,θ2,,θn,使得平方损失函数 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \sum_{i=1}^m(y^{(i)}-\hat{y}^{(i)})^2 i=1m(y(i)y^(i))2 尽可能小。 其中 y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + . . . + θ n X n ( i ) \hat{y}^{(i)}=\theta_0+\theta_1X_1^{(i)}+\theta_2X_2^{(i)}+...+\theta_nX_n^{(i)} y^(i)=θ0+θ1X1(i)+θ2X2(i)+...+θnXn(i)

5、补充:均方误差(MSE)函数

在线性回归中使用的损失函数是“平方损失函数” (quadratic loss function) L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X))=(Y-f(X))^2 L(Y,f(X))=(Yf(X))2 E ( ω , b ) = ∑ i = 1 m ( y i − ω x i − b ) 2 E_{(\omega,b)}=\sum_{i=1}^m(y_i-\omega x_i-b)^2 E(ω,b)=i=1m(yiωxib)2

但是在计算的时候,常常多出一个2,并且表示成平均损失的形式:
L o s s ( ω , b ) = E ( ω , b ) = 1 2 m ∑ i = 1 m ( f ( x i ) − y i ) 2 = 1 2 m ∑ i = 1 m ( y i − ω x i − b ) 2 \begin{aligned} Loss(\omega,b)=E_{(\omega,b)}&=\frac{1}{2m}\sum_{i=1}^m(f(x_i)-y_i)^2\\ &=\frac{1}{2m}\sum_{i=1}^m(y_i-\omega x_i-b)^2 \end{aligned} Loss(ω,b)=E(ω,b)=2m1i=1m(f(xi)yi)2=2m1i=1m(yiωxib)2

平方损失函数下,样本数越多误差越大;相比于前面的平方损失函数,均方误差函数(mean-square error,MSE)既克服了样本数量的影响,同时它也仅仅是在平方损失函数前面增加了一个常量系数( 1 2 m \frac{1}{2m} 2m1),因此后面通过平方损失函数最小化求解参数的计算过程对它同样适用。

6、损失函数的向量化表示

损失函数 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \begin{aligned}\sum_{i=1}^m(y^{(i)}-\hat{y}^{(i)})^2\end{aligned} i=1m(y(i)y^(i))2 y = ( y ( 1 ) ⋯ y ( m ) ) y=\left(\begin{matrix}y^{(1)}\\\cdots\\y^{(m)}\end{matrix}\right) y= y(1)y(m) y ^ = X b ⋅ θ = ( y ^ ( 1 ) ⋯ y ^ ( m ) ) \hat{y}=X_b\cdot\theta=\left(\begin{matrix}\hat{y}^{(1)}\\\cdots\\\hat{y}^{(m)}\end{matrix}\right) y^=Xbθ= y^(1)y^(m)

根据 ∑ p i 2 = P T P \begin{aligned}\sum p_i^2=P^TP\end{aligned} pi2=PTP,进行向量化: ( y − X b ⋅ θ ) T ( y − X b ⋅ θ ) (y-X_b\cdot\theta)^T(y-X_b\cdot\theta) (yXbθ)T(yXbθ) J ( θ ) = θ T X b T X b θ − 2 ( X b θ ) T y + y T y J(\theta)=\boxed{\theta^TX_b^TX_b\theta}-\boxed{2(X_b\theta)^Ty}+y^Ty J(θ)=θTXbTXbθ2(Xbθ)Ty+yTy

θ \theta θ 求偏导,并令其等于0: 2 X b T X b θ − 2 X T y = 0 2X_b^TX_b\theta-2X^Ty=0 2XbTXbθ2XTy=0 X b T X b θ = X b T y X_b^TX_b\theta=X_b^Ty XbTXbθ=XbTy θ = ( X b T X b ) − 1 X b T y \theta=(X_b^TX_b)^{-1}X_b^Ty θ=(XbTXb)1XbTy

参数 θ θ θ 的推导过程:

X b T X b X_b^TX_b XbTXb 可逆时,上述解称为线性回归权系数向量的最小二乘解(基于均分误差/平方误差最小化)。上面两个黑色框的求导结果是根据下面两条函数对向量和矩阵的求导规则:

  • A A A 是实对称矩阵时,有 ∂ ( a T A x ) ∂ x = 2 A x \begin{aligned}\frac{\partial (a^TAx)}{\partial x}=2Ax\end{aligned} x(aTAx)=2Ax
  • ∂ ( a T x ) ∂ x = ∂ ( x T a ) ∂ x = a \begin{aligned}\frac{\partial (a^Tx)}{\partial x}=\frac{\partial (x^Ta)}{\partial x}=a\end{aligned} x(aTx)=x(xTa)=a

7、最小二乘解的缺点

  • X b T X b X_b^TX_b XbTXb 不可逆时无法求解;
  • 即使可逆,逆矩阵求解可能计算很复杂;
  • 求得的权系数向量 θ \theta θ 可能不稳定,即样本数据的微小变化可能导致 θ \theta θ 的巨大变化,从而使得回归模型不稳定,缺乏泛化能力。

(二)梯度下降法

1、基本概念

梯度下降(Gradient Descent)法适合特征个数多、样本数多、其他方法内存无法满足要求的情况下使用

梯度下降算法是一种求局部最优解的数值计算方法,该方法的整体思路是通过迭代来逐渐调整参数使得损失函数达到最小值

2、基本思想

目标:找到 θ 0 , θ 1 , θ 2 , ⋯   , θ n \theta_0,\theta_1,\theta_2,\cdots,\theta_n θ0,θ1,θ2,,θn,使得损失函数 ∑ i = 1 m ( y ( i ) − y ^ ( i ) ) 2 \begin{aligned}\sum_{i=1}^m(y^{(i)}-\hat{y}^{(i)})^2\end{aligned} i=1m(y(i)y^(i))2 尽可能小。

在这里插入图片描述
比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。 这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。

在这里插入图片描述
3、梯度下降法举例

梯度下降法举例(1):
在这里插入图片描述

损失函数: J ( θ ) = θ 2 J(\theta)=\theta^2 J(θ)=θ2

θ θ θ 求导: J ′ ( θ ) = 2 θ J'(θ)=2θ J(θ)=2θ

设: θ 0 = 1 θ^0=1 θ0=1   步长: α = 0.4 \alpha=0.4 α=0.4

θ 0 = 1 θ^0=1 θ0=1

θ 1 = θ 0 − α ⋅ J ′ ( θ 0 ) = 1 − 0.4 × 2 = 0.2 θ^1=θ^0-α\cdot J'(θ^0)=1-0.4\times2=0.2 θ1=θ0αJ(θ0)=10.4×2=0.2

θ 2 = θ 1 − α ⋅ J ′ ( θ 1 ) = 0.2 − 0.4 × 0.4 = 0.04 θ^2=θ^1-α\cdot J'(θ^1)=0.2-0.4\times0.4=0.04 θ2=θ1αJ(θ1)=0.20.4×0.4=0.04

θ 3 = θ 2 − α ⋅ J ′ ( θ 2 ) = 0.04 − 0.4 × 0.08 = 0.008 θ^3=θ^2-α\cdot J'(θ^2)=0.04-0.4\times0.08=0.008 θ3=θ2αJ(θ2)=0.040.4×0.08=0.008

θ 4 = θ 3 − α ⋅ J ′ ( θ 3 ) = 0.008 − 0.4 × 0.016 = 0.0016 θ^4=θ^3-α\cdot J'(θ^3)=0.008-0.4\times0.016=0.0016 θ4=θ3αJ(θ3)=0.0080.4×0.016=0.0016

梯度下降法举例(2):

在这里插入图片描述
J ( θ ) = θ 1 2 + θ 2 2 J(θ)=θ_1^2+θ_2^2 J(θ)=θ12+θ22

θ 0 = ( 1 , 3 ) θ^0=(1,3) θ0=(1,3)    α = 0.1 \alpha=0.1 α=0.1

∇ J ( θ ) = ⟨ 2 θ 1 , 2 θ 2 ⟩ \nabla J(θ)=\langle2θ_1,2θ_2\rangle J(θ)=2θ1,2θ2

θ 0 = ( 1 , 3 ) θ^0=(1,3) θ0=(1,3)

θ 1 = θ 0 − α ⋅ ∇ J ( θ ) = ( 1 , 3 ) − 0.1 ⋅ ( 2 , 6 ) = ( 0.8 , 2.4 ) θ^1=θ^0-\alpha\cdot\nabla J(θ)=(1,3)-0.1\cdot(2,6)=(0.8,2.4) θ1=θ0αJ(θ)=(1,3)0.1(2,6)=(0.8,2.4)

θ 2 = θ 1 − α ⋅ ∇ J ( θ ) = ( 0.8 , 2.4 ) − 0.1 ⋅ ( 1.6 , 4.8 ) = ( 0.64 , 1.92 ) θ^2=θ^1-\alpha\cdot\nabla J(θ)=(0.8,2.4)-0.1\cdot(1.6,4.8)=(0.64,1.92) θ2=θ1αJ(θ)=(0.8,2.4)0.1(1.6,4.8)=(0.64,1.92)

θ 3 = ( 0.5124 , 1.536 ) θ^3=(0.5124,1.536) θ3=(0.5124,1.536)

θ 4 = ( 0.4096 , 1.228800000000001 ) θ^4=(0.4096,1.228800000000001) θ4=(0.4096,1.228800000000001)
⋮ \vdots
θ 10 = ( 0.1073741824000003 , 0.32212254720000005 ) θ^{10}=(0.1073741824000003,0.32212254720000005) θ10=(0.1073741824000003,0.32212254720000005)
⋮ \vdots
θ 50 = ( 1.141798154164342 e − 05 , 3.42539442494306 e − 05 ) θ^{50}=(1.141798154164342e^{-05},3.42539442494306e^{-05}) θ50=(1.141798154164342e05,3.42539442494306e05)
⋮ \vdots
θ 100 = ( 1.6296287810675902 e − 10 , 4.8888886343202771 e − 10 ) θ^{100}=(1.6296287810675902e^{-10},4.8888886343202771e^{-10}) θ100=(1.6296287810675902e10,4.8888886343202771e10)

4、梯度下降法的步骤

(1)确定当前位置的损失函数的梯度 ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) \begin{aligned}\frac{\partial}{\partial\theta_i}J(θ_0,θ_1,...,θ_n)\end{aligned} θiJ(θ0,θ1,...,θn)

(2)用步长 α \alpha α 乘以损失函数的梯度,得到当前位置下降的距离 α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) \begin{aligned}\alpha\frac{\partial}{\partial\theta_i}J(θ_0,θ_1,...,θ_n)\end{aligned} αθiJ(θ0,θ1,...,θn)

(3)确定是否所有的 θ i θ_i θi,梯度下降的距离都小于 ε ε ε,如果小于 ε ε ε 则算法终止,当前所有的 θ i θ_i θi 即为最终结果。否则进入步骤(4)。

(4)更新所有的 θ i θ_i θi θ i θ_i θi 的更新表达式如下。更新完毕后继续转入步骤(1)。 θ i = θ i − α ∂ ∂ θ i J ( θ 0 , θ 1 , . . . , θ n ) θ_i=θ_i-\begin{aligned}\alpha\frac{\partial}{\partial\theta_i}J(θ_0,θ_1,...,θ_n)\end{aligned} θi=θiαθiJ(θ0,θ1,...,θn)

5、步长过大或过小的情况

在这里插入图片描述
6、梯度下降法的种类

  • 批量梯度下降法BGD:在更新参数时使用所有的样本来进行更新
  • 随机梯度下降法SGD:仅仅选取一个样本 j j j 来求梯度
  • 小批量梯度下降法MBGD:对于 m m m 个样本,抽取其中 x x x 个子样本来迭代

7、模型评价

在这里插入图片描述
R 2 R^2 R2为0时,模型最差; R 2 R^2 R2为1时,模型最好; R 2 R^2 R2越大,模型越好。

训练集上的 R 2 R^2 R2:拟合程度好;测试集上的 R 2 R^2 R2:泛化能力强。

四、线性回归的正则化

(一)正则化线性回归

为防止过拟合,引入了正则化(regularization)技术,就是在原来损失函数的后面加上一个关于模型系数的正则化项:

在这里插入图片描述
直观理解,因为正则化项的存在,当新的目标函数 J ( ω ) J(\omega) J(ω) 取得最小值时, L ( ω ) L(\omega) L(ω) 也不至于因为过小而产生过拟合。

正则化项可以理解成对模型参数的一种惩罚,在最小化误差的同时,使得模型参数变得更小(模型参数越小,甚至趋向于0,将降低模型复杂度,防止过拟合)。

(二) l 2 l_2 l2正则化与岭回归

在原来线性回归的均方误差后面增加 l 2 l_2 l2 范数做正则项,就是岭回归(ridge regression):
J ( ω ) = 1 2 m ∑ i = 1 m ( f ( ω , x i ) − y i ) 2 + α 2 ∥ ω ∥ 2 2 J(\omega)=\frac{1}{2m}\sum_{i=1}^m(f(\omega,x_i)-y_i)^2+\frac{\alpha}{2}\lVert\omega\rVert_2^2 J(ω)=2m1i=1m(f(ω,xi)yi)2+2αω22 ω ∗ = a r g m i n J ( ω ) \omega^*=argminJ(\omega) ω=argminJ(ω) 其中 ∥ ω ∥ 2 2 = ω 0 2 + ω 1 2 + . . . + ω n 2 \lVert\omega\rVert_2^2=\omega_0^2+\omega_1^2+...+\omega_n^2 ω22=ω02+ω12+...+ωn2

岭回归求得的权重系数虽然都比较小,接近于0但不等于0,说明它是比较均衡的对待多个特征。

(三) l 1 l_1 l1正则化与 L a s s o Lasso Lasso回归

在原来线性回归的均方误差后面增加 l 1 l_1 l1 范数做正则项,就是稀疏线性回归(Lasso regression):

J ( ω ) = 1 2 m ∑ i = 1 m ( f ( ω , x i ) − y i ) 2 + α 2 ∥ ω ∥ 1 J(\omega)=\frac{1}{2m}\sum_{i=1}^m(f(\omega,x_i)-y_i)^2+\frac{\alpha}{2}\lVert\omega\rVert_1 J(ω)=2m1i=1m(f(ω,xi)yi)2+2αω1 ω ∗ = a r g m i n J ( ω ) \omega^*=argminJ(\omega) ω=argminJ(ω) 其中 ∥ ω ∥ 1 = ∣ ω 0 ∣ + ∣ ω 1 ∣ + . . . + ∣ ω n ∣ \lVert\omega\rVert_1=|\omega_0|+|\omega_1|+...+|\omega_n| ω1=ω0+ω1+...+ωn

L a s s o Lasso Lasso回归求得的权重系数多数都为0,体现出稀疏性,说明它具有特征选择的能力。

(四)比较 l 1 l_1 l1 l 2 l_2 l2正则化

在这里插入图片描述
超参数𝛼既不能过大也不能太小:𝛼过大,使得正则项的作用加强,会削弱拟合效果𝛼过小,惩罚力度不够,防止过拟合效果不明显。

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

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

相关文章

BigDecimal:踩坑

问题描述 两个BigDecimal相除, 抛了异常 原因分析: Java 中使用 BigDecimal 做除法运算的时候,值有可能是无限循环的小数,结果是无限循环的小数,就会抛出上面这个异常。 来看看源码: public BigDecimal divide(BigD…

马常旭新歌《如愿》:音乐界的“旭日”再现

在这个春暖花开的季节,音乐界又迎来了一股清新的“旭日”气息。是的,就在2024年4月17日,马常旭的新歌《如愿》(旭日版)在网易云音乐上线了!一年的等待,终于迎来了他的音乐回归,给我们…

【3D基础】坐标转换——地理坐标投影到平面

汤国安GIS原理第二章重点 1.常见投影方式 https://download.csdn.net/blog/column/9283203/83387473 Web Mercator投影(Web Mercator Projection): 优点: 在 Web 地图中广泛使用,易于显示并与在线地图服务集成。在较…

在echarts中使用geojson地图

以中国地图为例 先看效果 代码实现&#xff1a; <div id"refChinaMap" :style"{ width: 75%, height: 100% }"></div>import * as echarts from "echarts"; import ChinaJSON from "./chinaMap.json";const initChinaMa…

场景文本检测识别学习 day09(Swin Transformer论文精读)

Patch & Window 在Swin Transformer中&#xff0c;不同层级的窗口内部的补丁数量是固定的&#xff0c;补丁内部的像素数量也是固定的&#xff0c;如上图的红色框就是不同的窗口&#xff08;Window&#xff09;&#xff0c;窗口内部的灰色框就是补丁&#xff08;Patch&#…

【Linux网络编程】自定义协议+HTTP协议

【Linux网络编程】自定义协议HTTP协议 目录 【Linux网络编程】自定义协议HTTP协议协议定制&#xff0c;序列化和反序列化应用层中的HTTP认识URL&#xff08;网址&#xff09;urlencode和urldecodeHTTP协议格式使用telnet获取百度的根目录资源HTTP的方法表单 HTTP的状态码HTTP常…

一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?

目录 1.Redis 分布式锁 &#xff08;1&#xff09;Redis 最普通的分布式锁 &#xff08;2&#xff09;RedLock 算法 2.zk 分布式锁 3.redis 分布式锁和zk分布式锁的对比 1.Redis 分布式锁 官方叫做 RedLock 算法&#xff0c;是 Redis 官方支持的分布式锁算法。 这个分布式…

[qnx] 通过zcu104 SD卡更新qnx镜像的步骤

0. 概述 本文演示如果给Xlinx zcu104开发板刷入自定义的qnx镜像 1.将拨码开关设置为SD卡启动 如下图所示&#xff0c;将1拨到On,2,3,4拨到Off&#xff0c;即为通过SD启动。 2.准备SD卡中的内容 首先需要将SD格式化为FAT32的&#xff08;如果已经是FAT32格式&#xff0c;则…

力扣每日一题114:二叉树展开为链表

题目 中等 提示 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

sass-loader和node-sass与node版本的依赖问题

sass-loader和node-sass与node版本的依赖问题 没有人会陪你走到最后&#xff0c;碰到了便是有缘&#xff0c;即使到了要下车的时候&#xff0c;也要心存感激地告别&#xff0c;在心里留下空白的一隅之地&#xff0c;多年后想起时依然心存甘味。——林清玄 报错截图 报错信息 np…

linux/windows安装Tomcat

安装tomcat 注意版本一致问题 Tomcat 10.1.0-M15(alpha)Tomcat 10.0.x-10.0.21Tomcat 9.0.x-9.0.63Tomcat 8.5.x-8.0.53规范版本 Servlet 6.0,JSP 3.1, EL 5.0 WebSocket 2.1&#xff0c;JASPIC 3.0 Servlet 5.0,JSP 3.0, EL 4.0 WebSocket 2.0&#xff0c;JASPIC 2.0 Serv…

20240507最新 ubuntu20.04安装ros noetic

ubuntu20.04安装ros 主要参考博客 【ROS】在 Ubuntu 20.04 安装 ROS 的详细教程_ubuntu20.04安装ros-CSDN博客 出现问题 1.ubuntu20.04 更换清华源报错 ubuntu20.04 更换清华源报错_gvfs metadata is not supported. fallback to teplme-CSDN博客 &#xff1f;&#xff1f…

CNN-BiLSTM-Attention(12种算法优化CNN-BiLSTM-Attention多输入单输出)

12种算法优化CNN-BiLSTM-Attention模型预测的代码。其中Attention模型可以改为单头或者多头&#xff0c;在代码中就是改个数字而已。代码注释已写好如何更改。 12种算法优化CNN-BiLSTM-Attention多特征输入单步预测代码获取戳此处代码获取戳此处代码获取戳此处 主要功能为:采用…

数据库SQL语言实战(七)

前言 这次的有一点点难~~~~~我也写了好久 练习题 题目一 在学生表pub.student中统计名字&#xff08;姓名的第一位是姓氏&#xff0c;其余为名字&#xff0c;不考虑复姓&#xff09;的使用的频率&#xff0c;将统计结果放入表test5_01中 create table test5_01(First_name…

【一步一步了解Java系列】:探索Java基本类型转换的秘密

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹。 如果喜欢能否点个赞支持一下&#…

ComfyUI 基础教程(十四):ComfyUI中4种实现局部重绘方法

在ComfyUI中有多种方式可以实现局部重绘,简单的方式是使用VAE内补编码器进行局部重绘,也可以用Fooocus inpaint进行局部重绘,还可以用controlNet的inpaint模型进行局部重绘,以及使用Clip seg蒙版插件! 本篇介绍使用VAE內补编码器进行局部重绘的方法。 1、VAE内补编码器 局…

【docker】docker compose 搭建私服

安装 Docker Registry 创建目录 mkdir -pv /usr/local/docker/registrymkdir -pv /usr/local/docker/data 创建 docker-compose.yml文件 进入目录创建docker-compose.yml cd /usr/local/docker/registrytouch docker-compose.yml 编辑docker-compose.yml vim docker-compo…

ASRPRO

https://gitee.com/gitee-128/ASR-PRO-U8G2/tree/main 不下载模型 语音就是天问51唤醒我 u8g2的移植过程 第一步 下载u8g2的源代码 第二步 修改 delay and 函数 第三步 添加头文件 显示 显示 动画 SPI I2C(SOFT SPI ;SOFT I2C U8G2 移植过程&#xff08;移植过程参考…

JUC基础概念

文章目录 JUC的基础概念什么是JUC进程与线程并行与并发线程的五种状态JUC的架构 JUC的基础概念 什么是JUC JUC 是 Java.utils.concurrent 包内的类&#xff0c;是为了开发者可以在多线程的情况下减少竞争条件和防止死锁而出现的。 进程与线程 进程&#xff1a;一个进程包含…

【LeetCode算法】389. 找不同

提示&#xff1a;此文章仅作为本人记录日常学习使用&#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、题目二、思路三、解决方案 一、题目 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添…