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

机器学习笔记之最优化理论与方法(三)凸集的简单认识(下)

机器学习笔记之最优化理论与方法——凸集的简单认识[下]

  • 引言
    • 回顾:基本定义——凸集
    • 关于保持集合凸性的运算
      • 仿射变换
    • 凸集基本性质:投影定理
    • 点与凸集的分离
    • 支撑超平面定理

引言

继续凸集的简单认识(上)进行介绍,本节将介绍凸集的基本性质以及相关定理

回顾:基本定义——凸集

关于凸集 ( Convex Set ) (\text{Convex Set}) (Convex Set)定义可简单表述为:可行域 C \mathcal C C中任意两点间的连线,其连线上的任意一点仍在可行域 C \mathcal C C范围内。对应数学符号表示如下:
∀ x , y ∈ C ; ∀ λ ∈ [ 0 , 1 ] ⇒ λ ⋅ x + ( 1 − λ ) ⋅ y ∈ C \forall x,y \in \mathcal C;\forall \lambda \in [0,1] \Rightarrow \lambda \cdot x + (1 - \lambda) \cdot y \in \mathcal C x,yC;λ[0,1]λx+(1λ)yC
如果记线性规划 min ⁡ { c T x ∣ A x = b , x ≥ 0 } \min \{c^T x \mid \mathcal A x = b,x \geq 0\} min{cTxAx=b,x0}最优解组成的集合为 S \mathcal S S,那么 S \mathcal S S是否为凸集 ? ? ?

自然是凸集

  • 最优解集合 S \mathcal S S中任取两点 x 1 , x 2 ∈ S x_1,x_2 \in \mathcal S x1,x2S,必然有:
    其中这里 v ∗ v^* v记作可行域范围内,使 c T x c^Tx cTx达到最小的最优解。
    c T x 1 = c T x 2 = v ∗ c^Tx_1 = c^Tx_2 = v^* cTx1=cTx2=v
  • 根据凸集定义 ∀ λ ∈ [ 0 , 1 ] \forall \lambda \in [0,1] λ[0,1],观察 λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 \lambda \cdot x_1 + (1 - \lambda) \cdot x_2 λx1+(1λ)x2是否也在最优解集合 S \mathcal S S内即可。将该点代入有:
    c T [ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ] = λ ⋅ c T x 1 ⏟ v ∗ + ( 1 − λ ) ⋅ c T x 2 ⏟ v ∗ = v ∗ \begin{aligned} & \quad c^T[\lambda \cdot x_1 + (1 - \lambda) \cdot x_2] \\ & = \lambda \cdot \underbrace{c^Tx_1}_{v^*} + (1 - \lambda) \cdot \underbrace{c^Tx_2}_{v^*} \\ & = v^* \end{aligned} cT[λx1+(1λ)x2]=λv cTx1+(1λ)v cTx2=v
    可以看出: c T [ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ] c^T[\lambda \cdot x_1 + (1 - \lambda) \cdot x_2] cT[λx1+(1λ)x2]依然是最优解。也就是说: λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ∈ S \lambda \cdot x_1 + (1 - \lambda) \cdot x_2 \in \mathcal S λx1+(1λ)x2S S \mathcal S S是凸集得证。

关于保持集合凸性的运算

所谓保持集合凸性的运算,即凸集执行一系列运算后,其结果是凸集的性质不发生变化

C 1 , C 2 ∈ R n \mathcal C_1,\mathcal C_2 \in \mathbb R^n C1,C2Rn,并且是凸集。则有:

  • 交集 C 1 ∩ C 2 = { x ∣ x ∈ C 1 , x ∈ C 2 } \mathcal C_1 \cap \mathcal C_2 = \{x \mid x \in \mathcal C_1,x \in \mathcal C_2\} C1C2={xxC1,xC2}同样是凸集
    相反,并集 C 1 ∪ C 2 \mathcal C_1 \cup \mathcal C_2 C1C2未必是凸集~
  • 关于集合的加减运算 C 1 ± C 2 = { x ± y ∣ x ∈ C 1 , y ∈ C 2 } \mathcal C_1 \pm \mathcal C_2 = \{x \pm y \mid x \in \mathcal C_1,y \in \mathcal C_2\} C1±C2={x±yxC1,yC2}同样是凸集

