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

【机器学习】非线性分类算法详解(下):决策树(最佳分裂特征选择的艺术)与支持向量机(最大间隔和核技巧)

文章目录

  • 三、决策树:基于规则的"层层筛选"
    • 1、核心思想:分而治之
    • 2、分裂准则:信息增益(减少不确定性)
      • 数学公式
      • 具体例子
      • 作用总结
    • 3、基尼指数(数据纯度衡量):CART算法的选择
      • 数学公式
      • 例子
      • 在决策树中的应用
    • 4、工作原理:递归构建
    • 5、优势与适用场景
  • 四、支持向量机(SVM):基于间隔的"边界守卫"
    • 1、核心思想:最大间隔分类
      • 1.1、数学表达
      • 1.2、具体例子
      • 1.3、支持向量:决策边界的核心
      • 1.4、SVM间隔设计的优势总结
    • 2、优化目标:间隔最大化
    • 3、对偶形式:核技巧的基础(ing)
    • 4、核技巧:非线性分类的关键
    • 5、SVM的工作步骤
    • 6、SVM算法总结
  • 四种算法综合对比

在上一篇中,我们深入解析了KNN和朴素贝叶斯这两种基于距离和概率的分类算法。本篇将继续探讨两种更复杂的非线性分类算法:决策树和支持向量机(SVM)。这两种算法分别代表了基于规则的"层层筛选"和基于间隔的"边界守卫"思想。

三、决策树:基于规则的"层层筛选"

1、核心思想:分而治之

决策树的核心思想非常直观:通过一系列"是/否"问题逐步缩小搜索空间,最终将复杂问题分解为简单的规则组合。就像医生诊断疾病时,会先问"有没有发烧",再问"有没有咳嗽",通过层层筛选最终确定病因。

根节点:特征1 < 阈值1?
├─ 是 → 叶节点1:预测类别A(80%样本)
└─ 否 → 特征2 < 阈值2?├─ 是 → 叶节点2:预测类别B(90%样本)└─ 否 → 叶节点3:预测类别C(85%样本)

数学表达:
决策树通过递归地分割特征空间来构建分类规则。每个内部节点代表一个特征测试,每个叶节点代表一个类别预测:

f(x)=∑m=1McmI(x∈Rm)f(x) = \sum_{m=1}^M c_m \mathbb{I}(x \in R_m)f(x)=m=1McmI(xRm)

各部分含义:

  • f(x)f(x)f(x):决策树的预测函数
  • MMM:决策树中叶节点的总数
  • RmR_mRm:第 mmm 个区域(对应一个叶节点)
  • cmc_mcm:第 mmm 个区域的预测值(通常是该区域中多数类别的标签)
  • I(x∈Rm)\mathbb{I}(x \in R_m)I(xRm):指示函数,判断样本 xxx 是否属于区域 RmR_mRm

指示函数 I(x∈Rm)\mathbb{I}(x \in R_m)I(xRm)

