当前位置: 首页 > news >正文

【机器学习】线性回归算法详解:线性回归、岭回归、Lasso回归与Elastic Net

文章目录

  • 一、线性回归:回归算法的起点
    • 核心原理
    • 参数求解
    • 线性回归的优势与局限
  • 二、岭回归:解决共线性的有效工具
    • 核心思想
    • 参数求解过程
    • 岭回归解决的两个问题:过拟合和共线性
  • 三、Lasso回归:自动特征选择的利器
    • 核心思想
    • 参数求解过程
    • Lasso回归解决的两个问题:过拟合和特征选择
    • L1正则化的独特性质
  • 四、Elastic Net:兼顾特征选择和稳定性的平衡选择
    • 核心思想
    • 参数求解过程
    • Elastic Net解决的两个问题:特征选择和稳定性
    • 参数选择的策略
    • 适用场景
  • 五、算法比较与选择指南
    • 理论比较
    • 实际选择指南
    • 实践建议与最佳实践
      • 数据预处理
      • 模型评估

我们面对高维数据时,简单的线性关系往往不够用,这时就需要引入正则化技术来平衡模型的复杂度和泛化能力。本文将深入剖析四种经典回归算法:线性回归、岭回归、Lasso回归和Elastic Net,揭示它们如何从不同角度解决同一个问题。

一、线性回归:回归算法的起点

核心原理

线性回归是所有回归算法的起点。它的核心假设是:目标变量与特征之间存在线性关系。给定特征向量 x=[x1,x2,...,xp]\mathbf{x} = [x_1, x_2, ..., x_p]x=[x1,x2,...,xp] 和目标变量 yyy,线性回归模型可以表示为:

y=β0+β1x1+β2x2+...+βpxp+ϵy = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... + \beta_p x_p + \epsilony=β0+β1x1+β2x2+...+βpxp+ϵ

其中 β0\beta_0β0 是截距项,βi\beta_iβi 是第 iii 个特征的系数,ϵ\epsilonϵ 是误差项。

 

参数求解

我们要找到一组参数 β\betaβ,使得模型预测的结果与真实值最接近。我们使用均方误差:计算每个预测值与真实值的差的平方,然后加起来。这个总和越小,说明模型越好。

数学公式
min⁡β∑i=1n(yi−y^i)2\min_{\beta} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2βmini=1n(yiy^i)2

通过数学推导(求导并令导数等于零),我们可以直接计算出最优参数:
β^=(XTX)−1XTy\hat{\beta} = (\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}β^=(XTX)1XTy

这个公式告诉我们,不需要反复试错,可以直接通过矩阵运算得到最优解。这就像在二维平面上找一条直线,使得所有点到这条直线的距离平方和最小。在高维空间中,我们找的是一个超平面。

 

线性回归的优势与局限

线性回归的最大优势在于其简洁性和可解释性。
模型结构简单,易于理解和解释,这使得它成为许多实际问题的首选。同时,线性回归具有很高的计算效率,因为它有闭式解,不需要迭代优化。更重要的是,线性回归的参数估计是无偏的,这意味着在理想条件下,估计值会收敛到真实参数。

然而,线性回归也存在明显的局限性。
首先,它假设目标变量与特征之间存在严格的线性关系,这在实际问题中往往过于理想化,无法捕捉复杂的非线性模式。其次,线性回归对异常值非常敏感,少数几个异常点就可能显著影响整个模型的参数估计。此外,当特征数量大于样本数量时,设计矩阵 XTX\mathbf{X}^T\mathbf{X}XTX 变得不可逆,导致参数估计失败(?)。最后,当特征数量很多时,线性回归容易过拟合,特别是在样本数量有限的情况下。

 

二、岭回归:解决共线性的有效工具

核心思想

岭回归(Ridge Regression)通过引入L2正则化项来解决线性回归的过拟合问题。其目标函数为:

min⁡β∑i=1n(yi−y^i)2+λ∑j=1pβj2\min_{\beta} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^{p} \beta_j^2βmini=1n(yiy^i)2+λj=1pβj2

这个目标函数有两个核心作用:

第一个作用:拟合数据

  • ∑i=1n(yi−y^i)2\sum_{i=1}^{n} (y_i - \hat{y}_i)^2i=1n(yiy^i)2 确保模型能够准确预测训练数据
  • 这部分越小,说明预测越准确