如果存在一个由 n n n维向量组成的集合 S \mathcal S S
{ S = { x ∈ R n ∣ ∣ P ( t ) ∣ ≤ 1 , ∣ t ∣ ≤ π 3 } P ( t ) = ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) \begin{cases} \begin{aligned} & \mathcal S = \left\{x \in \mathbb R^n \mid |\mathcal P(t)| \leq 1, |t| \leq \frac{\pi}{3} \right\} \\ & \mathcal P(t) = \sum_{i=1}^n x_i \cdot \cos (i \cdot t) \end{aligned} \end{cases} S={xRnP(t)1,t3π}P(t)=i=1nxicos(it)
那么集合 S \mathcal S S是否为凸集 ? ? ?

  • 首先,由于 S \mathcal S S是关于 x x x的集合,因而 P ( t ) \mathcal P(t) P(t)可看作是一个关于 x x x线性表达式。并且有:
    − 1 ≤ ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) ≤ 1 -1 \leq \sum_{i=1}^n x_i \cdot \cos (i \cdot t) \leq 1 1i=1nxicos(it)1
  • 如果 t t t给定,那么可以将上式视作: { ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) ≤ 1 ∑ i = 1 n x i ⋅ cos ⁡ ( i ⋅ t ) ≥ − 1 \begin{cases} \sum_{i=1}^n x_i \cdot \cos(i \cdot t) \leq 1 \\ \sum_{i=1}^n x_i \cdot \cos(i \cdot t) \geq -1 \\ \end{cases} {i=1nxicos(it)1i=1nxicos(it)1所描述的一对半空间的交集
  • 由于 − π 3 ≤ t ≤ π 3 \begin{aligned}-\frac{\pi}{3}\leq t \leq \frac{\pi}{3}\end{aligned} 3πt3π,是一个连续的范围,那么:可以在该范围内取出无穷个 t t t,从而得到无穷对半空间的交集。而半空间自身是凸集,那么无穷对半空间的交集同样是凸集。因而 S \mathcal S S是凸集。
    准确的说, S \mathcal S S是一个多面体。

如果 n = 2 n = 2 n=2,此时仅包含两个变量 x 1 , x 2 x_1,x_2 x1,x2。可以通过 2 2 2维图像的方式观察这个多面体凸集描述的范围。具体代码如下:
t t t固定的情况下,函数 ∣ P ( t ) ∣ = 1 ⇒ P ( t ) = ± 1 |\mathcal P(t)| = 1 \Rightarrow \mathcal P(t) = \pm1 P(t)=1P(t)=±1可看做是 ϕ ( x 1 , x 2 ) \phi(x_1,x_2) ϕ(x1,x2)的表示。令 ϕ ( x 1 , x 2 ) = P ( t ) ∓ 1 ≜ 0 \phi(x_1,x_2) = \mathcal P(t) \mp 1 \triangleq 0 ϕ(x1,x2)=P(t)10,从而得到 x 1 , x 2 x_1,x_2 x1,x2之间的函数关系:
x 1 ⋅ cos ⁡ t + x 2 ⋅ cos ⁡ ( 2 ⋅ t ) = ± 1 ⇒ x 1 = ± 1 − x 2 ⋅ cos ⁡ ( 2 ⋅ t ) cos ⁡ t \begin{aligned} & \quad x_1 \cdot \cos t + x_2 \cdot \cos (2 \cdot t) = \pm1 \\ & \Rightarrow x_1 = \pm\frac{1 - x_2 \cdot \cos (2 \cdot t)}{\cos t} \end{aligned} x1cost+x2cos(2t)=±1x1=±cost1x2cos(2t)

import numpy as np
import matplotlib.pyplot as plt
import mathx = np.linspace(-2.5,2,100)
tChoice = np.linspace(-1 * (math.pi / 3),math.pi / 3,30)def phi(x1,t):return (1 - x1 * math.cos(2 * t)) / math.cos(t)def phiTrans(x1,t):return (x1 * math.cos(2 * t) - 1) / math.cos(t)for t in tChoice:y = list()y2 = list()for x1 in x:y.append(phi(x1,t))y2.append(phiTrans(x1,t))plt.plot(x,y,c="tab:red")plt.plot(x,y2,c="tab:red")
plt.show()

对应图像结果表示如下:
中间围成的区域就是 n = 2 n=2 n=2条件下的多面体凸集 S \mathcal S S
多面体凸集示例

仿射变换

仿射变换 ( Affine Transformation ) (\text{Affine Transformation}) (Affine Transformation)同样是保持集合凸性的一种运算。具体描述如下:
需要注意的是:线性变换是特殊的仿射变换

假设函数 f ( ⋅ ) : R n ↦ R m f(\cdot):\mathbb R^n \mapsto \mathbb R^m f():RnRm仿射函数,即 f ( x ) = A x + b f(x) = \mathcal Ax + b f(x)=Ax+b。其中 A ∈ R m × n , b ∈ R m \mathcal A \in \mathbb R^{m \times n},b \in \mathbb R^{m} ARm×n,bRm,则有如下结论:
其中 f − 1 ( ⋅ ) f^{-1}(\cdot) f1()表示仿射函数 f ( ⋅ ) f(\cdot) f()的逆

  • 如果 C \mathcal C C凸集 ⇒ f ( C ) = { f ( x ) ∣ x ∈ C } \Rightarrow f(\mathcal C) = \{f(x) \mid x \in \mathcal C\} f(C)={f(x)xC}也是凸集
  • 如果 C \mathcal C C凸集 ⇒ f − 1 ( C ) = { x ∣ f ( x ) ∈ C } \Rightarrow f^{-1}(\mathcal C) = \{x \mid f(x) \in \mathcal C\} f1(C)={xf(x)C}也是凸集

以第一项为例:对于 ∀ y 1 , y 2 ∈ f ( C ) \forall y_1,y_2 \in f(\mathcal C) y1,y2f(C),必然有:
{ y 1 = A x 1 + b y 2 = A x 2 + b x 1 , x 2 ∈ C \begin{cases} y_1 = \mathcal Ax_1 + b \\ y_2 = \mathcal Ax_2 + b \end{cases}\quad x_1,x_2 \in \mathcal C {y1=Ax1+by2=Ax2+bx1,x2C
根据凸集的定义,对 ∀ λ ∈ [ 0 , 1 ] \forall \lambda \in [0,1] λ[0,1],将 λ ⋅ y 1 + ( 1 − λ ) ⋅ y 2 \lambda \cdot y_1 + (1 - \lambda) \cdot y_2 λy1+(1λ)y2展开,有:
λ ⋅ y 1 + ( 1 − λ ) ⋅ y 2 = λ ( A x 1 + b ) + ( 1 − λ ) ⋅ ( A x 2 + b ) = A [ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ] + b \begin{aligned} \lambda \cdot y_1 + (1 - \lambda) \cdot y_2 & = \lambda (\mathcal Ax_1 + b) + (1 - \lambda) \cdot(\mathcal Ax_2 + b) \\ & = \mathcal A [\lambda \cdot x_1 + (1 - \lambda) \cdot x_2] + b \end{aligned} λy1+(1λ)y2=λ(Ax1+b)+(1λ)(Ax2+b)=A[λx1+(1λ)x2]+b
由于 x 1 , x 2 ∈ C x_1,x_2 \in \mathcal C x1,x2C,且 C \mathcal C C凸集,必然有:
∀ λ ∈ [ 0 , 1 ] ⇒ λ ⋅ x 1 + ( 1 − λ ) ⋅ x 2 ∈ C \forall \lambda \in [0,1] \Rightarrow \lambda \cdot x_1 + (1 - \lambda) \cdot x_2 \in \mathcal C λ[0,1]λx1+(1λ)x2C
从而有:
λ ⋅ y 1 + ( 1 − λ ) ⋅ y 2 ∈ f ( C ) \lambda \cdot y_1 + (1 - \lambda) \cdot y_2 \in f(\mathcal C) λy1+(1λ)y2f(C)
因而 f ( C ) f(\mathcal C) f(C)也是凸集

一些特殊的仿射变换有:
其中 α , β \alpha,\beta α,β是常数。

  • 放缩 ( Scaling ) (\text{Scaling}) (Scaling)
    α ⋅ C = { α ⋅ x ∣ x ∈ C } \alpha \cdot \mathcal C = \{\alpha \cdot x \mid x \in \mathcal C\} αC={αxxC}
  • 平移 ( Translation ) (\text{Translation}) (Translation)
    β + C = { β + x ∣ x ∈ C } \beta+ \mathcal C = \{\beta+ x \mid x \in \mathcal C\} β+C={β+xxC}
  • 投影 ( Projection ) (\text{Projection}) (Projection)
    { x 1 ∣ ( x 1 x 2 ) ∈ C } \left\{x^1 \mid \begin{pmatrix}x^1 \\ x^2\end{pmatrix} \in \mathcal C\right\} {x1(x1x2)C}

对应示例图像表示如下:
特殊仿射变化示例

凸集基本性质:投影定理

投影定理描述如下:
假设 C ⊂ R n \mathcal C \subset \mathbb R^n CRn,是一个非空闭凸集 y ∈ R n y \in \mathbb R^n yRn y ∉ C y \notin \mathcal C y/C,有:

  • 存在唯一的点 x ˉ ∈ C \bar{x} \in \mathcal C xˉC,使得 x ˉ \bar{x} xˉ y y y C \mathcal C C的距离最小的点,且有:
    距离最小的点即投影点
    ∥ x ˉ − y ∥ = inf ⁡ { ∥ x − y ∥ ∣ x ∈ C } > 0 \|\bar {x} - y\| = \inf\{\|x - y\| \mid x \in \mathcal C\} > 0 xˉy=inf{xyxC}>0
  • x ˉ \bar{x} xˉ y y y C \mathcal C C最小距离点充要条件是:
    ( x − x ˉ ) T ( x ˉ − y ) ≤ 0 ∀ x ∈ C (x - \bar{x})^T (\bar{x} - y) \leq 0 \quad \forall x \in \mathcal C (xxˉ)T(xˉy)0xC

证明过程:

  • 存在性
    关于 y y y C \mathcal C C的距离,本质上是描述 y y y与凸集 C \mathcal C C中点的距离,假设 x ′ ∈ C x' \in \mathcal C xC,对应目标函数表示如下:
    这里使用二范数表示 x ′ x' x y y y之间的距离。
    min ⁡ f ( x ) = ∥ y − x ′ ∥ 2 2 \min f(x) = \|y - x'\|_2^2 minf(x)=yx22
    但我们要找的是距离最小的点,而这个 x ′ x' x可能并不是那个点。因而我们要找的距离最小点的可行域表示为:
    s.t.  x ∈ C ∩ N d ( y ) \text{s.t. } x \in \mathcal C \cap \mathcal N_d(y) s.t. xCNd(y)
    其中 d = ∣ ∣ y − x ′ ∣ ∣ 2 2 d = ||y - x'||_2^2 d=∣∣yx22;而 N d ( y ) \mathcal N_d(y) Nd(y)表示 y y y为圆心,半径为 d d d的圆所描述的范围。也就是说:如果 x ′ x' x不是距离最小点,并不需要重新从范围 C \mathcal C C中寻找点,只需要在交集内寻找距离最小点即可。对应图像表示如下:
    投影定理存在性示例
    由于 C \mathcal C C非空闭凸集,说明这个交集有界。在连续函数(距离函数)在有界空间内求最小值,那么该值必然可达

  • 唯一性(反证):
    对应图像表示如下~
    投影定理唯一性示例
    不妨设 x ′ , x ˉ ( x ˉ ≠ x ′ ) x',\bar{x}(\bar x \neq x') x,xˉ(xˉ=x)均是投影点,从而有:
    d = ∥ y − x ˉ ∥ 2 2 = ∥ y − x ′ ∥ 2 2 d = \|y - \bar{x}\|_2^2 = \|y - x'\|_2^2 d=yxˉ22=yx22
    由于 x ˉ ≠ x ′ \bar{x} \neq x' xˉ=x,连接两点,根据凸集合的定义:两点连线上的点必然也 ∈ C \in \mathcal C C。此时, x ′ , x ˉ , y x',\bar{x},y x,xˉ,y三个点构成一个等腰三角形,从而有:线段 x ˉ x ′ \bar{x}x' xˉx上的点到 y y y的距离必然小于 d d d。从而得出: x ˉ , x ′ \bar{x},x' xˉ,x不是投影点,这与假设冲突。因而 x ′ , x ˉ x',\bar{x} x,xˉ两点重合,投影点具有唯一性

  • 充要条件:观察下面图像:
    充要条件示例
    假设此时已经找到了投影点 x ˉ \bar{x} xˉ,必然有:

    • 向量 y − x ˉ y - \bar{x} yxˉ x ˉ \bar{x} xˉ在凸集 C \mathcal C C的切线垂直;
    • 并且凸集 C \mathcal C C中除去 x ˉ \bar{x} xˉ之外的其他点均与 y − x ˉ y - \bar{x} yxˉ处在由切线划分的不同的半空间

    从而有:向量 y − x ˉ y - \bar{x} yxˉ x − x ˉ ( ∀ x ∈ C ) x - \bar{x}(\forall x \in \mathcal C) xxˉ(xC)之间的夹角总是大于等于 9 0 。 90^。 90。即:
    等于 9 0 。 90^。 90 x , x ˉ x,\bar{x} x,xˉ重合~
    ( y − x ˉ ) T ( x − x ˉ ) = ∥ y − x ˉ ∥ ⋅ ∥ x − x ˉ ∥ cos ⁡ θ ≤ 0 (y - \bar{x})^T (x - \bar{x}) = \|y - \bar{x}\| \cdot \|x - \bar{x}\| \cos \theta \leq 0 (yxˉ)T(xxˉ)=yxˉxxˉcosθ0
    反之同理。

点与凸集的分离

定理描述如下:
假设 C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2是两个非空凸集,若存在非零 α ∈ R n \alpha \in \mathbb R^n αRn b ∈ R b \in \mathbb R bR使得
或者写作: α T z ≤ α T x ∀ x ∈ C 1 , ∀ z ∈ C 2 \alpha^T z \leq \alpha^Tx \quad \forall x \in \mathcal C_1,\forall z \in \mathcal C_2 αTzαTxxC1,zC2
{ α T x ≥ b ∀ x ∈ C 1 α T z ≤ b ∀ z ∈ C 2 \begin{cases} \alpha^T x \geq b \quad \forall x \in \mathcal C_1 \\ \alpha^T z \leq b \quad \forall z \in \mathcal C_2 \end{cases} {αTxbxC1αTzbzC2
则称超平面 H = { x ∣ α T x = b } \mathcal H = \{x \mid \alpha^T x = b\} H={xαTx=b}分离集合 C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2

严格分离
观察上述的分离定义,由于超平面可以取等,使得凸集 C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2与超平面 H \mathcal H H之间可能存在交集。而严格分离定义在上述分离定义的基础上, C 1 , C 2 \mathcal C_1,\mathcal C_2 C1,C2均不与超平面 H \mathcal H H之间存在交集。即:
{ α T x > b ∀ x ∈ C 1 α T z < b ∀ z ∈ C 2 \begin{cases} \alpha^T x > b \quad \forall x \in \mathcal C_1 \\ \alpha^T z < b \quad \forall z \in \mathcal C_2 \end{cases} {αTx>bxC1αTz<bzC2
基于上述定义,从而有如下推论:

  • 两个不相交的非空凸集,它们一定能分离
    相反,如果存在集合不是凸集,那就不一定了~
  • 假设 C ⊂ R n \mathcal C \subset \mathbb R^n CRn非空闭凸集,点 y ∉ C y \notin \mathcal C y/C,必然存在超平面 H \mathcal H H y y y C \mathcal C C分离
    例如上面描述投影定理充要条件中的红色虚线。实际上:垂直于 y − x ˉ y - \bar{x} yxˉ并且经过线段 x ˉ y \bar{x}y xˉy上的超平面都是满足要求的
    { α = y − x ˉ α T ( y − x ) ≥ 0 ⇒ α T y ≥ α T x ∀ x ∈ C \begin{cases} \alpha = y - \bar{x} \\ \alpha^T(y - x) \geq 0 \Rightarrow \alpha^Ty \geq \alpha^T x \quad \forall x \in \mathcal C \end{cases} {α=yxˉαT(yx)0αTyαTxxC
    上面式子描述的向量 y − x y-x yx描述的是从凸集 C \mathcal C C中的任意一点指向 y y y的向量,而该向量和向量 y − x ˉ y - \bar{x} yxˉ之间的夹角必然是锐角

支撑超平面定理

定理描述如下:
假设 C ∈ R n \mathcal C \in \mathbb R^n CRn非空闭凸集,其中 x ˉ \bar{x} xˉ C \mathcal C C边界点 x ˉ ∈ ∂ C \bar{x} \in \partial \mathcal C xˉC,则存在非零向量 α ∈ R n \alpha \in \mathbb R^n αRn使得:
其中 ∂ C \partial \mathcal C C表示集合 C \mathcal C C边界点 int C \text{int} \mathcal C intC表示集合 C \mathcal C C不包含边界点的所有内点 c l C cl\mathcal C clC表示由内点、边界点构成的集合(闭包) ⇒ \Rightarrow 非空的闭凸集合
α T x ≤ α T x ˉ ∀ x ∈ c l C \alpha^T x \leq \alpha^T \bar{x} \quad \forall x \in \mathcal clC αTxαTxˉxclC
此时,也称超平面 H = { x ∈ R n ∣ α T x = α T x ˉ } \mathcal H = \{x \in \mathbb R^n \mid \alpha^T x = \alpha^T \bar{x}\} H={xRnαTx=αTxˉ}凸集 C \mathcal C C x ˉ \bar{x} xˉ处的支撑超平面。对应图像表示如下:
支撑超平面定理示例
证明过程
已知 x ˉ ∈ ∂ C \bar{x} \in \partial \mathcal C xˉC,要证: ∃ α ≠ 0 \exist \alpha \neq 0 α=0使得 α T x ≤ α T x ˉ ∀ x ∈ c l C \alpha^T x \leq \alpha^T \bar{x} \quad \forall x \in cl\mathcal C αTxαTxˉxclC

由于 x ˉ ∈ ∂ C \bar{x} \in \partial \mathcal C xˉC,则必然可以找到收敛于 x ˉ \bar{x} xˉ的点序列 { x k } ↦ x ˉ \{x_k\} \mapsto \bar{x} {xk}xˉ并且 { x k } ∉ c l C \{x_k\} \notin cl\mathcal C {xk}/clC
也就是说:这个点序列 { x k } \{x_k\} {xk}并不是从凸集 C \mathcal C C内找的,而是从集合之外找的

由于 x k ∉ c l C x_k \notin cl\mathcal C xk/clC,根据分离定理,存在超平面/非零法向量 α k \alpha_k αk,有:
也就是说:每一次迭代,总会找到相应的超平面 α k \alpha_k αk C \mathcal C C x k x_k xk做分离
α k T x ≤ α k T x k x ∈ c l C \alpha_k^T x \leq \alpha_k^T x_k \quad x \in cl\mathcal C αkTxαkTxkxclC
由于 α k \alpha_k αk法向量,我们更关注它的方向性而不是大小。因而不妨设 ∥ α k ∥ = 1 \|\alpha_k\| = 1 αk=1,则有:法向量序列 { α k } \{\alpha_k\} {αk}随着 { x k } \{x_k\} {xk}的迭代过程收敛到某位置。当 k ⇒ ∞ k \Rightarrow \infty k时,有:
α T x ˉ = lim ⁡ k ⇒ ∞ α k T ⋅ x k ≥ α T x x ∈ c l C \alpha^T \bar{x} = \mathop{\lim}\limits_{k \Rightarrow \infty} \alpha_k^T \cdot x_k \geq \alpha^T x \quad x \in cl\mathcal C αTxˉ=klimαkTxkαTxxclC
证毕。使用图像表示如下:
支撑超平面定理证明
相关参考:
最优化理论与方法-第二讲-凸集

相关文章:

机器学习笔记之最优化理论与方法(三)凸集的简单认识(下)

机器学习笔记之最优化理论与方法——凸集的简单认识[下] 引言回顾&#xff1a;基本定义——凸集关于保持集合凸性的运算仿射变换 凸集基本性质&#xff1a;投影定理点与凸集的分离支撑超平面定理 引言 继续凸集的简单认识(上)进行介绍&#xff0c;本节将介绍凸集的基本性质以及…...

Apipost:API文档、调试、Mock与测试的一体化协作平台

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中&#xff0c;API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台&#xff0c;旨在解决这些问题&#xf…...

Homebrew下载安装及使用教程

Homebrew是什么&#xff1f; 简单来说&#xff0c;就是用命令行的形式去管理mac系统的包或软件。 安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"国内请使用镜像源进行下载 执行上述命令后会要求输入…...

【Codeforces】CF193D Two Segments

题目链接 CF方向 Luogu方向 题目解法 考虑在值域上的问题&#xff1a;有多少段区间&#xff0c;对应在排列上不超过 2 2 2 段 肯定需要枚举一个端点&#xff0c;另一个快速算出&#xff0c;考虑枚举值域区间右端点 r r r&#xff0c;计算 l l l 可以发现&#xff0c;新增…...

内存管理概述

前言 在学习计算机科学时&#xff0c;内存管理是一个非常重要的概念。简单地说&#xff0c;内存是计算机用来存储和访问数据的地方。而内存管理是计算机系统如何分配、使用和管理内存的过程。 为什么要学习内存管理&#xff1f; 1. 高效性&#xff1a;内存管理能够帮助计算机更…...

Spring的重试机制-SpringRetry

在我们的日常开发中&#xff0c;经查会遇到调用接口失败的情况&#xff0c;这时候就需要通过一些方法来进行重试&#xff0c;比如通过while循环手动重复调用或&#xff0c;或者通过记录错误接口url和参数到数据库&#xff0c;然后手动调用接口&#xff0c;或者通过JDK/CGLib动态…...

水稻叶病害数据集(目标检测,yolo使用)

1.数据集文件夹 train文件夹&#xff08;44229张&#xff09;&#xff0c;test文件夹&#xff08;4741张&#xff09;&#xff0c;valid文件夹&#xff08;6000张&#xff09; 2.train文件夹展示 labels展示 标签txt展示 data.yaml文件展示 对数据集感兴趣的可以关注最后一行…...

鸿蒙系列-如何使用好 ArkUI 的 @Reusable?

如何使用好 ArkUI 的 Reusable&#xff1f; OpenHarmony 组件复用机制 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为 系统组件&#xff0c;由开发者定义的称为 自定义组件。 在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合…...

展锐平台音频框架

Audio DT介绍 1.概述 DT&#xff08;Device Tree&#xff09;是一种描述硬件的数据结构&#xff0c;DTS即设备树源码。 2.Audio DTS 文件架构 \bsp\kernel\kernel.4.14\arch\arm64\boot\sprd ums512.dts //SOC级相关节点 ——sc2730.dtsi //Codec ——sharkl5Pro.dts…...

webpack loader和plugins的区别

在Webpack中&#xff0c;Loader和Plugin是两个不同的概念&#xff0c;用于不同的目的。 Loader是用于处理非JavaScript模块的文件的转换工具。它们将文件作为输入&#xff0c;并将其转换为Webpack可以处理的模块。例如&#xff0c;当您在Webpack配置中使用Babel Loader时&…...

适配器模式:接口的平滑过渡

欢迎来到设计模式系列的第七篇文章&#xff01;在前面的几篇文章中&#xff0c;我们已经学习了一些常见的设计模式&#xff0c;今天我们将继续探讨另一个重要的设计模式——适配器模式。 适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;它主要用于将一个类的接口…...

vscode搭建springboot开发环境

前言 idea好用到但是收money&#xff0c;eclipse免费但是界面有点丑&#xff0c;所以尝试使用vscode开发springboot 提前准备 安装jdk&#xff0c;jdk需要大于11 安装vscode 安装maven 安装插件 主要是下面的插件 Extension Pack for JavaSpring Boot Extension PackDepe…...

SpringMVC-学习笔记

文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web…...

【STM32】学习笔记(TIM定时器)

TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff0c;而且…...

Jdk8 动态编译 Java 源码为 Class 文件(三)

Jdk8 动态编译 Java 源码为 Class 文件 一.JDK版本二.工程介绍1.依赖2.启动类3.配置类&#xff08;用于测试依赖注入&#xff09;4.工具类1.Java 源码文件读取类2.SpringBoot 容器实例管理类 5.测试类1.抽象类2.接口类3.默认抽象实现4.默认接口实现 6.接口类1.测试接口2.类重载…...

Shell自动化日志维护脚本

简介&#xff1a; 系统日志对于了解操作系统的运行状况、故障排除和性能分析至关重要。然而&#xff0c;长期积累的日志文件可能变得庞大&#xff0c;影响系统性能。在这篇文章中&#xff0c;我们将介绍一个自动化的解决方案&#xff0c;使用 Bash 脚本来监控和维护系统日志文件…...

设计模式入门笔记

1 设计模式简介 在IT这个行业&#xff0c;技术日新月异&#xff0c;可能你今年刚弄懂一个编程框架&#xff0c;明年它就不流行了。 然而即使在易变的IT世界也有很多几乎不变的知识&#xff0c;他们晦涩而重要&#xff0c;默默的将程序员划分为卓越与平庸两类。比如说&#xff…...

存储成本降低85%,携程历史库场景的降本实践

携程&#xff0c;一家中国领先的在线票务服务公司&#xff0c;从 1999 年创立至今&#xff0c;数据库系统历经三次替换。在移动互联网时代&#xff0c;面对云计算卷积而来的海量数据&#xff0c;携程通过新的数据库方案实现存储成本降低 85% 左右&#xff0c;性能提升数倍。本文…...

如何精确掌握函数防抖和函数节流的使用?

前序 函数防抖&#xff08;Debouncing&#xff09;和函数节流&#xff08;Throttling&#xff09;都是用于控制函数执行频率的技术&#xff0c;通常在处理高频率触发的事件&#xff08;如窗口滚动、鼠标移动、输入框输入等&#xff09;时非常有用 一、核心概念 函数防抖 函…...

【Linux系列】离线安装openjdk17的rpm包

首发博客地址 首发博客地址[1] 系列文章地址[2] 视频地址[3] 准备 RPM 包 请从官网下载&#xff1a;https://www.oracle.com/java/technologies/downloads/#java17[4] 如需不限速下载&#xff0c;请关注【程序员朱永胜】并回复 1020 获取。 安装 yum localinstall jdk-17_linux…...

Python 没有 pip 包问题解决

最近需要搞一个干净的Python,从官网上直接下载解压可用的绿色版&#xff0c;发现无法正常使用PiP 一 官网下载Python https://www.python.org/downloads/ 选择 embeddable package,这种是免安装的包&#xff0c;解压后可以直接使用。 二 配置环境变量 添加环境变量&#xff1a…...

并发-Java中的锁(二)--- 重入锁ReentrantLock,公平锁,非公平锁笔记

重入锁ReentrantLock 支持重进入的锁&#xff0c;表示该锁能够支持一个线程对资源的重复加锁该锁支持获取锁时的公平和非公平的选择 如果在绝对时间上&#xff0c;先对锁进行获取的请求一定先被满足&#xff0c;那么锁是公平的&#xff0c;获取锁是顺序的。 实现重进入 线程再…...

LeetCode每日一题:1921. 消灭怪物的最大数量(2023.9.3 C++)

目录 1921. 消灭怪物的最大数量 题目描述&#xff1a; 实现代码与解析&#xff1a; 贪心 原理思路&#xff1a; 1921. 消灭怪物的最大数量 题目描述&#xff1a; 你正在玩一款电子游戏&#xff0c;在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 …...

SpringBoot连接MySQL数据库,使用Mybatis框架(入门)

1. 说明 SpringBoot项目&#xff0c;连接MySQL数据库&#xff0c;使用Mybatis框架。 本篇文章作为 SpringBoot 使用 Mybatis 的入门。 2. 依赖 2.1. MySQL驱动依赖 MySQL驱动&#xff0c;使用SpringBoot版本对应的默认版本&#xff0c;不需要手动指定版本。 比如&#xf…...

滑动窗口实例6(找到字符串中所有字母异位词)

题目&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串&#xff08;包括相同的字符串&#xff09;。 示例 1: 输入: s "cbaebabac…...

武林新秀(一)`git init` 初始化一个新的Git仓库

文章目录 命令的概述和用途命令的用法命令行选项和参数的详细说明命令的示例命令的注意事项或提示 命令的概述和用途 git init 是 Git 版本控制系统中用于初始化一个新的 Git 仓库或重新初始化一个现有的仓库的命令。“init” 是 “initialize”&#xff08;初始化&#xff09…...

gRPC之Interceptor

1、gRPC Interceptor 在应用开发过程中会有这样的需求&#xff0c;就是在请求执行前后做一些通用的处理逻辑&#xff0c;比如记录日志、tracing、身份 认证等&#xff0c;在web框架中一般是使用middleware来实现的&#xff0c;gRPC 在客户端和服务端都支持了拦截器功能&#…...

计算机竞赛 基于机器视觉的二维码识别检测 - opencv 二维码 识别检测 机器视觉

文章目录 0 简介1 二维码检测2 算法实现流程3 特征提取4 特征分类5 后处理6 代码实现5 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器学习的二维码识别检测 - opencv 二维码 识别检测 机器视觉 该项目较为新颖&#xff0c;适合作为竞赛课…...

ELK安装、部署、调试 (七)kibana的安装与配置

1.介绍 Kibana 是一个基于浏览器的开源可视化工具&#xff0c;主要用于分析大量日志&#xff0c;以折线图、条形图、饼图、热图、区域图、坐标图、仪表、目标、时间等形式。预测或查看输入源的错误或其他重大事件趋势的变化。Kibana 与 Elasticsearch 和 Logstash 同步工作&am…...

【Npm】的安装和使用教程

前端工具及插件库 专栏收录该内容 24 篇文章1 订阅 订阅专栏 npm 一、安装配置 二、初始化配置文件 package.json package.lock.json 二、下载模块 2.1、下载指令 2.2、清理缓存 2.3、模块信息 2.4、npm i 与 npm ci 区别 三、其他指令 第三方模块是别人写好的一些文件&#xf…...