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

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章 支持向量机

    • 6.1 间隔与支持向量
      • 6.1.1 什么是支持向量机
      • 6.1.2 支持向量与间隔
      • 6.1.3 支持向量机的求解过程
    • 6.2 对偶问题(dual problem)
      • 6.2.1 什么是对偶问题
      • 6.2.2 如何求解支持向量机的对偶问题
    • 6.3 核函数(kernel function)
      • 6.3.1 什么是支持向量机的核函数
      • 6.3.2 常见的几种核函数
    • 6.4 软间隔(soft margin)与正则化(regularization)
    • 6.5 支持向量回归(Support Vector Regression, SVR)
    • 6.6 核方法
    • 6.7 其他问题
      • 6.7.1 SVM对噪声敏感的原因
      • 6.7.2 SVM 的优缺点
    • 6.8 总结

6.1 间隔与支持向量

6.1.1 什么是支持向量机

支持向量机(Support Vector Machine,SVM)是一种广泛应用于模式分类和回归分析的机器学习算法。它在数据分析和模式识别领域有着重要的应用,特别是在小样本、高维数据以及非线性数据分析方面表现出色。

SVM 的 基本思想是通过在特征空间中寻找一个能够最大化分类间距的超平面来进行分类。 在二分类问题中,SVM试图找到一个能够将两个类别的数据点尽可能分开的超平面。这个超平面可以被看作是一个“决策边界”,将不同类别的数据点分隔开来。SVM的目标是找到这个超平面,使得其到最近的数据点的距离(即支持向量)最大化,从而提高分类的鲁棒性和泛化能力。

SVM还可以通过核函数来处理非线性分类问题。核函数能够将原始的特征映射到更高维的空间中,从而使数据在新的空间中线性可分。这使得SVM能够处理复杂的非线性关系。

SVM的主要优点包括:

  • 高效处理高维数据:SVM适用于高维特征空间中的数据,且在处理小样本问题时表现出色。
  • 泛化能力强:SVM在训练过程中通过最大化支持向量间的间隔,能够产生具有较好泛化能力的模型。
  • 可处理非线性问题:通过核函数,SVM能够处理复杂的非线性分类问题。

需要注意的是,

  • SVM在处理大规模数据时可能会变得复杂和耗时;
  • 在选择合适的核函数和参数时,需要进行调参来获得最佳的性能。
    在这里插入图片描述

6.1.2 支持向量与间隔

前面曾提过 SVM 的 基本思想是通过在特征空间中寻找一个能够最大化分类间距的超平面来进行分类,如下图所示,中间加粗的线(实体书中红色的线)即是寻找所得的超平面,距离超平面最近的这几个训练样本点构成 “支持向量(support vector)”,两个异类支持向量到超平面的距离之和 称为 “间隔(margin)”。

在这里插入图片描述

6.1.3 支持向量机的求解过程

支持向量机(Support Vector Machine,SVM)是一种常用于分类和回归任务的机器学习算法。它的目标是找到一个超平面(在二维空间中即为一条直线,在多维空间中为一个超平面),将不同类别的样本分开,并且使得两侧距离最近的样本点到该超平面的距离最大化。这些最近的样本点被称为支持向量。