I(x∈Rm)={1如果 x属于区域 Rm0如果 x不属于区域 Rm\mathbb{I}(x \in R_m) = \begin{cases} 1 & \text{如果 } x \text{ 属于区域 } R_m \\ 0 & \text{如果 } x \text{ 不属于区域 } R_m \end{cases}I(xRm)={10如果 x 属于区域 Rm如果 x 不属于区域 Rm

 
例子说明


假设我们有一个决策树,有3个叶节点(区域):

决策树结构

根节点:年龄 < 30?
├─ 是 → 叶节点1:预测"年轻"
└─ 否 → 收入 > 50000?├─ 是 → 叶节点2:预测"高收入"└─ 否 → 叶节点3:预测"普通"

公式计算
f(x)=c1⋅I(x∈R1)+c2⋅I(x∈R2)+c3⋅I(x∈R3)f(x) = c_1 \cdot \mathbb{I}(x \in R_1) + c_2 \cdot \mathbb{I}(x \in R_2) + c_3 \cdot \mathbb{I}(x \in R_3)f(x)=c1I(xR1)+c2I(xR2)+c3I(xR3)

其中:

  • c1="年轻"c_1 = "年轻"c1="年轻"
  • c2="高收入"c_2 = "高收入"c2="高收入"
  • c3="普通"c_3 = "普通"c3="普通"

预测过程

  • 如果样本 xxx 属于区域 R1R_1R1f(x)="年轻"⋅1+"高收入"⋅0+"普通"⋅0="年轻"f(x) = "年轻" \cdot 1 + "高收入" \cdot 0 + "普通" \cdot 0 = "年轻"f(x)="年轻"1+"高收入"0+"普通"0="年轻"
  • 如果样本 xxx 属于区域 R2R_2R2f(x)="年轻"⋅0+"高收入"⋅1+"普通"⋅0="高收入"f(x) = "年轻" \cdot 0 + "高收入" \cdot 1 + "普通" \cdot 0 = "高收入"f(x)="年轻"0+"高收入"1+"普通"0="高收入"
  • 如果样本 xxx 属于区域 R3R_3R3f(x)="年轻"⋅0+"高收入"⋅0+"普通"⋅1="普通"f(x) = "年轻" \cdot 0 + "高收入" \cdot 0 + "普通" \cdot 1 = "普通"f(x)="年轻"0+"高收入"0+"普通"1="普通"

 
公式的直观理解:

  1. 决策树将特征空间分割成 MMM 个区域
  2. 每个区域 RmR_mRm 对应一个预测值 cmc_mcm
  3. 对于新样本 xxx,找到它属于哪个区域
  4. 返回该区域的预测值

注意:每个样本只能属于一个区域


 

2、分裂准则:信息增益(减少不确定性)

数学公式

决策树的关键在于如何选择最佳分裂特征。最常用的分裂准则是信息增益:

IG(D,A)=H(D)−∑v=1V∣Dv∣∣D∣H(Dv)IG(D, A) = H(D) - \sum_{v=1}^V \frac{|D_v|}{|D|} H(D_v)IG(D,A)=H(D)v=1VDDvH(Dv)

其中,H(D)H(D)H(D) 是数据集 DDD 的熵:

H(D)=−∑k=1Kpklog⁡2pkH(D) = -\sum_{k=1}^K p_k \log_2 p_kH(D)=k=1Kpklog2pk

  • H(D)H(D)H(D):分裂前数据集的熵(不确定性)
  • ∑v=1V∣Dv∣∣D∣H(Dv)\sum_{v=1}^V \frac{|D_v|}{|D|} H(D_v)v=1VDDvH(Dv):分裂后各子集的加权平均熵
  • VVV:特征 AAA 的可能取值数量
  • DvD_vDv:特征 AAA 取值为 vvv 的子集
  • ∣Dv∣∣D∣\frac{|D_v|}{|D|}DDv:子集 DvD_vDv 在总数据集中的比例

熵的含义:衡量数据集的不确定性或混乱程度

简单理解

  • 熵越大,数据集越混乱,越难分类
  • 熵越小,数据集越纯净,越容易分类

 
信息增益衡量的是分裂前后不确定性的减少程度。信息增益越大,说明分裂越有效,能够更好地区分不同类别。

 

具体例子


假设我们有一个数据集,包含10个样本:

分裂前

  • 类别A:6个样本
  • 类别B:4个样本

计算分裂前熵
H(D)=−(610log⁡2610+410log⁡2410)=0.971H(D) = -\left(\frac{6}{10}\log_2\frac{6}{10} + \frac{4}{10}\log_2\frac{4}{10}\right) = 0.971H(D)=(106log2106+104log2104)=0.971

考虑按特征"年龄"分裂

  • 年龄<30:5个样本(3个A,2个B)
  • 年龄≥30:5个样本(3个A,2个B)

计算分裂后熵

  • 年龄<30的熵:H(D<30)=−(35log⁡235+25log⁡225)=0.971H(D_{<30}) = -\left(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}\right) = 0.971H(D<30)=(53log253+52log252)=0.971
  • 年龄≥30的熵:H(D≥30)=−(35log⁡235+25log⁡225)=0.971H(D_{\geq30}) = -\left(\frac{3}{5}\log_2\frac{3}{5} + \frac{2}{5}\log_2\frac{2}{5}\right) = 0.971H(D30)=(53log253+52log252)=0.971

加权平均熵
510×0.971+510×0.971=0.971\frac{5}{10} \times 0.971 + \frac{5}{10} \times 0.971 = 0.971105×0.971+105×0.971=0.971

信息增益
IG(D,年龄)=0.971−0.971=0IG(D, 年龄) = 0.971 - 0.971 = 0IG(D,年龄)=0.9710.971=0

结果解释:信息增益为0,说明按年龄分裂没有减少不确定性

 

更好的分裂例子

考虑按特征"收入"分裂

  • 收入<50000:6个样本(1个A,5个B)
  • 收入≥50000:4个样本(5个A,0个B)

计算分裂后熵

  • 收入<50000的熵:H(D<50000)=−(16log⁡216+56log⁡256)=0.650H(D_{<50000}) = -\left(\frac{1}{6}\log_2\frac{1}{6} + \frac{5}{6}\log_2\frac{5}{6}\right) = 0.650H(D<50000)=(61log261+65log265)=0.650
  • 收入≥50000的熵:H(D≥50000)=−(55log⁡255+05log⁡205)=0H(D_{\geq50000}) = -\left(\frac{5}{5}\log_2\frac{5}{5} + \frac{0}{5}\log_2\frac{0}{5}\right) = 0H(D50000)=(55log255+50log250)=0

加权平均熵
610×0.650+410×0=0.390\frac{6}{10} \times 0.650 + \frac{4}{10} \times 0 = 0.390106×0.650+104×0=0.390

信息增益
IG(D,收入)=0.971−0.390=0.581IG(D, 收入) = 0.971 - 0.390 = 0.581IG(D,收入)=0.9710.390=0.581

结果解释:信息增益为0.581,说明按收入分裂显著减少了不确定性。


 

作用总结

工作原理

信息增益衡量分裂前后不确定性的减少程度:分裂前熵表示原始数据集的混乱程度,分裂后熵表示各子集的加权平均混乱程度,两者之差即为信息增益。信息增益越大,说明该特征的分裂效果越好,能够更有效地区分不同类别。

实际应用

在决策树构建过程中,算法会计算每个特征的信息增益,选择信息增益最大的特征进行分裂。这确保了每次分裂都能最大程度地减少数据的不确定性,从而构建出更有效的分类规则。

 

3、基尼指数(数据纯度衡量):CART算法的选择

数学公式

除了信息增益,CART算法使用基尼指数作为分裂准则:

Gini(D)=1−∑k=1Kpk2Gini(D) = 1 - \sum_{k=1}^K p_k^2Gini(D)=1k=1Kpk2

  • pkp_kpk:第 kkk 个类别在数据集中的比例

  • ∑k=1Kpk2\sum_{k=1}^K p_k^2k=1Kpk2:所有类别比例平方的和

基尼指数衡量的是数据集的纯度。基尼指数越小,数据集越纯,即同一类别的样本越多。


 

例子

我们假设类别A、B:指的是垃圾邮件还是正常邮件
例子1:纯净数据集
假设数据集有10个样本,全部属于类别A:

  • 类别A:10个样本(比例:1.0)
  • 类别B:0个样本(比例:0.0)

计算基尼指数
Gini(D)=1−(1.02+0.02)=1−1=0Gini(D) = 1 - (1.0^2 + 0.0^2) = 1 - 1 = 0Gini(D)=1(1.02+0.02)=11=0

结果:基尼指数为0,表示数据集非常纯净。

例子2:混乱数据集
假设数据集有10个样本,均匀分布:

  • 类别A:5个样本(比例:0.5)
  • 类别B:5个样本(比例:0.5)

计算基尼指数
Gini(D)=1−(0.52+0.52)=1−(0.25+0.25)=1−0.5=0.5Gini(D) = 1 - (0.5^2 + 0.5^2) = 1 - (0.25 + 0.25) = 1 - 0.5 = 0.5Gini(D)=1(0.52+0.52)=1(0.25+0.25)=10.5=0.5

结果:基尼指数为0.5,表示数据集比较混乱。

例子3:中等纯度数据集
假设数据集有10个样本:

  • 类别A:7个样本(比例:0.7)
  • 类别B:3个样本(比例:0.3)

计算基尼指数
Gini(D)=1−(0.72+0.32)=1−(0.49+0.09)=1−0.58=0.42Gini(D) = 1 - (0.7^2 + 0.3^2) = 1 - (0.49 + 0.09) = 1 - 0.58 = 0.42Gini(D)=1(0.72+0.32)=1(0.49+0.09)=10.58=0.42

结果:基尼指数为0.42,表示数据集纯度中等。


 

在决策树中的应用

在决策树中,我们选择基尼指数减少最多的特征进行分裂。如下基尼增益公式:

Gini_Gain(D,A)=Gini(D)−∑v=1V∣Dv∣∣D∣Gini(Dv)Gini\_Gain(D, A) = Gini(D) - \sum_{v=1}^V \frac{|D_v|}{|D|} Gini(D_v)Gini_Gain(D,A)=Gini(D)v=1VDDvGini(Dv)

简单理解:基尼增益 = 分裂前的不纯度 - 分裂后的加权平均不纯度

 

例子


假设按特征"年龄"分裂:

  • 分裂前基尼指数:0.42
  • 子集1(年轻组)基尼指数:0.3(权重:0.6)
  • 子集2(年长组)基尼指数:0.2(权重:0.4)

基尼增益
Gini_Gain=0.42−(0.6×0.3+0.4×0.2)=0.42−0.26=0.16Gini\_Gain = 0.42 - (0.6 \times 0.3 + 0.4 \times 0.2) = 0.42 - 0.26 = 0.16Gini_Gain=0.42(0.6×0.3+0.4×0.2)=0.420.26=0.16

结果:基尼增益为0.16,说明分裂后数据更纯了
 

假设我们还有另一个特征"收入":

按收入分裂

  • 分裂前基尼指数:0.42
  • 子集1(高收入)基尼指数:0.1(权重:0.5)
  • 子集2(低收入)基尼指数:0.1(权重:0.5)

基尼增益
Gini_Gain(收入)=0.42−(0.5×0.1+0.5×0.1)=0.42−0.1=0.32Gini\_Gain(收入) = 0.42 - (0.5 \times 0.1 + 0.5 \times 0.1) = 0.42 - 0.1 = 0.32Gini_Gain(收入)=0.42(0.5×0.1+0.5×0.1)=0.420.1=0.32

比较

  • 年龄的基尼增益:0.16
  • 收入的基尼增益:0.32

选择:选择基尼增益更大的特征,即"收入"特征。


 

4、工作原理:递归构建

决策树的构建过程可以概括为以下步骤:

  1. 特征选择:计算每个特征的信息增益(或基尼指数),选择增益最大的特征
  2. 节点分裂:根据选定的特征将数据集分割成子集
  3. 递归构建:对每个子集重复上述过程,直到满足停止条件
  4. 叶节点生成:当节点满足停止条件时,将其标记为叶节点

停止条件:

  • 节点中所有样本属于同一类别
  • 节点中样本数量少于预设阈值
  • 树的深度达到预设最大值
  • 信息增益小于预设阈值

 

5、优势与适用场景

核心优势
决策树具有高度可解释性处理混合数据能力强两大核心优势。其决策过程可以转化为直观的"如果-那么"规则,能够同时处理数值型和分类型特征,通过信息增益自动识别重要特征,这使得决策树在需要透明决策过程的场景中表现突出。

主要局限
决策树面临容易过拟合结构不稳定两个关键挑战。树深度过大时会记住训练数据细节,数据微小变化可能导致树结构大幅改变,虽然可以处理回归问题,但在连续输出任务中不如专门的回归算法。

 
 

四、支持向量机(SVM):基于间隔的"边界守卫"

1、核心思想:最大间隔分类

SVM的核心思想是找到能最大化类别间隔的超平面,使得不同类别的数据点距离这个超平面尽可能远。这就像在两个国家之间建立边界线,不仅要分开两国,还要让边界线距离两国都尽可能远,以增加安全性。

1.1、数学表达

对于线性可分的数据,SVM寻找最优超平面 wTx+b=0w^T x + b = 0wTx+b=0,使得:

yi(wTxi+b)≥1,∀iy_i(w^T x_i + b) \geq 1, \quad \forall iyi(wTxi+b)1,i

各部分含义

  • www:法向量(垂直于超平面的向量)
  • bbb:偏置项(超平面的位置)
  • xix_ixi:第 iii 个样本的特征向量
  • yiy_iyi:第 iii 个样本的标签(+1 或 -1)
  • ≥1\geq 11:确保样本距离超平面至少为1个单位

间隔的概念:两个类别到超平面的距离之和

计算

  • 类别A到超平面的距离:1∥w∥\frac{1}{\|w\|}w1
  • 类别B到超平面的距离:1∥w∥\frac{1}{\|w\|}w1
  • 总间隔:2∥w∥\frac{2}{\|w\|}w2

目标:最大化间隔,即最小化 ∥w∥\|w\|w

 

1.2、具体例子

假设我们有一个二分类问题:

数据

  • 类别A(yi=+1y_i = +1yi=+1):红色点
  • 类别B(yi=−1y_i = -1yi=1):蓝色点

超平面wTx+b=0w^T x + b = 0wTx+b=0

约束条件

  • 对于类别A的样本:+1×(wTxi+b)≥1+1 \times (w^T x_i + b) \geq 1+1×(wTxi+b)1
  • 对于类别B的样本:−1×(wTxi+b)≥1-1 \times (w^T x_i + b) \geq 11×(wTxi+b)1

 

1.3、支持向量:决策边界的核心

只有距离超平面最近的样本(支持向量)影响决策边界。这些样本满足:

yi(wTxi+b)=1y_i(w^T x_i + b) = 1yi(wTxi+b)=1

支持向量的稀疏性使得SVM具有良好的泛化能力,因为其他样本的移动不会影响超平面。

 

1.4、SVM间隔设计的优势总结

优势核心作用具体表现
鲁棒性间隔越大,模型对噪声越不敏感即使数据有微小变化,分类结果也不会改变,确保模型稳定性
泛化能力间隔越大,模型在新数据上的表现越好有效减少过拟合风险,提升模型预测准确性
唯一性间隔最大的超平面是唯一的确保模型最优性和可重现性,避免多个解的选择问题

 

2、优化目标:间隔最大化

SVM的优化目标是最大化间隔,同时最小化误分类:

min⁡w,b12∥w∥2+C∑i=1Nξi\min_{w, b} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^N \xi_iw,bmin21w2+Ci=1Nξi

约束条件yi(wTxi+b)≥1−ξi,ξi≥0\text{约束条件} \quad y_i(w^T x_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0约束条件yi(wTxi+b)1ξi,ξi0

优化公式

第一部分12∥w∥2\frac{1}{2} \|w\|^221w2

  • 目标:最小化 ∥w∥\|w\|w,即最大化间隔
  • 原因:间隔 = 2∥w∥\frac{2}{\|w\|}w2,所以最小化 ∥w∥\|w\|w 等价于最大化间隔

第二部分C∑i=1NξiC \sum_{i=1}^N \xi_iCi=1Nξi

  • 目标:最小化误分类的惩罚
  • CCC:正则化参数,控制误分类的惩罚程度
  • ξi\xi_iξi:松弛变量,允许部分样本违反约束

软间隔约束yi(wTxi+b)≥1−ξiy_i(w^T x_i + b) \geq 1 - \xi_iyi(wTxi+b)1ξi

  • 允许部分样本违反原始约束
  • ξi\xi_iξi 表示违反约束的程度

C值的作用

  • C很大:误分类惩罚很重,模型倾向于完美分类,间隔较小
  • C很小:误分类惩罚较轻,模型倾向于最大化间隔,允许更多误分类
  • C适中:在间隔最大化和误分类最小化之间找到平衡

松弛变量ξ的作用

ξi的含义

  • ξi = 0:样本满足原始约束,距离超平面≥1
  • 0 < ξi < 1:样本在间隔内,但分类正确
  • ξi ≥ 1:样本被误分类

 

具体例子

假设我们有一个二分类问题,其中大部分样本可以完美分开,但少数样本存在重叠。在这种情况下,SVM的优化过程分为三个关键步骤:

  1. 首先通过最小化 12∥w∥2\frac{1}{2} \|w\|^221w2 来最大化间隔,提升模型的鲁棒性;
  2. 然后通过最小化 C∑i=1NξiC \sum_{i=1}^N \xi_iCi=1Nξi 来控制误分类,确保分类的准确性;
  3. 最后通过调节参数C来平衡间隔最大化和误分类最小化这两个目标。

经过这样的优化过程,SVM能够找到一个既最大化间隔又最小化误分类的超平面,从而构建出具有良好泛化能力和鲁棒性的分类模型。

 

3、对偶形式:核技巧的基础(ing)

SVM的对偶形式为:

max⁡α∑i=1Nαi−12∑i,j=1NαiαjyiyjxiTxj\max_{\alpha} \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i,j=1}^N \alpha_i \alpha_j y_i y_j x_i^T x_jαmaxi=1Nαi21i,j=1NαiαjyiyjxiTxj

subject to0≤αi≤C,∑i=1Nαiyi=0\text{subject to} \quad 0 \leq \alpha_i \leq C, \quad \sum_{i=1}^N \alpha_i y_i = 0subject to0αiC,i=1Nαiyi=0

对偶形式的重要性在于它引入了核技巧,使得SVM能够处理非线性分类问题。

 

4、核技巧:非线性分类的关键

核技巧通过将数据映射到高维空间来处理非线性分类问题。常用的核函数包括:

RBF核(高斯核):
K(xi,xj)=exp⁡(−γ∥xi−xj∥2)K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2)K(xi,xj)=exp(γxixj2)

