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

Mathematics-2025《Semi-Supervised Clustering via Constraints Self-Learning》

推荐深蓝学院的《深度神经网络加速:cuDNN 与 TensorRT》,课程面向就业,细致讲解CUDA运算的理论支撑与实践,学完可以系统化掌握CUDA基础编程知识以及TensorRT实战,并且能够利用GPU开发高性能、高并发的软件系统,感兴趣可以直接看看链接:深蓝学院《深度神经网络加速:cuDNN 与 TensorRT》
在这里插入图片描述


2. 核心思想

该论文的核心思想是针对 半监督聚类(semi-supervised clustering)中由于监督信息不足导致的过拟合和性能不稳定的问题,提出了一种通过 自学习约束(constraints self-learning)来增强聚类效果的方法。传统半监督聚类算法主要依赖给定的 必须链接(must-link)不能链接(cannot-link) 约束来寻找满足这些约束的划分,但当约束数量不足或数据具有复杂的非高斯分布(如流形结构)时,性能会显著下降。

论文提出了一种 约束自学习框架(CS-PDS),通过迭代地在 判别特征空间(discriminant feature space) 中挖掘局部邻居结构来生成新的约束,逐步完善约束矩阵,最终实现更准确的聚类。此外,基于自学习的约束,提出了一种 两步约束聚类算法(FC2),通过贪婪搜索纯 must-link 子簇并合并子簇来最小化违反约束的代价。

核心创新点在于:

  • 动态约束生成:从局部邻居结构中自学习约束,克服初始约束不足的限制。
  • 判别空间探索:通过迭代优化特征空间,使约束在新的空间中更有效。
  • 无须预设簇数:聚类算法不依赖于预先知道簇的数量,适用于复杂数据和异常点检测。

3. 目标函数

论文的目标函数旨在最小化违反约束的代价,定义为:

J = ∑ Ω i j M = 1 w ⋅ 1 [ l i ≠ l j ] + ∑ Ω i j C = 1 w ⋅ 1 [ l i = l j ] \mathcal{J} = \sum_{\Omega_{ij}^M=1} w \cdot \mathbb{1}[l_i \neq l_j] + \sum_{\Omega_{ij}^C=1} w \cdot \mathbb{1}[l_i = l_j] J=ΩijM=1w1[li=lj]+ΩijC=1w1[li=lj]

  • 符号说明
    • Ω M \Omega^M ΩM:真实 must-link 约束矩阵, Ω i j M = 1 \Omega_{ij}^M=1 ΩijM=1 表示实例 x i x_i xi x j x_j xj 属于同一簇。
    • Ω C \Omega^C ΩC:真实 cannot-link 约束矩阵, Ω i j C = 1 \Omega_{ij}^C=1 ΩijC=1 表示实例 x i x_i xi x j x_j xj 属于不同簇。
    • l i l_i li:实例 x i x_i xi 的聚类标签。
    • 1 [ ⋅ ] \mathbb{1}[\cdot] 1[]:指示函数, 1 [ true ] = 1 \mathbb{1}[\text{true}]=1 1[true]=1 1 [ false ] = 0 \mathbb{1}[\text{false}]=0 1[false]=0
    • w w w:违反约束的惩罚权重。

在半监督聚类中,真实的 Ω M \Omega^M ΩM Ω C \Omega^C ΩC 通常是未知的,仅有部分约束矩阵 M M M C C C 可用。因此,论文通过自学习生成近似完整的约束矩阵 M ∗ M^* M C ∗ C^* C,从而将目标函数改写为:

J ∗ = ∑ M i j ∗ = 1 w ⋅ 1 [ l i ≠ l j ] + ∑ C i j ∗ = 1 w ⋅ 1 [ l i = l j ] \mathcal{J}^* = \sum_{M_{ij}^*=1} w \cdot \mathbb{1}[l_i \neq l_j] + \sum_{C_{ij}^*=1} w \cdot \mathbb{1}[l_i = l_j] J=Mij=1w1[li=lj]+Cij=1w1[li=lj]