以下是支持向量机的求解过程概述:

  1. 数据准备: 首先,你需要准备带有标签的训练数据集,其中每个样本都有一个特征向量和对应的类别标签。

  2. 选择核函数: 核函数是SVM中的一个重要概念,它允许将数据从原始特征空间映射到一个更高维的空间,从而使得数据更容易分割。常用的核函数有线性核、多项式核和径向基函数(RBF)核等。

  3. 优化问题建立: SVM的目标是求解一个最优化问题,该问题的形式取决于具体的SVM类型。在标准的线性SVM中,目标是找到一个最大间隔的超平面,可以用以下形式表示:

    最小化: 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2} ||w||^2 21∣∣w2

    约束条件: y i ( w ⋅ x i + b ) ≥ 1 y_i(w \cdot x_i + b) \geq 1 yi(wxi+b)1,对所有的训练样本 ( x i , y i ) (x_i, y_i) (xi,yi),其中 y i y_i yi 是样本的类别标签(+1 或 -1)。

    在这里, w w w 是超平面的法向量, b b b 是偏置项。

  4. 求解优化问题: 优化问题可以使用不同的优化算法来求解,常见的有梯度下降法、坐标下降法等。优化的目标是找到合适的 w w w b b b,使得目标函数最小化,并满足约束条件。

  5. 支持向量的确定: 在求解过程中,部分样本点会成为支持向量,即最靠近超平面的样本点。这些样本点对于确定超平面起到关键作用。

  6. 分类和预测: 一旦得到了最优的超平面,你可以使用该超平面对新的未标记样本进行分类预测。对于线性核,分类决策可以通过计算 w ⋅ x + b w \cdot x + b wx+b 的符号来实现。

上述步骤描述了标准的线性SVM的求解过程。如果使用非线性核函数,比如RBF核,那么数据会被映射到更高维的特征空间,在这个空间中寻找最优超平面。非线性SVM的求解过程类似,但涉及到核函数的计算。

总之,支持向量机是一个强大的分类和回归算法,其核心思想是找到一个最大间隔的超平面,以有效地对不同类别的数据进行分类。

6.2 对偶问题(dual problem)

6.2.1 什么是对偶问题

为了最大化间隔,仅需最大化 ∣ ∣ w ∣ ∣ − 1 ||w||^{-1} ∣∣w1,这等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w2 ,即

min ⁡ w , b 1 2 ∥ w ∥ 2 s.t.  y i ( w T x i + b ) ⩾ 1 , i = 1 , 2 , … , m . (6.6) \begin{array}{ll} \min _{\boldsymbol{w}, b} & \frac{1}{2}\|\boldsymbol{w}\|^2 \\ \\ \text { s.t. } & y_i\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_i+b\right) \geqslant 1, \quad i=1,2, \ldots, m . \end{array} \tag{6.6} minw,b s.t. 21w2yi(wTxi+b)1,i=1,2,,m.(6.6)

对式 (6.6) 使用拉格朗日乘子法可得到其 “对偶问题”,具体来说,对式(6.6)的每条约束添加拉格朗日乘子 α i ≥ 0 \alpha_i \ge 0 αi0 ,则该问题的拉格朗日函数可写为

L ( w , b , α ) = 1 2 ∥ w ∥ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) ) (6.8) L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^2+\sum_{i=1}^m \alpha_i\left(1-y_i\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_i+b\right)\right) \tag{6.8} L(w,b,α)=21w2+i=1mαi(1yi(wTxi+b))(6.8)

其中 α = ( α 1 ; α 2 ; . . . ; α m ) \mathbf{\alpha} = (\alpha_1; \alpha_2;...;\alpha_m) α=(α1;α2;...;αm)。令 L ( w , b , α ) L(\boldsymbol{w}, b, \boldsymbol{\alpha}) L(w,b,α) ω \omega ω b b b 的偏导为零可得

w = ∑ i = 1 m α i y i x i (6.9) \boldsymbol{w}=\sum_{i=1}^m \alpha_i y_i \boldsymbol{x}_i \tag{6.9} w=i=1mαiyixi(6.9)

0 = ∑ i = 1 m α i y i (6.10) 0=\sum_{i=1}^m \alpha_i y_i \tag{6.10} 0=i=1mαiyi(6.10)

将式(6.9)代入 (6.8),即可将 L ( w , b , α ) L(\boldsymbol{w}, b, \boldsymbol{\alpha}) L(w,b,α) 中的 w \boldsymbol{w} w b b b 消去,再考虑式(6.10) 的约束,就得到式(6.6)的对偶问题