多项式核:
K(xi,xj)=(γxiTxj+r)dK(x_i, x_j) = (\gamma x_i^T x_j + r)^dK(xi,xj)=(γxiTxj+r)d

线性核:
K(xi,xj)=xiTxjK(x_i, x_j) = x_i^T x_jK(xi,xj)=xiTxj

为什么核技巧有效?

核技巧允许SVM在高维空间中寻找复杂的非线性边界,同时保持计算效率。通过核函数,我们可以在高维空间中计算内积,而无需显式地映射数据。

 

5、SVM的工作步骤

  1. 数据映射:通过核函数将数据映射到高维空间
  2. 间隔最大化:寻找能最大化类别间隔的超平面
  3. 支持向量识别:识别影响决策边界的关键样本
  4. 正则化控制:通过参数 CCC 控制误分类的惩罚程度

 

6、SVM算法总结

核心优势

SVM算法具有强泛化能力处理高维数据支持向量稀疏性多种核函数选择四大优势,通过最大化间隔提升模型鲁棒性,核技巧有效处理高维特征空间,只有少数支持向量影响决策边界,能够适应不同的数据分布。

适用场景

  1. SVM特别适合中等规模数据集高维特征空间需要高精度预测数据分布复杂的场景,在文本分类、图像识别、生物信息学和金融风险评估等领域表现优异。
  2. 然而,SVM也面临大规模数据集训练时间复杂度高特征尺度差异大需要标准化预处理需要概率输出的场合等局限,这些因素限制了SVM在某些特定场景下的应用。

 