第二个作用:控制复杂度

  • λ∑j=1pβj2\lambda \sum_{j=1}^{p} \beta_j^2λj=1pβj2 防止参数值过大,避免过拟合
  • 这部分越小,说明模型越简洁

 

假设我们要预测房价:

目标函数:
min⁡β∑i=1n(房价i−预测房价i)2+λ∑j=1pβj2\min_{\beta} \sum_{i=1}^{n} (房价_i - 预测房价_i)^2 + \lambda \sum_{j=1}^{p} \beta_j^2βmini=1n(i预测房i)2+λj=1pβj2

含义:

  • 第一部分:让预测房价尽可能接近真实房价
  • 第二部分:防止参数值过大,避免过拟合

想象一下,如果我们只考虑第一个目标(拟合数据),模型可能会:给某些特征分配很大的系数(比如 +1000, -999),完美拟合训练数据,但在新数据上表现很差。这就是过拟合问题。因此,我们需要第二个目标来平衡,确保模型既准确又简洁。

 

参数求解过程

岭回归的目标函数可以通过微积分求解。具体步骤如下:

步骤1:写出目标函数
L(β)=∑i=1n(yi−y^i)2+λ∑j=1pβj2L(\beta) = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^{p} \beta_j^2L(β)=i=1n(yiy^i)2+λj=1pβj2

步骤2:展开预测值
y^i=β0+β1xi1+β2xi2+...+βpxip\hat{y}_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + ... + \beta_p x_{ip}y^i=β0+β1xi1+β2xi2+...+βpxip

步骤3:对参数求导
对每个参数 βj\beta_jβj 求偏导数,并令导数等于零:

∂L∂βj=−2∑i=1n(yi−y^i)xij+2λβj=0\frac{\partial L}{\partial \beta_j} = -2 \sum_{i=1}^{n} (y_i - \hat{y}_i) x_{ij} + 2\lambda \beta_j = 0βjL=2i=1n(yiy^i)xij+2λβj=0

步骤4:整理方程
∑i=1n(yi−y^i)xij=λβj\sum_{i=1}^{n} (y_i - \hat{y}_i) x_{ij} = \lambda \beta_ji=1n(yiy^i)xij=λβj

步骤5:矩阵形式求解
将所有方程写成矩阵形式:

(XTX+λI)β^=XTy(\mathbf{X}^T\mathbf{X} + \lambda\mathbf{I})\hat{\beta} = \mathbf{X}^T\mathbf{y}(XTX+λI)β^=XTy

步骤6:得到闭式解
β^ridge=(XTX+λI)−1XTy\hat{\beta}_{ridge} = (\mathbf{X}^T\mathbf{X} + \lambda\mathbf{I})^{-1}\mathbf{X}^T\mathbf{y}β^ridge=(XTX+λI)1XTy

这个公式告诉我们,最优参数可以通过矩阵运算直接计算出来。

 

岭回归解决的两个问题:过拟合和共线性

岭回归的重要性在于它解决了线性回归面临的两个关键问题:过拟合和共线性。当特征数量很多或特征间高度相关时,线性回归可能会给某些特征分配很大的系数,试图完美拟合训练数据。这种行为就像"记住"训练数据而不是"学习"数据模式,导致模型在新数据上表现很差。

岭回归通过L2正则化项巧妙地解决了这个问题。这个正则化项 λ∑j=1pβj2\lambda \sum_{j=1}^{p} \beta_j^2λj=1pβj2 惩罚大的参数值,迫使模型寻找更保守的参数组合。因此,岭回归不仅能够拟合数据,还能够保持模型的泛化能力。

 

 

三、Lasso回归:自动特征选择的利器

核心思想

Lasso回归(Least Absolute Shrinkage and Selection Operator)通过引入L1正则化项来实现自动特征选择。其目标函数为:

min⁡β∑i=1n(yi−y^i)2+λ∑j=1p∣βj∣\min_{\beta} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^{p} |\beta_j|βmini=1n(yiy^i)2+λj=1pβj

这个目标函数有两个核心作用:

第一个作用:拟合数据

  • ∑i=1n(yi−y^i)2\sum_{i=1}^{n} (y_i - \hat{y}_i)^2i=1n(yiy^i)2 确保模型能够准确预测训练数据
  • 这部分越小,说明预测越准确

第二个作用:特征选择

  • λ∑j=1p∣βj∣\lambda \sum_{j=1}^{p} |\beta_j|λj=1pβj 将某些参数直接压缩到零,实现自动特征选择
  • 这部分越小,说明选择的特征越少

 
实际例子

假设我们要预测房价:

目标函数:
min⁡β∑i=1n(房价i−预测房价i)2+λ∑j=1p∣βj∣\min_{\beta} \sum_{i=1}^{n} (房价_i - 预测房价_i)^2 + \lambda \sum_{j=1}^{p} |\beta_j|βmini=1n(i预测房i)2+λj=1pβj

含义:

  • 第一部分:让预测房价尽可能接近真实房价
  • 第二部分:自动选择重要特征,将不重要特征的系数压缩到零

想象一下,如果我们只考虑第一个目标(拟合数据),模型可能会:给所有特征都分配系数,包括那些不重要的特征。这会导致模型复杂,容易过拟合。因此,我们需要第二个目标来平衡,确保模型只使用真正重要的特征。

 

参数求解过程

Lasso回归的目标函数可以通过坐标下降法求解。具体步骤如下:

步骤1:写出目标函数
L(β)=∑i=1n(yi−y^i)2+λ∑j=1p∣βj∣L(\beta) = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \sum_{j=1}^{p} |\beta_j|L(β)=i=1n(yiy^i)2+λj=1pβj

步骤2:展开预测值
y^i=β0+β1xi1+β2xi2+...+βpxip\hat{y}_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + ... + \beta_p x_{ip}y^i=β0+β1xi1+β2xi2+...+βpxip

步骤3:对参数求导
对每个参数 βj\beta_jβj 求偏导数,并令导数等于零:

∂L∂βj=−2∑i=1n(yi−y^i)xij+λ⋅sign(βj)=0\frac{\partial L}{\partial \beta_j} = -2 \sum_{i=1}^{n} (y_i - \hat{y}_i) x_{ij} + \lambda \cdot \text{sign}(\beta_j) = 0βjL=2i=1n(yiy^i)xij+λsign(βj)=0

其中 sign(βj)\text{sign}(\beta_j)sign(βj)βj\beta_jβj 的符号函数。

步骤4:软阈值操作
由于L1正则化的特性,参数更新使用软阈值操作:

βj=Sλ/2(zj)\beta_j = S_{\lambda/2}(z_j)βj=Sλ/2(zj)