max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j s.t.  ∑ i = 1 m α i y i = 0 α i ⩾ 0 , i = 1 , 2 , … , m . (6.11) \max _{\boldsymbol{\alpha}} \sum_{i=1}^m \alpha_i-\frac{1}{2} \sum_{i=1}^m \sum_{j=1}^m \alpha_i \alpha_j y_i y_j \boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{x}_j \\ \begin{array}{ll} \\ \\ \text { s.t. } & \sum_{i=1}^m \alpha_i y_i=0 \\ \\ \\ & \alpha_i \geqslant 0, \quad i=1,2, \ldots, m . \tag{6.11} \end{array} αmaxi=1mαi21i=1mj=1mαiαjyiyjxiTxj s.t. i=1mαiyi=0αi0,i=1,2,,m.(6.11)

解出 α \boldsymbol{\alpha} α,求出 w \boldsymbol{w} w b b b 即可得到模型

f ( x ) = w T x + b = ∑ i = 1 m α i y i x i T x + b . (6.12) \begin{aligned} f(\boldsymbol{x}) & =\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b \\ & =\sum_{i=1}^m \alpha_i y_i \boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{x}+b . \tag{6.12} \end{aligned} f(x)=wTx+b=i=1mαiyixiTx+b.(6.12)

从对偶问题(6.11)求解出的 α i \alpha_i αi 是式 (6.8) 中的拉格朗日乘子,它恰对应着训练样本( x i , y i \boldsymbol{x}_i, y_i xi,yi)。注意到式(6.6)中有不等式约束,因此上述过程需满足 KKT \textbf{KKT} KKT (Karush-Kuhn-Tucker)条件,即要求

{ α i ⩾ 0 y i f ( x i ) − 1 ⩾ 0 α i ( y i f ( x i ) − 1 ) = 0. (6.13) \left\{\begin{array}{l} \alpha_i \geqslant 0 \\ y_i f\left(\boldsymbol{x}_i\right)-1 \geqslant 0 \\ \alpha_i\left(y_i f\left(\boldsymbol{x}_i\right)-1\right)=0 . \tag{6.13} \end{array}\right. αi0yif(xi)10αi(yif(xi)1)=0.(6.13)

6.2.2 如何求解支持向量机的对偶问题

支持向量机(Support Vector Machine,SVM)的对偶问题 是通过对原始优化问题进行转化得到的一个等价问题。解决对偶问题可以带来一些优势,例如在使用核函数进行非线性分类时更加方便。下面我将简要介绍支持向量机的对偶问题。

原始的支持向量机问题是一个凸二次规划问题,如前面提到的目标函数最小化:

最小化: 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2} ||w||^2 21∣∣w2

约束条件: y i ( w ⋅ x i + b ) ≥ 1 y_i(w \cdot x_i + b) \geq 1 yi(wxi+b)1,对所有的训练样本 ( x i , y i ) (x_i, y_i) (xi,yi)

支持向量机的对偶问题则是基于拉格朗日对偶性(Lagrange Duality)得到的。拉格朗日对偶性是优化问题理论中的一个重要概念,它允许将原始问题转化为一个对偶问题,从而更好地处理一些复杂的优化问题。

对于支持向量机,对偶问题的形式如下:

最大化: ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i ⋅ x j \sum_{i=1}^{N} \alpha_i - \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j x_i \cdot x_j i=1Nαi21i=1Nj=1Nαiαjyiyjxixj

约束条件: ∑ i = 1 N α i y i = 0 \sum_{i=1}^{N} \alpha_i y_i = 0 i=1Nαiyi=0

其中, α i \alpha_i αi 是拉格朗日乘子,对应于每个训练样本的约束条件。解决这个对偶问题会得到一组拉格朗日乘子的值,然后可以使用这些乘子计算出权重向量 w w w 和偏置项 b b b,进而实现分类。

对偶问题的一个重要性质是,只有支持向量对应的拉格朗日乘子 α i \alpha_i αi 不为零,其他非支持向量的乘子都为零。这意味着只有支持向量对最终的分类超平面有影响,这也是支持向量机名称的由来。

总之,支持向量机的对偶问题是通过拉格朗日对偶性将原始问题转化得到的,通过解决对偶问题可以更好地理解支持向量机算法,尤其在使用核函数处理非线性问题时更为便捷。

6.3 核函数(kernel function)

6.3.1 什么是支持向量机的核函数

核函数 是支持向量机通过某非线性变换将输入空间映射到高维特征空间,以实现数据分类或回归的目的。

K = [ κ ( x 1 , x 1 ) ⋯ κ ( x 1 , x j ) ⋯ κ ( x 1 , x m ) ⋮ ⋱ ⋮ ⋱ ⋮ κ ( x i , x 1 ) ⋯ κ ( x i , x j ) ⋯ κ ( x i , x m ) ⋮ ⋱ ⋮ ⋱ ⋮ κ ( x m , x 1 ) ⋯ κ ( x m , x j ) ⋯ κ ( x m , x m ) ] \mathbf{K}=\left[\begin{array}{ccccc} \kappa\left(\boldsymbol{x}_1, \boldsymbol{x}_1\right) & \cdots & \kappa\left(\boldsymbol{x}_1, \boldsymbol{x}_j\right) & \cdots & \kappa\left(\boldsymbol{x}_1, \boldsymbol{x}_m\right) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_1\right) & \cdots & \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right) & \cdots & \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_m\right) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa\left(\boldsymbol{x}_m, \boldsymbol{x}_1\right) & \cdots & \kappa\left(\boldsymbol{x}_m, \boldsymbol{x}_j\right) & \cdots & \kappa\left(\boldsymbol{x}_m, \boldsymbol{x}_m\right) \end{array}\right] K= κ(x1,x1)κ(xi,x1)κ(xm,x1)κ(x1,xj)κ(xi,xj)κ(xm,xj)κ(x1,xm)κ(xi,xm)κ(xm,xm)