四种算法综合对比

算法数学核心主要作用适用场景计算复杂度
KNN距离度量+投票无需训练,直观分类小数据、特征相似性强O(n)O(n)O(n)
朴素贝叶斯贝叶斯定理+条件独立概率推断,速度快文本分类、高维稀疏数据O(n×d)O(n \times d)O(n×d)
决策树信息增益/基尼指数规则生成,可解释规则明确、混合类型数据O(nlog⁡n)O(n \log n)O(nlogn)
SVM最大间隔+核技巧精准分界,泛化强高维、复杂边界、精度优先O(n2)O(n^2)O(n2)

综合选择指导:

  • 数据规模小(<1000样本):选择朴素贝叶斯或KNN
  • 需要可解释性:选择决策树
  • 高维特征(>1000维):选择朴素贝叶斯或SVM
  • 数据不平衡:重点关注F1分数和AUC-ROC
  • 计算资源有限:选择朴素贝叶斯或决策树

 

非线性分类算法为我们提供了应对复杂数据分布的多样工具。每种算法都有其独特的数学原理和适用场景:

  • KNN强调"邻居投票",适合小规模相似性数据
  • 朴素贝叶斯依赖概率推断,在文本分类中表现优异
  • 决策树擅长规则生成,提供高度可解释的模型
  • SVM以最大间隔和核技巧著称,在高维复杂数据中表现突出