目标是通过优化 J ∗ \mathcal{J}^* J,找到一个数据划分,使得违反 must-link(将同一簇的点分到不同簇)和 cannot-link(将不同簇的点分到同一簇)的总代价最小。

4. 目标函数的优化过程

优化目标函数 J ∗ \mathcal{J}^* J 的过程分为两个主要阶段:约束自学习(CS-PDS)约束聚类(FC2),通过 期望最大化(EM) 框架迭代进行。

4.1 约束自学习(CS-PDS)

CS-PDS 框架通过 EM 算法迭代优化,分为 E 步(期望)M 步(最大化)

  1. E 步:探索部分判别空间

    • 目标:找到一个新的特征空间,使得当前约束( M M M C C C)在该空间中得到更好的满足。

    • 方法:通过线性映射 y = ω T x y = \omega^T x y=ωTx 将数据从原始空间 x ∈ R m x \in \mathbb{R}^m xRm 投影到新空间 y y y,优化以下目标函数:

      ω ∗ = arg ⁡ max ⁡ ω T X L C X T ω ω T X L M X T ω \omega^* = \arg \max \frac{\omega^T X L^C X^T \omega}{\omega^T X L^M X^T \omega} ω=argmaxωTXLMXTωωTXLCXTω

      其中:

      • L M = D M − M L^M = D^M - M LM=DMM D M D^M DM M M M 的度矩阵, D i i M = ∑ i ≠ j M i j D_{ii}^M = \sum_{i \neq j} M_{ij} DiiM=i=jMij
      • L C = D C − C L^C = D^C - C LC=DCC D C D^C DC C C C 的度矩阵, D i i C = ∑ i ≠ j C i j D_{ii}^C = \sum_{i \neq j} C_{ij} DiiC=i=jCij
      • X = [ x 1 , x 2 , … , x N ] X = [x_1, x_2, \dots, x_N] X=[x1,x2,,xN] 是数据矩阵。
      • B = X L C X T B = X L^C X^T B=XLCXT:奖励矩阵,鼓励 cannot-link 点在投影空间中分离更远。
      • P = X L M X T P = X L^M X^T P=XLMXT:惩罚矩阵,约束 must-link 点在投影空间中更靠近。
    • 优化问题转化为广义特征值分解问题:

      B ω = λ P ω B \omega = \lambda P \omega Bω=λPω

    • 为避免 P P P 奇异,引入 Tikhonov 正则化: P = X L M X T + a ⋅ I P = X L^M X^T + a \cdot I P=XLMXT+aI,其中 a = 0.01 a = 0.01 a=0.01

  2. M 步:自学习新约束

    • 在新的特征空间 Y = ω T X Y = \omega^T X Y=ωTX 中,根据局部邻居结构生成新的 must-link 和 cannot-link 约束。

    • Must-link 约束生成

      • 对每个具有 must-link 的点 u u u,定义 τ u \tau_u τu 为与其 must-link 的点集, μ u \mu_u μu u u u τ u \tau_u τu 中点的平均距离。

      • 选择 k k k 个最近邻 π u \pi_u πu,满足距离小于 μ u \mu_u μu 且不属于 τ u \tau_u τu,更新 must-link 矩阵:

        M u j = min ⁡ { 1 − β , M u j + β } , ∀ j ∈ π u M_{uj} = \min \{1 - \beta, M_{uj} + \beta\}, \quad \forall j \in \pi_u Muj=min{1β,Muj+β},jπu

        其中 β = 0.2 \beta = 0.2 β=0.2 控制学习率。

    • Cannot-link 约束生成

      • 对每个具有 cannot-link 的点 v v v,定义 κ v \kappa_v κv 为与其 cannot-link 的点集, μ \mu μ 为所有 must-link 点对的平均距离。

      • 选择 k k k 个最近邻 π v \pi_v πv,满足距离小于 μ \mu μ 且小于 κ v \kappa_v κv 中点的最小距离,更新 cannot-link 矩阵:

        C i j = min ⁡ { 1 − β , C i j + β } , ∀ i ∈ κ v , ∀ j ∈ π v C_{ij} = \min \{1 - \beta, C_{ij} + \beta\}, \quad \forall i \in \kappa_v, \forall j \in \pi_v Cij=min{1β,Cij+β},iκv,jπv

    • 冲突解决:当新生成的约束产生冲突(同一对点同时为 must-link 和 cannot-link)时,采用软正则化:

      M i j = { 0 if  C i j = 1 min ⁡ ( M i j , M i j M i j + C i j ) if  0 < C i j < 1 M i j if  C i j = 0 M_{ij} = \begin{cases} 0 & \text{if } C_{ij} = 1 \\ \min \left(M_{ij}, \frac{M_{ij}}{M_{ij} + C_{ij}}\right) & \text{if } 0 < C_{ij} < 1 \\ M_{ij} & \text{if } C_{ij} = 0 \end{cases} Mij= 0min(Mij,Mij+CijMij)Mijif Cij=1if 0<Cij<1if Cij=0

      C i j = { 0 if  M i j = 1 min ⁡ ( C i j , C i j M i j + C i j ) if  0 < M i j < 1 C i j if  M i j = 0 C_{ij} = \begin{cases} 0 & \text{if } M_{ij} = 1 \\ \min \left(C_{ij}, \frac{C_{ij}}{M_{ij} + C_{ij}}\right) & \text{if } 0 < M_{ij} < 1 \\ C_{ij} & \text{if } M_{ij} = 0 \end{cases} Cij= 0min(Cij,Mij+CijCij)Cijif Mij=1if 0<Mij<1if Mij=0

  3. 迭代与收敛

    • 重复 E 步和 M 步,直到矩阵 M + C M + C M+C 中非零值的比例达到 P f u l l = 20 % P_{full} = 20\% Pfull=20% 或迭代次数达到 L o o p s = 50 Loops = 50 Loops=50
    • 输出近似完整的约束矩阵 M ∗ M^* M C ∗ C^* C
4.2 约束聚类(FC2)

FC2 算法利用 M ∗ M^* M C ∗ C^* C 进行聚类,分为两步:

  1. 第一步:贪婪搜索纯 must-link 子簇

    • 从具有最大 must-link 度的点开始,初始化子簇 K h \mathcal{K}_h Kh,包含该点及其 must-link 点,并记录 cannot-link 点集 I h C I_h^C IhC
    • 迭代扩展 K h \mathcal{K}_h Kh,加入仅与当前子簇点有 must-link 的点,确保子簇内无 cannot-link。
    • 如果某点的 must-link 点大多与 K h \mathcal{K}_h Kh 有 cannot-link,则从 K h \mathcal{K}_h Kh 中移除该点。
    • 重复直到所有点被分配到纯 must-link 子簇。
  2. 第二步:合并子簇

    • 计算子簇对之间的 排斥度 r i j = ∣ K i , K j ∣ Cannot-link ∣ K i , K j ∣ Must-link r_{ij} = \frac{|\mathcal{K}_i, \mathcal{K}_j|_{\text{Cannot-link}}}{|\mathcal{K}_i, \mathcal{K}_j|_{\text{Must-link}}} rij=Ki,KjMust-linkKi,KjCannot-link
    • 从排斥度最低的子簇对开始,逐步合并子簇,直到形成目标簇数 k k k
    • 对于孤立点,分配到最近的簇。

FC2 确保 ∑ C i j ∗ = 1 w ⋅ 1 [ l i = l j ] = 0 \sum_{C_{ij}^*=1} w \cdot \mathbb{1}[l_i = l_j] = 0 Cij=1w1[li=lj]=0(第一步生成纯 must-link 子簇),并通过最小化排斥度优化 ∑ M i j ∗ = 1 w ⋅ 1 [ l i ≠ l j ] \sum_{M_{ij}^*=1} w \cdot \mathbb{1}[l_i \neq l_j] Mij=1w1[li=lj]

5. 主要的贡献点

  1. 约束自学习框架(CS-PDS)

    • 提出了一种通过迭代探索判别特征空间和自学习约束的 EM 框架,显著增强了半监督聚类的鲁棒性。
    • 利用局部邻居结构生成新约束,适用于复杂的非高斯和流形数据。
  2. 两步约束聚类算法(FC2)

    • 提出了一种高效的聚类算法,仅依赖约束信息,无需预设簇数,适合异常点检测。
    • 通过贪婪搜索和子簇合并,最小化违反约束的代价。
  3. 理论与实践结合

    • 提供了目标函数的数学推导和优化过程的理论证明。
    • 实验验证了算法在多种基准数据集上的优越性能,特别是在约束不足的情况下。
  4. 高效性与适用性

    • 相较于基于矩阵补全的方法,CS-PDS 和 FC2 算法运行时间短,适用于大型数据集。
    • 在 UCI 数据集(Iris、Wine 等)和手写字符数据集上均表现出色。

6. 实验结果

6.1 数据集与设置
  • 数据集:使用 UCI 档案中的 Iris、Wine、Segmentation,文献中的 Protein,以及手写字符数据集 Digits 和 Letters 的子集。数据集规模从 116 到 2310,特征数从 4 到 20,簇数从 3 到 7。
  • 对比算法:包括 8 种算法,分为标签约束算法(FCSC、CSC、GrBias)、成对约束算法(C-K-Means、MPCK-Means、ITML、STSC)和无监督谱聚类基线。
  • 评价指标:Rand Index (RI),通过 10 次随机生成约束重复实验,报告平均 RI 和标准差。
  • 约束设置:随机生成标签约束和成对约束,测试不同约束数量下的性能。
6.2 结果分析
  • 标签约束实验(图 2):
    • FC2 在所有数据集上表现优于 FCSC、CSC 和 GrBias,尤其在约束数量增加时性能稳定提升。
  • 成对约束实验(图 3):
    • FC2 随着约束数量增加,性能持续提高,优于 MPCK-Means、ITML、C-K-Means 和 STSC。
    • 传统方法如 C-K-Means 在约束增多时性能不稳定,可能因不适当约束干扰。
    • STSC(基于矩阵补全)在 Wine 数据集上表现良好,但在大型数据集(如 Segmentation)上运行时间过长(超过 24 小时)。
  • 运行时间(表 3):
    • FC2 在所有数据集上的运行时间远低于 STSC,例如在 Segmentation 数据集上为 33.57 秒,而 STSC 无法在 24 小时内完成。
    • FC2 的运行时间与 MPCK-Means 和 ITML 相当,但在 Protein 和 Iris 上更快。
  • 约束有效性(图 4):
    • 通过可视化初始和最终判别空间的距离矩阵,证明自学习约束有效分离了簇,形成了明显的块状结构。
6.3 结论
  • FC2 在约束不足的情况下仍能稳定提升聚类性能,优于大多数现有算法。
  • 相较于矩阵补全方法,FC2 更高效,适合大规模数据。
  • 自学习约束的正确性通过判别空间的块状结构得到验证。

7. 算法的实现过程(详细解释)

以下是对 CS-PDSFC2 算法的详细实现过程,分步骤解析伪代码(Algorithm 1 和 Algorithm 2)。

7.1 CS-PDS 算法实现(Algorithm 1)

输入

  • 数据点集: X = { x i } i = 1 N X = \{x_i\}_{i=1}^N X={xi}i=1N x i ∈ R m x_i \in \mathbb{R}^m xiRm
  • 初始 must-link 矩阵 M M M 和 cannot-link 矩阵 C C C
  • 邻居数 k k k(通常设为 1 到 3)。

输出

  • 增强后的约束矩阵 M ∗ M^* M C ∗ C^* C

步骤

  1. 初始化

    • 设置参数: k = 3 k = 3 k=3 P f u l l = 20 % P_{full} = 20\% Pfull=20% L o o p s = 50 Loops = 50 Loops=50 β = 0.2 \beta = 0.2 β=0.2,正则化参数 a = 0.01 a = 0.01 a=0.01
    • 初始化 M M M C C C 为稀疏矩阵,仅包含给定的约束。
  2. EM 迭代

    • E 步:探索部分判别空间
      • 计算拉普拉斯矩阵: L M = D M − M L^M = D^M - M LM=DMM L C = D C − C L^C = D^C - C LC=DCC
      • 计算矩阵: B = X L C X T B = X L^C X^T B=XLCXT P = X L M X T + a ⋅ I P = X L^M X^T + a \cdot I P=XLMXT+aI
      • 求解广义特征值问题 B ω = λ P ω B \omega = \lambda P \omega Bω=λPω,得到投影向量 ω ∗ \omega^* ω
      • 投影数据: Y = ω T X Y = \omega^T X Y=ωTX,得到新特征空间。
    • M 步:自学习约束
      • Must-link 更新
        • 对每个有 must-link 的点 u u u
          • 构造 τ u \tau_u τu(与 u u u must-link 的点集),计算平均距离 μ u \mu_u μu
          • Y Y Y 中找 k k k 个最近邻 π u \pi_u πu,满足距离小于 μ u \mu_u μu 且不属于 τ u \tau_u τu
          • 更新 M u j = min ⁡ { 1 − β , M u j + β } M_{uj} = \min \{1 - \beta, M_{uj} + \beta\} Muj=min{1β,Muj+β} ∀ j ∈ π u \forall j \in \pi_u jπu
      • Cannot-link 更新
        • 对每个有 cannot-link 的点 v v v
          • 构造 κ v \kappa_v κv(与 v v v cannot-link 的点集),计算全局 must-link 点对的平均距离 μ \mu μ
          • Y Y Y 中找 k k k 个最近邻 π v \pi_v πv,满足距离小于 μ \mu μ 且小于 κ v \kappa_v κv 中点的最小距离。
          • 更新 C i j = min ⁡ { 1 − β , C i j + β } C_{ij} = \min \{1 - \beta, C_{ij} + \beta\} Cij=min{1β,Cij+β} ∀ i ∈ κ v , ∀ j ∈ π v \forall i \in \kappa_v, \forall j \in \pi_v iκv,jπv
      • 软正则化
        • 对每一对 ( i , j ) (i, j) (i,j),检查 M i j M_{ij} Mij C i j C_{ij} Cij 是否冲突。
        • 应用公式 (15) 和 (16) 调整 M i j M_{ij} Mij C i j C_{ij} Cij,确保 M i j + C i j ≤ 1 M_{ij} + C_{ij} \leq 1 Mij+Cij1
  3. 收敛检查

    • 计算 M + C M + C M+C 中非零值的比例,若达到 P f u l l P_{full} Pfull 或迭代次数达到 L o o p s Loops Loops,停止迭代。
    • 返回 M ∗ = M M^* = M M=M C ∗ = C C^* = C C=C

实现细节

  • 使用高效的线性代数库(如 NumPy 或 SciPy)计算矩阵操作和特征值分解。
  • 最近邻搜索可通过 KD 树或 Ball 树实现,优化计算效率。
  • 软正则化确保约束矩阵的数值稳定性,避免冲突导致的错误传播。
7.2 FC2 算法实现(Algorithm 2)

输入

  • 增强后的约束矩阵 M ∗ M^* M C ∗ C^* C
  • 数据点集 X = { x i } i = 1 N X = \{x_i\}_{i=1}^N X={xi}i=1N
  • 目标簇数 k k k(可选,若未知则通过合并确定)。

输出

  • 聚类结果: { K n } n = 1 k \{\mathcal{K}_n\}_{n=1}^k {Kn}n=1k

步骤

  1. 计算 must-link 度

    • 对每个点 x i x_i xi,计算 d i = ∑ j M i j ∗ d_i = \sum_j M^*_{ij} di=jMij,表示 x i x_i xi 的 must-link 数量。
  2. 第一步:贪婪搜索纯 must-link 子簇

    • 初始化子簇集合 K = ∅ \mathcal{K} = \emptyset K=,剩余点集 X remain = X X_{\text{remain}} = X Xremain=X
    • 循环直到 X remain = ∅ X_{\text{remain}} = \emptyset Xremain=
      • 选择 X remain X_{\text{remain}} Xremain d i d_i di 最大的点 x i x_i xi
      • 初始化子簇 K h = { x i } ∪ { x j ∣ M i j ∗ ≠ 0 } \mathcal{K}_h = \{x_i\} \cup \{x_j \mid M^*_{ij} \neq 0\} Kh={xi}{xjMij=0},cannot-link 点集 I h C = { x j ∣ C i j ∗ ≠ 0 } I_h^C = \{x_j \mid C^*_{ij} \neq 0\} IhC={xjCij=0}
      • K h \mathcal{K}_h Kh 中的每个点 x i x_i xi
        • 构造 M i = { x j ∣ M i j ∗ ≥ 0.5 } M_i = \{x_j \mid M^*_{ij} \geq 0.5\} Mi={xjMij0.5} C i = { x j ∣ C i j ∗ ≥ 0.5 } C_i = \{x_j \mid C^*_{ij} \geq 0.5\} Ci={xjCij0.5}
        • ∣ M i ∩ I h C ∣ ≥ ∣ M i ∩ K h ∣ |M_i \cap I_h^C| \geq |M_i \cap \mathcal{K}_h| MiIhCMiKh,则从 K h \mathcal{K}_h Kh 中移除 x i x_i xi
        • 否则,更新 I h C = I h C ∪ C i I_h^C = I_h^C \cup C_i IhC=IhCCi K h = ( K h ∪ M i ) − I h C \mathcal{K}_h = (\mathcal{K}_h \cup M_i) - I_h^C Kh=(KhMi)IhC
      • X remain X_{\text{remain}} Xremain 中移除 K h \mathcal{K}_h Kh,记录 K h \mathcal{K}_h Kh h = h + 1 h = h + 1 h=h+1
  3. 第二步:合并子簇

    • 对每对子簇 ( K i , K j ) (\mathcal{K}_i, \mathcal{K}_j) (Ki,Kj),计算排斥度:

      r i j = ∣ K i , K j ∣ Cannot-link ∣ K i , K j ∣ Must-link r_{ij} = \frac{|\mathcal{K}_i, \mathcal{K}_j|_{\text{Cannot-link}}}{|\mathcal{K}_i, \mathcal{K}_j|_{\text{Must-link}}} rij=Ki,KjMust-linkKi,KjCannot-link

      其中 ∣ K i , K j ∣ Cannot-link = ∑ x ∈ K i , y ∈ K j C x y ∗ |\mathcal{K}_i, \mathcal{K}_j|_{\text{Cannot-link}} = \sum_{x \in \mathcal{K}_i, y \in \mathcal{K}_j} C^*_{xy} Ki,KjCannot-link=xKi,yKjCxy ∣ K i , K j ∣ Must-link = ∑ x ∈ K i , y ∈ K j M x y ∗ |\mathcal{K}_i, \mathcal{K}_j|_{\text{Must-link}} = \sum_{x \in \mathcal{K}_i, y \in \mathcal{K}_j} M^*_{xy} Ki,KjMust-link=xKi,yKjMxy

    • r i j r_{ij} rij 最小的一对开始,逐步合并子簇,直到形成 k k k 个簇。

    • 对孤立点,计算与各簇的平均距离,分配到最近的簇。

实现细节

  • 使用优先队列(如 Python 的 heapq)维护 d i d_i di 的最大值,加速点选择。
  • 子簇合并可通过并查集(Union-Find)实现,优化合并效率。
  • 排斥度计算需高效遍历 M ∗ M^* M C ∗ C^* C,可通过稀疏矩阵操作优化。
7.3 参数设置与调优
  • CS-PDS
    • k ∈ [ 1 , 3 ] k \in [1, 3] k[1,3]:控制邻居数量,过大可能引入噪声,过小可能约束不足。
    • β = 0.2 \beta = 0.2 β=0.2:平衡自学习约束与原始约束的权重。
    • P f u l l = 20 % P_{full} = 20\% Pfull=20% L o o p s = 50 Loops = 50 Loops=50:确保收敛不过早停止。
  • FC2
    • M i j ∗ ≥ 0.5 M^*_{ij} \geq 0.5 Mij0.5 C i j ∗ ≥ 0.5 C^*_{ij} \geq 0.5 Cij0.5 作为阈值,过滤弱约束。
    • k k k 未知,可通过观察 r i j r_{ij} rij 的分布确定合并终止条件。

8. 总结

该论文通过提出 CS-PDS 和 FC2 算法,成功解决了半监督聚类中约束不足的问题。CS-PDS 通过 EM 框架自学习约束,FC2 利用增强约束高效聚类。实验结果证明了算法在多种数据集上的优越性能和高效性,特别是在约束稀疏的情况下。算法实现过程清晰,结合理论推导和实践优化,适合复杂数据场景。未来的改进方向包括并行化处理以提升大规模数据集的效率,以及扩展到异常点检测任务。

http://www.xdnf.cn/news/6147.html

相关文章:

  • 查询电脑伪装IP,网络安全速查攻略!
  • 入门OpenTelemetry——可观测性与链路追踪介绍
  • Nginx核心功能及同类产品对比
  • FastByteArrayOutputStream和ByteArrayInputStream有什么区别
  • 基于javaweb的SpringBoot高校图书馆座位预约系统设计与实现(源码+文档+部署讲解)
  • package-lock.json能否直接删除?
  • 【Ansible基础】Ansible设计理念与无代理架构深度解析
  • 2020年下半年试题三:论云原生架构及其应用
  • SAP学习笔记 - 开发11 - RAP(RESTful Application Programming)简介
  • 鸿蒙OSUniApp开发富文本编辑器组件#三方框架 #Uniapp
  • 鸿蒙OSUniApp 制作个人信息编辑界面与头像上传功能#三方框架 #Uniapp
  • 计算机网络的七层“千层饼“
  • TCP/IP参考模型详解:从理论架构到实战应用
  • 牛市买卖数字货币逻辑
  • Java 中序列化和反序列化的详细说明
  • Android学习总结之类LiveData与ViewModel关系篇
  • 【Redis 进阶】分布式锁
  • Q1财报揭示:用户增长与客单价下跌对eBay卖家的蝴蝶效应
  • 最佳实践PPT | 数据架构设计总体规划方案数据中台架构数据架构图解决方案
  • 深度解析智能体:从概念到应用的全方位洞察
  • AI产品上市前的“安全通行证“
  • 7.DTH11和PWM波
  • React系列——nvm、node、npm、yarn(MAC)
  • 机器学习第十讲:异常值检测 → 发现身高填3米的不合理数据
  • Spring 事件监听机制的使用
  • flatbuffer实践
  • 操作系统实验 实验3 存储器分配与回收
  • 设计模式-中介者模式
  • Docker使用经验-从Image导出dockerfile并进行修改
  • 【Elasticsearch】DSL 篇