具体的求解过程请参照原书籍或相关资料。

6.3.2 常见的几种核函数

名称表达式参数
线性核 κ ( x i , x j ) = x i T x j \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{x}_j κ(xi,xj)=xiTxj
多项式核 κ ( x i , x j ) = ( x i T x j ) d \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\left(\boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{x}_j\right)^d κ(xi,xj)=(xiTxj)d d ≥ 1 d\ge1 d1 为多项式的次数
高斯核 κ ( x i , x j ) = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\exp \left(-\frac{\left||\boldsymbol{x}_i-\boldsymbol{x}_j\right||^2}{2 \sigma^2}\right) κ(xi,xj)=exp(2σ2xixj2) σ > 0 \sigma > 0 σ>0 为高斯核的带宽(width)
拉普拉斯核 κ ( x i , x j ) = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ σ ) \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\exp \left(-\frac{\left| | \boldsymbol{x}_i-\boldsymbol{x}_j\right| |}{\sigma}\right) κ(xi,xj)=exp(σxixj) σ \sigma σ > 0
Sigmoid 核 κ ( x i , x j ) = tanh ⁡ ( β x i T x j + θ ) \kappa\left(\boldsymbol{x}_i, \boldsymbol{x}_j\right)=\tanh \left(\beta \boldsymbol{x}_i^{\mathrm{T}} \boldsymbol{x}_j+\theta\right) κ(xi,xj)=tanh(βxiTxj+θ)tanh 为双曲正切函数, β > 0 , θ < 0 \beta > 0, \theta < 0 β>0,θ<0

6.4 软间隔(soft margin)与正则化(regularization)

软间隔是支持向量机的一个概念,用于处理在数据中存在一些噪声或异常值的情况。

软间隔的主要思想是在最大化间隔(超平面到支持向量的距离)的同时,引入一个松弛因子(slack variable)来容忍一些分类错误。这个松弛因子可以通过调整模型的超参数来控制,通常由正则化参数 C C C 来表示。较小的 C C C 值会放宽软间隔,允许更多的分类错误,而较大的 C C C 值会加强间隔,更强调减小分类错误。这样,通过调整 C C C 的值,可以在模型的偏差和方差之间找到一个平衡点,以满足实际数据的特性。