http://www.lryc.cn/news/607790.html

相关文章:

  • Docker 的网络模式
  • OTC焊接机器人节能技巧
  • Python 第一阶段测试题 答案及解析
  • 机器学习【五】decision_making tree
  • 高性能MCP服务器架构设计:并发、缓存与监控
  • 淘宝小程序的坑
  • Clickhouse#表记录转换为insert语句
  • 【机器学习】“回归“算法模型的三个评估指标:MAE(衡量预测准确性)、MSE(放大大误差)、R²(说明模型解释能力)
  • Human Brain Mapping:静息态功能磁共振成像的回归动态因果建模
  • C语言(长期更新)第7讲:VS实用调试技巧
  • ADB 底层原理
  • Android 运行 deno 的新方法 (3): Termux 胖喵安初
  • 【Leetcode hot 100】49.字母异位词分组
  • [mssql] 分析SQL Server中执行效率较低的SQL语句
  • imx6ull-驱动开发篇6——Linux 设备树语法
  • 快速了解决策树
  • 四、Portainer图形化管理实战与Docker镜像原理
  • 音视频学习(四十五):声音的产生
  • 图漾相机-ROS1_SDK_ubuntu 4.X.X版本编译
  • 档案馆可视化:历史宝库的数字新貌
  • Thread 中的 run() 方法 和 start() 方法的
  • JavaScript:Ajax(异步通信技术)
  • 编译器工作原理的显微镜级拆解
  • 个人电脑部署私有化大语言模型LLM
  • Python爬虫实战:研究mahotas库,构建图像获取及处理系统
  • 重型机械作业误伤预警响应时间缩短80%!陌讯多模态识别算法在工程现场的应用优化
  • build文件夹下面的主要配置文件
  • Day 29: 复习
  • 设计模式篇:在前端,我们如何“重构”观察者、策略和装饰器模式
  • (LeetCode 面试经典 150 题) 138. 随机链表的复制 (哈希表)