其中 Sλ/2S_{\lambda/2}Sλ/2 是软阈值函数:
Sλ/2(z)={z−λ/2if z>λ/20if ∣z∣≤λ/2z+λ/2if z<−λ/2S_{\lambda/2}(z) = \begin{cases} z - \lambda/2 & \text{if } z > \lambda/2 \\ 0 & \text{if } |z| \leq \lambda/2 \\ z + \lambda/2 & \text{if } z < -\lambda/2 \end{cases}Sλ/2(z)=zλ/20z+λ/2if z>λ/2if zλ/2if z<λ/2

步骤5:迭代求解
由于没有闭式解,Lasso使用迭代算法:

  1. 初始化参数 β=0\beta = 0β=0
  2. 对每个参数 βj\beta_jβj 进行软阈值更新
  3. 重复直到收敛

 

Lasso回归解决的两个问题:过拟合和特征选择

Lasso回归的重要性在于它解决了线性回归面临的两个关键问题:过拟合和特征选择。当特征数量很多时,线性回归可能会给所有特征都分配系数,包括那些不重要的特征。这种行为就像"记住"训练数据而不是"学习"数据模式,导致模型复杂且在新数据上表现很差。

Lasso回归通过L1正则化项巧妙地解决了这个问题。这个正则化项 λ∑j=1p∣βj∣\lambda \sum_{j=1}^{p} |\beta_j|λj=1pβj 能够将某些参数精确地压缩到零,从而实现自动特征选择。因此,Lasso回归不仅能够拟合数据,还能够自动识别出真正重要的特征。

 

L1正则化的独特性质

稀疏性
L1正则化能够产生稀疏解,即将某些参数精确地压缩到零。这是因为L1正则化在参数空间中产生菱形约束,当优化过程到达菱形的顶点时,对应的参数会被压缩到零。

特征选择能力
通过将不重要特征的系数压缩到零,Lasso能够自动进行特征选择。这意味着我们不仅得到了预测模型,还知道了哪些特征真正重要。

计算效率
由于产生了稀疏解,Lasso模型在预测时只需要计算非零系数对应的特征,提高了计算效率。

 

四、Elastic Net:兼顾特征选择和稳定性的平衡选择

核心思想

Elastic Net通过结合L1和L2正则化项来平衡特征选择和模型稳定性。其目标函数为:

min⁡β∑i=1n(yi−y^i)2+λ1∑j=1p∣βj∣+λ2∑j=1pβj2\min_{\beta} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda_1 \sum_{j=1}^{p} |\beta_j| + \lambda_2 \sum_{j=1}^{p} \beta_j^2βmini=1n(yiy^i)2+λ1j=1pβj+λ2j=1pβj2

为了简化参数选择,通常将目标函数重写为:

min⁡β∑i=1n(yi−y^i)2+λ[α∑j=1p∣βj∣+1−α2∑j=1pβj2]\min_{\beta} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \left[ \alpha \sum_{j=1}^{p} |\beta_j| + \frac{1-\alpha}{2} \sum_{j=1}^{p} \beta_j^2 \right]βmini=1n(yiy^i)2+λ[αj=1pβj+21αj=1pβj2]

其中 α∈[0,1]\alpha \in [0,1]α[0,1] 控制L1和L2正则化的比例,λ\lambdaλ 控制正则化的总强度。

这个目标函数有三个核心作用:

第一个作用:拟合数据

  • ∑i=1n(yi−y^i)2\sum_{i=1}^{n} (y_i - \hat{y}_i)^2i=1n(yiy^i)2 确保模型能够准确预测训练数据
  • 这部分越小,说明预测越准确

第二个作用:特征选择

  • α∑j=1p∣βj∣\alpha \sum_{j=1}^{p} |\beta_j|αj=1pβj 将某些参数直接压缩到零,实现自动特征选择
  • 这部分越小,说明选择的特征越少

第三个作用:控制复杂度

  • 1−α2∑j=1pβj2\frac{1-\alpha}{2} \sum_{j=1}^{p} \beta_j^221αj=1pβj2 防止参数值过大,提高模型稳定性
  • 这部分越小,说明模型越简洁

 
实际例子

假设我们要预测房价:

目标函数:
min⁡β∑i=1n(房价i−预测房价i)2+λ[α∑j=1p∣βj∣+1−α2∑j=1pβj2]\min_{\beta} \sum_{i=1}^{n} (房价_i - 预测房价_i)^2 + \lambda \left[ \alpha \sum_{j=1}^{p} |\beta_j| + \frac{1-\alpha}{2} \sum_{j=1}^{p} \beta_j^2 \right]βmini=1n(i预测房i)2+λ[αj=1pβj+21αj=1pβj2]

含义:

  • 第一部分:让预测房价尽可能接近真实房价
  • 第二部分:自动选择重要特征,将不重要特征的系数压缩到零
  • 第三部分:防止参数值过大,提高模型稳定性

想象一下,如果我们只考虑第一个目标(拟合数据),模型可能会:给所有特征都分配系数,包括那些不重要的特征。如果只考虑特征选择,可能会忽略相关特征的重要性。因此,我们需要三个目标来平衡,确保模型既准确又简洁,同时保持稳定性。

 

参数求解过程

Elastic Net的目标函数可以通过坐标下降法求解。具体步骤如下:

步骤1:写出目标函数
L(β)=∑i=1n(yi−y^i)2+λ[α∑j=1p∣βj∣+1−α2∑j=1pβj2]L(\beta) = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 + \lambda \left[ \alpha \sum_{j=1}^{p} |\beta_j| + \frac{1-\alpha}{2} \sum_{j=1}^{p} \beta_j^2 \right]L(β)=i=1n(yiy^i)2+λ[αj=1pβj+21αj=1pβj2]

步骤2:展开预测值
y^i=β0+β1xi1+β2xi2+...+βpxip\hat{y}_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + ... + \beta_p x_{ip}y^i=β0+β1xi1+β2xi2+...+βpxip

步骤3:对参数求导
对每个参数 βj\beta_jβj 求偏导数,并令导数等于零:

∂L∂βj=−2∑i=1n(yi−y^i)xij+λα⋅sign(βj)+λ(1−α)βj=0\frac{\partial L}{\partial \beta_j} = -2 \sum_{i=1}^{n} (y_i - \hat{y}_i) x_{ij} + \lambda \alpha \cdot \text{sign}(\beta_j) + \lambda(1-\alpha)\beta_j = 0βjL=2i=1n(yiy^i)xij+λαsign(βj)+λ(1α)βj=0

步骤4:软阈值操作
由于结合了L1和L2正则化,参数更新使用修改的软阈值操作:

βj=Sλα(zj)1+λ(1−α)\beta_j = \frac{S_{\lambda\alpha}(z_j)}{1 + \lambda(1-\alpha)}βj=1+λ(1α)Sλα(zj)

其中 SλαS_{\lambda\alpha}Sλα 是软阈值函数:
Sλα(z)={z−λαif z>λα0if ∣z∣≤λαz+λαif z<−λαS_{\lambda\alpha}(z) = \begin{cases} z - \lambda\alpha & \text{if } z > \lambda\alpha \\ 0 & \text{if } |z| \leq \lambda\alpha \\ z + \lambda\alpha & \text{if } z < -\lambda\alpha \end{cases}Sλα(z)=zλα0z+λαif z>λαif zλαif z<λα

步骤5:迭代求解
由于没有闭式解,Elastic Net使用迭代算法:

  1. 初始化参数 β=0\beta = 0β=0
  2. 对每个参数 βj\beta_jβj 进行修改的软阈值更新
  3. 重复直到收敛

 

Elastic Net解决的两个问题:特征选择和稳定性

Elastic Net的重要性在于它解决了Lasso和岭回归各自的局限性。当特征高度相关时,Lasso倾向于随机选择其中一个特征,而忽略其他相关特征。这种行为就像"记住"训练数据而不是"学习"数据模式,导致模型不稳定且可能遗漏重要信息。

Elastic Net通过结合L1和L2正则化项巧妙地解决了这个问题。L1正则化项 α∑j=1p∣βj∣\alpha \sum_{j=1}^{p} |\beta_j|αj=1pβj 实现特征选择,L2正则化项 1−α2∑j=1pβj2\frac{1-\alpha}{2} \sum_{j=1}^{p} \beta_j^221αj=1pβj2 提高模型稳定性。因此,Elastic Net不仅能够进行特征选择,还能够处理相关特征,保持模型的稳定性。

 

参数选择的策略

Elastic Net有两个主要参数需要调优:

α\alphaα 参数:控制L1和L2正则化的比例

  • α=1\alpha = 1α=1:纯Lasso回归
  • α=0\alpha = 0α=0:纯岭回归
  • 0<α<10 < \alpha < 10<α<1:Elastic Net

λ\lambdaλ 参数:控制正则化的总强度

  • λ\lambdaλ 越大,正则化越强
  • λ\lambdaλ 越小,正则化越弱

 

适用场景

Elastic Net特别适用于以下场景:

高维数据:当特征数量大于样本数量时,Elastic Net能够处理这种情况,最多可以选择 nnn 个特征。

相关特征:当特征间存在相关性时,Elastic Net通过L2正则化项缓解了Lasso的问题,使得相关特征能够"共享"重要性。

需要特征选择但希望保持稳定性:当我们需要特征选择但同时又希望保持模型稳定性时,Elastic Net是最佳选择。

 

五、算法比较与选择指南

理论比较

算法正则化类型特征选择处理共线性稀疏性
线性回归
岭回归L2
Lasso回归L1一般
Elastic NetL1+L2

实际选择指南

在实际应用中,选择合适的回归算法需要综合考虑数据特征、业务需求和计算资源。

  1. 当特征数量远小于样本数量且特征间相关性较低时,线性回归是最佳选择,因为它提供了简单可解释的模型,同时计算效率很高。

  2. 当特征间存在相关性但不需要特征选择时,岭回归是理想的选择。它能够有效处理共线性问题,提供稳定的预测结果,特别适用于对预测稳定性要求较高的场景,如金融风险评估和医学诊断。

  3. 当特征数量大于样本数量且相信只有少数特征真正重要时,Lasso回归是最佳选择。它能够自动进行特征选择,产生稀疏解,同时保持较高的计算效率,这使得它成为处理高维数据的理想选择。

  4. 当面临复杂的数据集,既需要特征选择又希望保持模型稳定性时,Elastic Net是最佳选择。它结合了Lasso和岭回归的优点,能够处理高度相关的特征,同时保持特征选择能力,这使得它成为处理复杂场景的通用解决方案。

 

实践建议与最佳实践

数据预处理

无论选择哪种回归算法,数据预处理都是成功的关键。特征标准化对正则化算法尤为重要,因为正则化对特征尺度非常敏感。当特征具有不同的尺度时,正则化项会对不同特征产生不同的影响,这可能导致模型性能下降。因此,在使用岭回归、Lasso回归或Elastic Net之前,必须对特征进行标准化处理。

同时,处理缺失值和异常值也是必不可少的步骤。线性回归对异常值特别敏感,少数几个异常点就可能显著影响整个模型的参数估计。因此,在进行回归分析之前,必须仔细检查数据质量,使用适当的插补方法处理缺失值,并识别和处理异常值。

此外,特征工程在回归分析中起着重要作用。通过创建有意义的特征组合,我们可以捕捉数据中的非线性关系,从而提高模型的预测性能。例如,我们可以创建交互项、多项式特征或基于领域知识的复合特征。

 

模型评估

在评估回归模型时,我们不能只看单一指标,而应该综合考虑多个方面。预测性能指标如MSE、MAE、R²等提供了模型拟合程度的量化度量,但这些指标可能掩盖过拟合问题。因此,交叉验证性能是评估模型泛化能力的重要指标,它能够帮助我们识别过拟合并提供更可靠的性能估计。

对于需要可解释性的应用场景,特征重要性分析变得尤为重要。Lasso和Elastic Net通过特征选择提供了自然的特征重要性度量,而岭回归则需要通过其他方法如排列重要性来评估特征贡献。同时,模型稳定性也是需要考虑的重要因素,特别是在处理小样本或高维数据时,参数估计的方差可能很大,这会影响模型的可靠性。

http://www.dtcms.com/a/312702.html

相关文章:

  • [AI8051U入门第十四步]W5500实现UDP通信
  • 第六章第三节 TIM 输出比较
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现各类垃圾的分类检测识别(C#代码UI界面版)
  • 学习游戏制作记录(实现克隆攻击的克隆复制和水晶代替克隆)8.3
  • 机器学习——下采样(UnderSampling),解决类别不平衡问题,案例:逻辑回归 信用卡欺诈检测
  • LangChain缓冲记忆组件的使用与解析
  • 决策树学习全解析:从理论到实战
  • 数据结构:在链表中插入节点(Inserting in a Linked List)
  • 回归的wry
  • 浅谈Python中的os.environ:环境变量交互机制
  • Uniapp一根数据线实现真机调试运行【uniapp如何把项目运行在手机上】
  • io_submit系统调用及示例
  • 基于springboot的在线考试系统/考试信息管理平台
  • Suno的100个高质量歌词元标签(MetaTags)详解与使用指南
  • SpringBoot3.x入门到精通系列:2.4 RESTful API设计
  • 电脑声音标志显示红叉的原因
  • Spring Batch的2种STEP定义方式
  • spring-ai-alibaba 学习(二十)——graph之检查点
  • VUE2 学习笔记16 插槽、Vuex
  • 大屏项目展示
  • python学智能算法(三十一)|SVM-Slater条件理解
  • 【MySQL进阶】------MySQL程序
  • 全排列二(回溯算法)
  • 位图:用bit改变存储格局
  • Linux 文件与目录操作命令宝典
  • Apache Shenyu 本地启动及快速入门
  • 【Bluetooth】【基础篇】第二章 关于蓝牙协议栈架构与其硬件方案架构大致概述
  • 【JS】JavaScript中的this详解
  • Android 优化 - 日志 Log
  • LeetCode513:找树最左下角的值(bfs+dfs)