6.5 支持向量回归(Support Vector Regression, SVR)

支持向量机回归(Support Vector Machine Regression,SVM回归)是一种用于解决回归问题的机器学习算法,与支持向量机分类(SVM分类)类似,但其目标是拟合数据并预测连续数值输出,而不是离散的类别。

SVM回归的基本思想是寻找一个超平面(在特征空间中的线性函数),以最佳方式拟合训练数据的分布,同时尽量使数据点落在超平面周围的间隔带(或者说支持向量)内。与SVM分类不同,SVM回归的目标是最小化模型的预测误差,而不是最大化间隔。

SVM回归可以处理线性回归和非线性回归问题,通过使用核函数来处理非线性关系。与传统的线性回归方法相比,SVM回归在处理异常值和噪声方面通常更具鲁棒性,并且可以适应复杂的数据分布。然而,选择适当的超参数和核函数仍然是一个重要的挑战。

6.6 核方法

支持向量机(Support Vector Machine,SVM)的核方法是一种用于处理非线性分类和回归问题的重要技术。核方法允许SVM在原始特征空间中无法线性分隔的数据集上进行高效的非线性建模。核方法的核心思想是将数据映射到一个高维特征空间,使得在这个特征空间中数据更容易线性分隔。这个映射通常通过一个称为核函数(Kernel Function)的数学函数来实现。核函数的相关内容在 6.1.3 节中已经介绍。核函数直接决定了支持向量机的最终性能,但遗憾的是,核函数的选择是一个未解决问题。

核方法的关键优势在于,它们能够在高维特征空间中有效地进行计算,而无需显式计算映射后的特征向量,从而节省了计算成本。这使得SVM可以处理非常大的数据集和复杂的非线性问题。

在使用SVM时,选择合适的核函数和核函数参数是至关重要的,因为它们会直接影响模型的性能。通常需要通过交叉验证等技术来调整这些超参数,以获得最佳的模型性能。

6.7 其他问题

节选部分课本上对应的习题

6.7.1 SVM对噪声敏感的原因

支持向量机(Support Vector Machine,SVM)在某些情况下对噪声敏感的原因可以归结为以下几个方面:

  • 间隔带的影响:SVM在训练时会尽量找到一个能够将正负样本分开的超平面,并确保在这个超平面周围有一个较大的间隔带(Margin)。噪声数据点可能位于间隔带内部,而SVM为了最大化间隔带,会对这些噪声数据点产生较大的敏感性,导致分类边界的波动。

  • 硬间隔与软间隔:SVM有硬间隔(Hard Margin)和软间隔(Soft Margin)两种形式。硬间隔要求所有训练数据点都正确分类且间隔带为最大,这在存在噪声的情况下可能导致模型过于复杂,容易过拟合噪声。软间隔则允许一定数量的数据点落在间隔带内部,但在存在噪声时,模型可能会过于容忍噪声而导致性能下降。

  • 异常值的影响:噪声数据通常被视为异常值,它们可能远离其他数据点,导致SVM在寻找超平面时过于受到这些异常值的影响。SVM试图最小化误分类的样本数量,因此会努力将异常值正确分类,这可能导致边界的扭曲和性能下降。

  • 数据不平衡:如果数据集中的噪声占据了较大比例,那么SVM可能会偏向于学习噪声而忽略真正的信号。这在数据不平衡的情况下尤为明显,因为噪声数据点数量多于真正的样本。

6.7.2 SVM 的优缺点

优点

  1. 高维数据处理能力:SVM在高维空间中表现良好,适用于处理具有大量特征的数据集。这使得它在文本分类、图像识别和生物信息学等领域广泛应用。

  2. 有效的内存使用:SVM只需要存储支持向量,这些向量通常比整个数据集小得多,因此在内存方面非常高效。

  3. 泛化能力强:SVM通过最大化间隔,使得它具有较好的泛化能力,对于新的未见数据也有较好的分类性能。

  4. 非线性分类:SVM可以使用核函数来处理非线性分类问题,将数据映射到更高维的特征空间中,从而可以在原始特征空间中无法解决的问题上表现良好。

  5. 对噪声的鲁棒性:SVM对于一些噪声和异常值的存在具有一定的鲁棒性,因为它主要关注于支持向量。

缺点

  1. 计算开销大:SVM在处理大规模数据集时可能会很慢,因为在训练过程中需要计算所有数据点之间的距离。此外,对于非线性核函数,计算的复杂性可能会更高。

  2. 选择合适的核函数和参数:选择适当的核函数和参数是SVM的一个挑战,不同的选择可能导致不同的性能结果。

  3. 数据不平衡问题:当类别不平衡时,SVM可能会受到影响,因为它倾向于将支持向量放在占多数的类别上。在这种情况下,需要考虑使用类别平衡技术。

  4. 不适用于大规模多类分类问题:SVM本质上是一个二元分类器,要进行多类分类需要使用一对多(One-vs-Rest)或一对一(One-vs-One)的策略,这可能会导致分类问题变得更加复杂。

  5. 解释性差:SVM产生的模型通常不太容易解释,特别是在高维空间中,它难以提供关于特征的直观理解。

总之,SVM是一个强大的分类和回归算法,特别适用于高维数据和二元分类问题。然而,它需要仔细调优参数,对大规模数据集可能不够高效,同时在多类分类和解释性方面存在一些挑战。选择SVM还应考虑问题的特定要求和数据集的性质。

6.8 总结

支持向量机应该也是面试时提问重灾区,很多事情总是会有 “似懂非懂” 之感。

共勉 。

Smileyan
2023.09.17 16:27

相关文章:

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章 支持向量机 6.1 间隔与支持向量6.1.1 什么是支持向量机6.1.2 支持向量与间隔6.1.3 支持向量机的求解过程 6.2 对偶问题&#xff08;dual problem&#xff09;6.2.1 什么是对偶问题6.2.2 如何求解支持向量机的对偶问题 6.3 核函数&#xff08;kernel function&#xff09…...

蓝桥杯每日一题2023.9.23

4961. 整数删除 - AcWing题库 题目描述 分析 注&#xff1a;如果要进行大量的删除操作可以使用链表 动态求最小值使用堆&#xff0c;每次从堆中取出最小值的下标然后在链表中删除 注意long long 代码解释&#xff1a; while(k --){auto t q.top();q.pop();res t.first;i…...

C语言数组和指针笔试题(三)(一定要看)

目录 字符数组四例题1例题2例题3例题4例题5例题6例题7 结果字符数组五例题1例题2例题3例题4例题5例题6例题7结果字符数组六例题1例题2例题3例题4例题5例题6例题7 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412;个…...

leetcode11 盛水最多的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 示例 输入&#xff1a;[1,8,6,2,5,4,8,…...

进入数据结构的世界

数据结构和算法的概述 一、什么是数据结构二、什么是算法三、如何去学习数据结构和算法四、算法的时间复杂度和空间复杂度4.1 算法效率4.2 大O的渐进表示法4.3 时间复杂度4.4 空间复杂度4.5 常见复杂度对比 一、什么是数据结构 数据结构是计算机存储、组织数据的方式。&#x…...

stm32之看门狗

STM32 有两个看门狗&#xff0c;独立看门狗和窗口看门狗&#xff0c;独立看门狗又称宠物狗&#xff0c;窗 口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时&#xff0c;产生系统复位&#xff0c;对于窗口型看门狗同…...

纤维蛋白单体(FM)介绍

纤维蛋白单体&#xff08;FM&#xff09;是血栓形成的早期产物&#xff0c;是纤维蛋白原&#xff08;Fibrinogen&#xff0c;Fbg&#xff09;在凝血酶&#xff08;Thrombin&#xff09;的作用下&#xff0c;脱掉肽A&#xff08;Fibrinopeptide A&#xff0c;Fp A&#xff09;与…...

知识图谱实战导论:从什么是KG到LLM与KG/DB的结合实战

前言 本文侧重讲解&#xff1a; 什么是知识图谱LLM与langchain/数据库/知识图谱的结合应用 比如&#xff0c;虽说基于知识图谱的问答 早在2019年之前就有很多研究了&#xff0c;但谁会想到今年KBQA因为LLM如此突飞猛进呢 第一部分 知识图谱入门导论 //待更.. 第二部分 LLM与…...

第5章 会话与会话技术

第5章 会话与会话技术 一. 单选题&#xff08;共5题&#xff0c;50分&#xff09;二. 判断题&#xff08;共5题&#xff0c;50分&#xff09; 一. 单选题&#xff08;共5题&#xff0c;50分&#xff09; (单选题) 阅读下面代码&#xff1a; Book book BookDB.getBook(id)…...

IDEA2023新UI回退老UI

idea2023年发布了新UI&#xff0c;如下所示 但是用起来真心不好用&#xff0c;各种位置也是错乱&#xff0c;用下面方法可以回退老UI...

ElasticSearch(三)

1.数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这些…...

【LinkedHashMap】146. LRU 缓存

146. LRU 缓存 解题思路 与普通的 HashMap 不同&#xff0c;LinkedHashMap 会保持元素的有序性。这可以在某些情况下提供更可预测的迭代顺序直接获取元素 因为使用到该元素 将该元素重新放入队尾 表示最近使用该元素写入元素&#xff0c;首先如果该元素原来存在 那么需要将ke…...

Opencv-python去图标与水印方案实践

RGB色彩模式是工业界的一种颜色标准&#xff0c;是通过对红&#xff08;R&#xff09;、绿&#xff08;G&#xff09;、蓝&#xff08;B&#xff09;三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的&#xff0c;RGB即是代表红、绿、蓝三个通道的颜色&#xff…...

自己写过比较蠢的代码:从失败中学习的经验

文章目录 引言1. 代码没有注释2. 长函数和复杂逻辑3. 不恰当的变量名4. 重复的代码5. 不适当的异常处理6. 硬编码的敏感信息7. 没有单元测试结论 &#x1f389; 自己写过比较蠢的代码&#xff1a;从失败中学习的经验 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&a…...

C语言 cortex-A7核 点LED灯 (附 汇编实现、使用C语言 循环实现、使用C语言 封装函数实现【重要、常用】)

1 汇编实现 text global _start start: ************** LED1点灯 ---> PE10 **************/ ************** RCC章节初始化 **************/ CC_INIT:1.使能GPIOE组控制器&#xff0c;通过RCC_MP_AHB4ENSETR寄存器设置GPIOE组使能0x50000A28[4] 1ldr r0,0x50000A28 准…...

LABVIEW 实战案例1--温度报警系统

图1 温度报警系统前面板 图2 温度报警系统后面板...

【力扣】292. Nim 游戏

题目描述 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。你们轮流进行自己的回合&#xff0c; 你作为先手 。每一回合&#xff0c;轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。请编写一个函数…...

IAP固件升级分几步?(Qt上位机、)

前言 这周一直想做一个IAP固件升级的上位机&#xff0c;然后把升级流程全都搞懂 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com IAP原理 IAP的原理我就不多赘述了&#xff0c;这里贴上几位大佬的文章 STM32CubeIDE IAP原理讲解&#xff0c;及U…...

Otter改造 增加springboot模块和HTTP调用功能

环境搭建 & 打包 环境搭建&#xff1a; 进入 $otter_home/lib 目录执行&#xff1a;bash install.sh 打包&#xff1a; 进入$otter_home目录执行&#xff1a;mvn clean install -Dmaven.test.skip -Denvrelease发布包位置&#xff1a;$otter_home/target 项目背景 阿里…...

Vue.js vs React:哪一个更适合你的项目?

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...