机器学习第七课之支持向量机SVM

目录

简介:

一、什么是支持向量机

二、如何选取最佳的超平面

1.超平面方程 (优化目标)

2.如何寻找最优的超平面

3.举例分析

4.软间隔​编辑

三、核函数

1举例

2常用核函数

3.多项式核函数

4.高斯核函数:

四、svm的优缺点

五、支持向量机的API

六、案例分析


简介:

        欢迎来到机器学习系列课程的第七课!在这一课中,我们将聚焦于支持向量机(SVM) 这一经典且极具影响力的算法。作为监督学习领域的重要工具,SVM 凭借其出色的泛化能力和在小样本、高维空间中的优异表现,至今仍被广泛应用于图像识别、文本分类、生物信息学等多个领域。本节将从 SVM 的基本原理讲起,带大家理解它如何通过寻找最优超平面来实现数据分类 —— 这一超平面不仅能将不同类别的样本清晰分隔,还能使两类样本到超平面的最小距离(间隔)最大化,从而提升模型的稳定性。我们会深入剖析 “支持向量” 的核心概念,揭示这些关键样本点如何决定超平面的位置,以及它们在模型训练中的特殊作用。此外,面对线性不可分的数据,SVM 的核函数技巧堪称 “点睛之笔”。我们将详细解读线性核、多项式核、径向基核(RBF)等常用核函数的原理,展示它们如何将低维空间中线性不可分的数据映射到高维空间,进而实现线性可分。同时,还会探讨正则化参数(C)对模型复杂度和泛化能力的影响,帮助大家掌握 SVM 的调优思路。

一、什么是支持向量机

        很久以前的情人节,公主被魔鬼绑架了,王子要去救公主,魔鬼和他玩了一个游戏。魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。”

  • 第一次,王子这么放:

  • 魔鬼又摆了更多的球,有一个球站错了阵营:

SVM 试图把棍子放在最佳位置,使棍两边有尽可能大的间隙 。

魔鬼放更多球后,棍仍能作为好的分界线 ,体现 SVM 对数据分类的有效性与泛化能力 。

        魔鬼使花招重新摆放球,王子拍桌让球飞起,拿纸插在两种颜色球中间 ,用于形象阐释 SVM 处理线性不可分等情况时的核函数等思想(将低维线性不可分数据映射到高维实现线性可分,类似把球 “升维” 后用平面分隔 )。

解释 SVM(支持向量机)相关概念 

  • 球 -> [data -> 数据]
  • 棍子 -> [classifier -> 分类器]
  • 最大间隙 trick -> [optimization -> 最优化]
  • 拍桌子 -> [kernelling -> 核函数]
  • 那张纸 -> [hyperplane -> 超平面]

二、如何选取最佳的超平面

对于这个图片我们去寻找

1.超平面方程 (优化目标)

样本点假设

假设有一堆样本点(x_1,y_1), (x_2,y_2), (x_3,y_3), \dots, (x_n,y_n)

不同维度平面方程

  1. 二维平面
    • 常规直线方程:y = kx + b
    • 转化后的形式:Ax_1 + Bx_2 + C = 0,备注 “一条线”
  2. 三维平面
    • 方程:Ax_1 + Bx_2 + Cx_3 + D = 0 ,备注 “平面”
  3. 更高维平面(超平面)
    • 方程:\omega_1x_1 + \omega_2x_2 + \omega_3x_3 + \cdots + \omega_nx_n + b = 0,备注 “超平面”

综合超平面函数

\omega^t\Phi(x) + b = 0,右侧备注 “\Phi(x)看作x”

标签问题

        在 SVM 中我们不用 0 和 1 来区分,使用 + 1 和 - 1 来区分,这样会更严格。 假设超平面可以将训练的样本正确分类,那么对于任意样本: 如果 y = +1,则称为正例,y = -1,则称为负例。

决策函数:y(x) = sign(\omega^t \phi(x) + b)

符号函数

sign(x) = \begin{cases} -1, & x < 0 \\ 0, & x = 0 \\ 1, & x > 0 \end{cases}

整合

决策函数

y(x) = sign(\omega^t \Phi(x) + b)

样本点分类正确的情况

当样本点分类正确的时候,有:

  • 若 y(x_i) > 0,则 y = +1(正例 )
  • 若 y(x_i) < 0,则 y = -1(负例 )

整合结果

y \cdot y(x_i) > 0

距离问题:

(1)点到直线的距离

d = \frac{|\omega_1 x_1 + \omega_2 x_2 + b|}{\sqrt{\omega_1^2 + \omega_2^2}}

(2)点到平面的距离

d = \frac{|\omega_1 x_1 + \omega_2 x_2 + \omega_3 x_3 + b|}{\sqrt{\omega_1^2 + \omega_2^2 + \omega_3^2}}

(3)点到超平面的距离

d = \frac{|\omega_1 x_1 + \omega_2 x_2 + \omega_3 x_3 + \cdots + \omega_n x_n + b|}{\sqrt{\omega_1^2 + \omega_2^2 + \omega_3^2 + \cdots + \omega_n^2}}

        简写为:y(x_i) = \frac{1}{||\omega||} (\omega^t \Phi(x_i) + b),其中||\omega||\omega的范数,\Phi(x_i)是样本(x_i的映射 。这是 SVM 中关于点到超平面距离的数学表达,用于后续优化间隔等操作 。

改进:

对公式加上正确性:y(x_i) = \frac{1}{||\omega||} y_i (\omega^t \phi(x_i) + b)

分类正确条件

分类正确时:y_i \cdot y(x_i) > 0

两个衡量指标

  • (1) 确信度:点到超平面距离
  • (2) 正确性:分类正确

2.如何寻找最优的超平面

步骤(1):找到离超平面最近的点

y(x_i) = \min_{i = 1, \dots, N} \frac{1}{||w||} y_i (\omega^t \Phi(x_i) + b)

步骤(2):最大化这个距离

(\max_{\omega, b} [y(x_i)]

使得离超平面最近的点到超平面的距离越远越好。

最终构成损失函数求解

步骤(1):设定最小值

令 \min(y_i (\omega^t \Phi(x_i) + b)) = 1,右侧原因说明:因分类正确时 y_i (\omega^t \Phi(x_i) + b) \geq 0 ,经放缩变换可使 y_i (\omega^t \Phi(x_i) + b) \geq 1,让条件更严格 。

步骤(2):转化优化目标

则优化目标变为 \underset{\omega, b}{\text{argmax}} \frac{1}{||\omega||} 且 y_i (\omega^t \Phi(x_i) + b) \geq 1 ,即要在满足 y_i (\omega^t \Phi(x_i) + b) \geq 1的约束下,最大化 \frac{1}{||\omega||},等价于最小化 ||\omega||,这是 SVM 损失函数求解及优化目标转换的关键步骤 。

拉格朗日乘子法:

求解有约束条件的极值问题

  • 函数:\min(f(x))
  • 约束条件:s.t. g_i(x) \leq 0 (i = 1,2, \dots )

对应 SVM 的目标与约束

\underset{\omega, b}{\text{argmax}} \frac{1}{||\omega||}

y_i(\omega^t \phi(x_i) + b) \geq 1

修改目标函数与约束条件相关内容

原目标函数:

{\text{argmax}} \frac{1}{||\omega||}

转化后:

{\text{min}} \frac{1}{2} ||\omega||^2(极值点不变 )

经过一系列的操作得到

3.举例分析

对于svm的推导公式实在晦涩难懂,我们直接讲述一个案例就好理解了。已知如图所示训练数据集,求最大间隔分离超平面。

  • 正例点:x_1 = (3,3)^Tx_2 = (4,3)^T
  • 负例点:x_3 = (1,1)^T

    1.数据点代入公式

    \min_{\alpha} \frac{1}{2}(18\alpha_1^2 + 25\alpha_2^2 + 2\alpha_3^2 + 42\alpha_1\alpha_2 - 12\alpha_1\alpha_3 - 14\alpha_2\alpha_3) - \alpha_1 - \alpha_2 - \alpha_3

    2.添加约束

    • 等式约束:\alpha_1 + \alpha_2 - \alpha_3 = 0 ,推出 \alpha_3 = \alpha_1 + \alpha_2
    • 不等式约束:\alpha_i \geq 0, i = 1,2,3

    3.代入化简

    化简后的式子:4\alpha_1^2 + \frac{13}{2}\alpha_2^2 + 10\alpha_1\alpha_2 - 2\alpha_1 - 2\alpha_2 ,通过求最小值(求偏导方式)进一步处理 。

    \boldsymbol{\alpha_1}\boldsymbol{\alpha_2}求偏导等于 0

    • 计算得\alpha_1 = 1.5(满足\alpha_i \geq 0
    • \alpha_2 = -1(不满足\alpha_i \geq 0 )

    4.条件判断

    \alpha_2 = -1不满足条件,对应超平面方程不可取(强调先决条件必须满足 )

    5.思考

    解不在偏导为 0 的位置,应在边界上(\alpha_1\alpha_2等于 0 )

    \boldsymbol{\alpha_1}\boldsymbol{\alpha_2}等于 0

    • \alpha_1 = 0: 代入原式得\frac{13}{2}\alpha_2^2 - 2\alpha_2 ,求偏导后得\alpha_2 = \frac{2}{13},再代入原式求最小值为-\frac{2}{13} \approx -0.1538

    • \alpha_2 = 0: 代入原式得4\alpha_1^2 - 2\alpha_1,求偏导后得\alpha_1 = \frac{1}{4},再代入原式求最小值为-\frac{1}{4} = -0.25

            最小值在(\frac{1}{4}, 0)处取得 ,这是 SVM 对偶问题求解中处理约束条件、寻找最优解的关键推导流程 。

    6.求解每个\alpha

    \alpha_1 = 1/4,\alpha_2 = 0,由\boldsymbol{\alpha_3 = \alpha_1 + \alpha_2},得\boldsymbol{\alpha_3 = 1/4}

    7.求解参数\omega

    \boldsymbol{\omega = \frac{1}{4} * 1 * (3,3) + \frac{1}{4} * (-1) * (1,1) = \left(\frac{1}{2},\frac{1}{2}\right)}

    8. 求解参数b

    公式:\boldsymbol{b = y_i - \omega\varPhi(x_i)}

    • <1> 带入正例\(y = 1\),x(3,3)\boldsymbol{b = 1 - \left(\frac{1}{2},\frac{1}{2}\right) \cdot (3,3) = 1 - \frac{6}{2} = -2}
    • <2> 带入负例\(y = -1\),x(1,1)\boldsymbol{b = -1 - \left(\frac{1}{2},\frac{1}{2}\right) \cdot (1,1) = -1 - 1 = -2}

    9.总方程

    \boldsymbol{\frac{1}{2}x_1 + \frac{1}{2}x_2 - 2 = 0}

    最后我们就求出svm的核函数为上图中的那条红线。

    4.软间隔

    软间隔:数据中存在一些噪音点,如果考虑这些噪音点的话,超平面可能表现的效果不好。

    我们允许个别样本点出现在间隔带里面。

    量化指标:引入松弛因子。

    原始:\boldsymbol{y_i(\omega^t\varPhi(x_i) + b) \geq 1} [每个样本点必须满足]

    放松:\boldsymbol{y_i(\omega^t\varPhi(x_i) + b) \geq 1 - \xi_i}[个别样本点不用满足]

    新的目标函数:
    \frac{1}{2}\|\omega\|^{2}+C \cdot \sum_{i = 1}^{n} \xi_{i}
    C:惩罚因子
    (1) 当 C 值比较大时,说明分类比较严格,不容有误。

    (2)当 C 值比较小时,说明分类比较宽松,可以有误。

    三、核函数

    谈一下核函数:
    线性不可分情况:
    在二维空间无法用一条直线分开,映射到三维 (或者更高维) 空间即可解决。
    目标:
    找到一个\boldsymbol{\varPhi(x_i)},对原始数据做一个变换。
     

    1举例

            假设有两个数据,x1 = (x_1, x_2, x_3)x2 = (y_1, y_2, y_3),如果数据在三维空间无法线性可分,我们通过核函数将其从三维空间映射到更高的九维空间,那么此时:

    f(x) = (x_1x_1, x_1x_2, x_1x_3, x_2x_1, x_2x_2, x_2x_3, x_3x_1, x_3x_2, x_3x_3)

            如果计算内积的话,x1与x2计算即<f(x1)·f(x2)>,此时计算复杂度= 81,原始数据复杂度为\(3*3 = 9\),那么对于映射到n维空间,复杂度为:O(n^2)

            对于数据点:x1 = (1,2,3),x2 = (4,5,6),则f(x1) = (1,2,3,2,4,6,3,6,9),f(x2) = (16,20,24,20,25,30,24,30,36),此时计算<f(x1)·f(x2)>= 16 + 240 + 72 + 40 + 100 + 180 + 72 + 180 + 324 = 1024

    一个巧合

    K(x,y) = (<x1, x2>)^2 = (4 + 10 + 18)^2 = 32^2 = 1024

    即:\boldsymbol{K(x,y) = (<x,y>)^2 = <f(x1)·f(x2)>}[先内积再平方与先映射再内积结果一致]

    特性

            在低维空间完成高维空间的运算,结果一致,大大降低了高维空间计算的复杂度。

    本质

            在找到一个 (核) 函数,将原始数据变换到高维空间,但是高维数据可以在低维运算。

    2常用核函数

    • 线性核函数:\boldsymbol{k(x_i, x_j) = x_i \cdot x_j}

    • 多项式核函数:\boldsymbol{k(x_i, x_j) = (\gamma < x_i \cdot x_j > + c)^n}

    • 高斯核函数:\boldsymbol{k(x_i, x_j) = exp(-\gamma \|x_i - x_j\|)}

    3.多项式核函数

    k(x_i, x_j) = (\gamma \langle x_i \cdot x_j \rangle + c)^n \stackrel{\gamma = 1, c = 0, n = 2}{\longrightarrow} k(x_i, x_j) = (x_i \cdot x_j)^2

    假设有两个数据,x1 = (x_1, x_2)x2 = (y_1, y_2),如果数据在二维空间无法线性可分,我们通过核函数将其从二维空间映射到更高的三维空间,那么此时:

    f(x) = (x_1^2, \sqrt{2}x_1x_2, x_2^2)

    更具体的例子: x1 = (1, 2)x2 = (3, 4)

    (1) 转换到三维再内积 (高维运算)

    x1 -> (1, 2\sqrt{2}, 4)\) \(x2 -> (9, 12\sqrt{2}, 16)\)\(\langle x1 \cdot x2 \rangle = 9 + 48 + 64 = 121

    (2) 先内积,再平方 (低维运算)

    \langle x1 \cdot x2 \rangle = 3 + 8 = 11 \, -> \, 11^2 = 121

    4.高斯核函数:

    \boldsymbol{k(x_i, x_j) = exp(-\gamma \|x_i - x_j\|)}              rbf: 又称径向基函数

            对于数据点 1, 转换到二维空间:

    (1) 找两个地标,或者说两个数据点,将他们作为一个正态分布的均值。-> 比如 - 2 和 1

    (2) 计算数据到地标的距离:<1>-1 + 2 = 1\) \(<2>-1 - 1 = -2

    (3) 指定\gamma为 0.3.[\gamma必须大于 0]

    (4) 计算新的坐标:[exp(-0.3*1), exp(-0.3*(-2))] -> (0.74, 0.30)

    谈一下\boldsymbol{\gamma}值:

    \boldsymbol{k(x_i, x_j) = exp(-\gamma \|x_i - x_j\|)}

    (1) 当\boldsymbol{\gamma}值越小的时候,正态分布越胖, 辐射的数据范围越大,过拟合风险越低。

    (2) 当\boldsymbol{\gamma}值越大的时候,正态分布越瘦, 辐射的数据范围越小,过拟合风险越高。

    四、svm的优缺点

    优点:

    1. 有严格的数学理论支持,可解释性强,不同于传统的统计方法能简化我们遇到的问题。
    2. 能找出对任务有关键影响的样本,即支持向量。
    3. 软间隔可以有效松弛目标函数。
    4. 核函数可以有效解决非线性问题。
    5. 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了 “维数灾难”。
    6. SVM 在小样本训练集上能够得到比其它算法好很多的结果。

    缺点:

    1. 对大规模训练样本难以实施。
      SVM 的空间消耗主要是存储训练样本和核矩阵,当样本数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间。超过十万及以上不建议使用 SVM。

    2. 对参数和核函数选择敏感。
      支持向量机性能的优劣主要取决于核函数的选取,所以对于一个实际问题而言,如何根据实际的数据模型选择合适的核函数从而构造 SVM 算法。目前没有好的解决方法解决核函数的选择问题。

    3. 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。

    五、支持向量机的API

    class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto_deprecated',coef0=0.0, shrinking=True, probability=False, tol=0.001,cache_size=200, class_weight=None, verbose=False,max_iter=-1, decision_function_shape='ovr', random_state=None)[source]

    参数解释(按顺序)

    1. C

      • 含义:正则化参数(软间隔惩罚系数 ),控制 “对分类错误的容忍度” 与 “模型复杂度” 的权衡。
      • 作用:C 越大,对错误分类惩罚越重(倾向严格分类,易过拟合);C 越小,允许更多错误(倾向简化模型,易欠拟合 )。
    2. kernel

      • 含义:核函数类型,决定如何处理非线性关系。
      • 可选值:'linear'(线性核)、'poly'(多项式核 )、'rbf'(高斯核,默认)、'sigmoid'(Sigmoid 核 )等。
    3. degree

      • 含义:仅对 kernel='poly'(多项式核)有效,指定多项式的次数 n。
      • 作用:次数越高,模型拟合能力越强(但也易过拟合 )。
    4. gamma

      • 含义:核函数的系数(对 rbf/poly/sigmoid 核生效 ),控制核函数的 “影响范围”。
      • 作用:gamma 越大,核函数 “聚焦局部”(样本影响范围小,易过拟合 );gamma 越小,核函数 “全局化”(影响范围大,易欠拟合 )。
      • 备注:'auto_deprecated' 是旧版兼容写法,新版常用 'scale'(按特征方差缩放 )或 'auto'(按特征数倒数缩放 )。
    5. coef0

      • 含义:仅对 kernel='poly'/'sigmoid' 有效,核函数的独立项(多项式核的偏移量、Sigmoid 核的截距 )。
      • 作用:调整核函数的形状,对非线性拟合有微调作用。
    6. shrinking

      • 含义:是否启用 “支持向量收缩” 优化。
      • 作用:加速训练,默认 True(建议开启,尤其是大数据 )。
    7. probability

      • 含义:是否启用概率估计(基于 Platt 缩放 )。
      • 作用:True 则输出分类概率(会增加训练 / 预测时间 ),默认 False
    8. tol

      • 含义:迭代停止的精度阈值(对偶问题求解的收敛条件 )。
      • 作用:tol 越小,训练越精细(但耗时 );默认 0.001
    9. cache_size

      • 含义:核缓存大小(单位:MB ),用于存储核矩阵以加速计算。
      • 作用:内存充足时调大(如 500)可加速训练,默认 200
    10. class_weight

      • 含义:类别权重,解决不平衡数据集问题。
      • 可选值:None(等权重 )、'balanced'(按类别样本数自动分配权重 ),或字典手动指定(如 {0:1, 1:5} 给类别 1 更高权重 )。
    11. verbose

      • 含义:是否输出训练过程的详细日志。
      • 作用:True 则打印迭代信息(调试用 ),默认 False
    12. max_iter

      • 含义:最大迭代次数(对偶问题求解的迭代上限 )。
      • 作用:-1 表示无限制(由 tol 决定停止 ),可手动设小值强制提前停止。
    13. decision_function_shape

      • 含义:多分类策略,'ovr'(一对其余,默认 )或 'ovo'(一对一 )。
      • 作用:'ovr' 更高效,'ovo' 对某些数据集精度更高(但计算量大 )。
    14. random_state

      • 含义:随机种子(用于初始化、采样的随机性控制 )。
      • 作用:设固定值(如 42 )可复现结果,默认 None(随机 )

    六、案例分析

    使用支持向量机对鸢尾花进行训练、现有数据集:

    数据读取与准备

    import pandas as pd
    # 读取CSV数据,假设无表头(header=None)
    data = pd.read_csv('iris.csv', header=None)
    • 读取鸢尾花数据集,这是一个经典的多类别分类数据集,包含 3 种鸢尾花的特征数据

     数据可视化(原始数据)

    import matplotlib.pyplot as plt
    # 提取两类数据(假设前50行为类别0,50-100行为类别1)
    data1 = data.iloc[:50, :]  # 第一类鸢尾花
    data2 = data.iloc[50:100, :]  # 第二类鸢尾花# 选择第2个和第4个特征进行可视化(因为四维数据无法直接展示)
    plt.scatter(data1[1], data1[3], marker='+')  # 第一类用"+"标记
    plt.scatter(data2[1], data2[3], marker='o')  # 第二类用"o"标记
    • 鸢尾花数据集原本有 4 个特征,这里选择第 2 列和第 4 列特征进行可视化
    • 用不同标记区分两类鸢尾花数据点

    SVM 模型训练

    from sklearn.svm import SVC
    # 构建特征矩阵X(选择第2和第4个特征)和标签y(最后一列是类别)
    X = data.iloc[:, [1, 3]]
    y = data.iloc[:, -1]# 创建线性核SVM模型,C设为无穷大模拟硬间隔SVM
    svm = SVC(kernel='linear', C=float('inf'), random_state=0)
    svm.fit(X, y)  # 训练模型# 获取SVM的权重系数和偏置项
    w = svm.coef_[0]  # 权重向量
    b = svm.intercept_[0]  # 偏置项
    • 使用sklearnSVC类构建支持向量机模型
    • kernel='linear'表示使用线性核函数
    • C=float('inf')表示使用硬间隔(不允许任何样本被错误分类)
    • 训练后获取模型参数:权重系数w和偏置b,用于构建决策边界

    绘制决策边界和间隔

    import numpy as np
    # 生成x轴数据(特征1的取值范围)
    x1 = np.linspace(0, 7, 300)# 计算决策边界和间隔线(基于SVM的决策函数w·x + b = 0)
    x2 = -(w[0] * x1 + b) / w[1]  # 决策边界:w·x + b = 0
    x3 = (1 - w[0] * x1 - b) / w[1]  # 上间隔:w·x + b = 1
    x4 = (-1 - w[0] * x1 - b) / w[1]  # 下间隔:w·x + b = -1# 绘制决策边界和间隔线
    plt.plot(x1, x2, linewidth=2, color='r')  # 决策边界(实线)
    plt.plot(x1, x3, linewidth=1, color='r', linestyle='--')  # 上间隔(虚线)
    plt.plot(x1, x4, linewidth=1, color='r', linestyle='--')  # 下间隔(虚线)
    • 决策边界是 SVM 找到的最优分类线,满足w·x + b = 0
    • 间隔线表示分类的安全区域,上间隔为w·x + b = 1,下间隔为w·x + b = -1

    调整显示范围和绘制支持向量

    # 设置坐标轴范围
    plt.xlim(4, 7)
    plt.ylim(0, 5)# 获取并绘制支持向量(对决策边界有决定性影响的样本点)
    vets = svm.support_vectors_
    plt.scatter(vets[:, 0], vets[:, 1], c='b', marker='x')  # 支持向量用蓝色"x"标记plt.show()  # 显示图像

    最终结果

    • 支持向量是距离决策边界最近的样本点,决定了 SVM 的决策边界位置
    • 最终图像展示了两类数据点、决策边界、间隔区域和支持向量

    我们还可以使用交叉验证去寻找最好的模型参数,这里讲述了如何用交叉验证去寻找最好的参数。

    机器学习第三课之逻辑回归(二)LogisticRegression

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/news/918309.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/news/918309.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    P3232 [HNOI2013] 游走,solution

    原题&#xff1a; link&#xff0c;点击这里喵。 题意&#xff1a; 给定一个 nnn 个点 mmm 条边的无向连通图&#xff0c;图无重边和自环&#xff0c;顶点从 111 编号到 nnn&#xff0c;边从 111 编号到 mmm。 小 Z 在该图上进行随机游走&#xff0c;初始时小 Z 在 111 号顶…

    Docker容器部署discuz论坛与线上商城

    准备 关闭防火墙&#xff0c;上下文[rootdocker ~]# systemctl disable --now firewalld[rootdocker ~]# setenforce 0下载应用yum remove runc -y ### rocky8才需要yum install -y yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cento…

    Linux入门指南:26个基础命令全解析

    目录 一.基础概念与入门 1.Linux操作系统简介 2.终端与shell的基本概念 3.命令行界面的优势 二.基础指令 1.whoami ​2.useradd/userdel/passwd ​3.pwd ​4.ls ​5.cd 6.touch 7.mkdir 8.tree 9.rmdir/rm 10.man 11.cp 12.mv 13.cat 14.le…

    【后端】Java 8 特性 `User::getId` 语法(方法引用)介绍

    文章目录核心概念解析&#xff1a;方法引用的四种类型&#xff1a;关键特性&#xff1a;使用场景推荐&#xff1a;何时避免使用&#xff1a;性能说明&#xff1a;在 Java 中&#xff0c; User::getId 是一种称为 方法引用&#xff08;Method Reference&#xff09; 的语法糖&a…

    基于BP与CNN的图像分类模型构建、超参数优化及性能对比研究​

    一、实验目的实验目标构建基于神经网络模型的数据分析与模式识别框架&#xff0c;探明神经网络在大数据分析中的意义。实验任务构建基于深度 BP 神经网络与卷积神经网络的数据分析与模式识别框架&#xff0c;将数据集 MNIST 与 CIFAR-10 分别在两种模型中训练&#xff0c;并比较…

    HarmonyOS应用开发-低代码开发登录页面(超详细)

    本篇文章我来手把手教大家做一个HarmonyOS 应用的登录页面&#xff0c;逐步讲解&#xff0c;非常细致&#xff0c;百分百能学会&#xff0c;并提供全部源码。页面使用 DevEco Studio 的低代码开发。 通过本文的实践经验&#xff0c;我想告诉大家&#xff0c; HarmonyOS 应用开发…

    AJAX与axios框架

    文章目录前言案例跨域访问总结❗前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 通过 ajax 进行前后端交互 案例 此项目用到了javaweb知识 首先创建JavaWeb项目编写代码&#xff1a; package ajax;import java.io.IOException; import java.util.Arr…

    智能创造的幕后推手:AIGC浪潮下看AI训练师如何塑造智能未来

    文章目录一、AIGC时代的算法与模型训练概览二、算法与模型训练的关键环节三、AI训练师的角色与职责四、AI训练师的专业技能与素养五、AIGC算法与模型训练的未来展望《AI训练师手册&#xff1a;算法与模型训练从入门到精通》亮点内容简介作者简介谷建阳目录《医学统计学从入门到…

    Python设计模式 - 装饰模式

    定义 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;用于在不修改原有类的情况下动态地扩展对象的功能。 结构抽象组件&#xff08;Component&#xff09;&#xff1a;定义对象的公共接口&#xff0c;使得客户端能以一致的方式处理未被装…

    MySQL(188)如何使用MySQL的慢查询工具?

    使用MySQL的慢查询工具可以帮助开发者识别和优化性能不佳的SQL查询。以下是详细深入的步骤和代码示例&#xff0c;帮助你使用MySQL的慢查询工具来进行查询分析和优化。 一、启用慢查询日志 首先&#xff0c;你需要确保MySQL的慢查询日志功能是启用的。慢查询日志记录了所有执行…

    如何培养自己工程化的能力(python项目)

    培养 Python 项目的工程化能力需要系统性训练&#xff0c;以下从基础到高阶的实践路径&#xff0c;结合具体案例和工具链&#xff0c;帮助你逐步进阶&#xff1a;一、夯实工程化基础能力​1. 规范代码与项目结构•​项目模板化​使用 cookiecutter生成标准项目结构&#xff0c;…

    AI编程插件对比分析:CodeRider、GitHub Copilot及其他

    AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功能特性、性能表现、集成性、用户…

    uniapp/uniappx实现图片或视频文件选择时同步告知权限申请目的解决华为等应用市场上架审核问题

    在UNIAPP支持vue和nvue,在UNIAPPX支持uvue&#xff0c;安卓支持在选择图片或视频文件权限申请的时候自动同步告知权限申请目的。轻松解决在华为应用市场审核&#xff0c;要求告知权限申请目的或说明的问题。 UNIAPP相册图片视频选择器(安卓可以自定义界面样式)功能介绍&#x…

    jupyter notebook如何打开其他盘目录

    问题描述Jupyter Notebook 相信是我们学习 Python 避不开的一个工具。当我们使用 pip install notebook 安装 Notebook 之后&#xff0c;使用命令 jupyter notebook 启动服务&#xff0c;启动之后默认会在浏览器打开界面。我们会发现&#xff0c;这个界面默认在 C 盘下&#xf…

    C语言深度剖析

    一、关键字 1.1 最快的关键字-register register 这个关键字请求编译器尽可能将变量存在CPU内部寄存器中,而不是通过内存寻址以提高效率。 注意是:尽可能、而不是绝对 1.1.1 皇帝身边的小太监-寄存器 不知道什么是寄存器,那见过太监没有其实寄存器就是相当于。一个cpu的…

    电脑使用“碎片整理”程序的作用

    1.解决文件碎片化问题碎片整理的作用&#xff1a;将这些分散的文件片段重新整理、拼接&#xff0c;使其连续存储在硬盘的某个区域&#xff0c;减少文件的 “碎片化” 程度。2. 提升硬盘读写速度机械硬盘的特殊性&#xff1a;机械硬盘依赖磁头的物理移动来读取数据&#xff0c;若…

    AI 软件工程开发 AI 算法 架构与业务

    AI 软件工程开发 & AI 算法 & 架构与业务前言1.AI 软件工程开发1.1. AI Developer Studio &#xff08;playground级&#xff09;1.2. Agent & RAG1.3. LangChain & LangGraph1.4. MCP, Model Context Protocol1.5. Ollama1.6. Coze & Dify2.AI 算法2.1. G…

    uniapp实现的圆形滚盘组件模板

    采用 uniapp 实现的一款圆形滚盘示例组件模板, 支持 vue2、vue3&#xff0c;适配H5、微信小程序&#xff08;其他小程序未试过&#xff0c;可自行尝试&#xff09; 代码实现简约易懂&#xff0c;用户可根据自身需求下载模板&#xff0c;并进行扩展开发可到插件市场下载尝试&…

    无须炮解,打开即是Pro版

    聊一聊 文档或文件转图片&#xff0c;这个我有段时间没有推荐了。 今天发现了一款非常好用的图像格式转换编辑软件。 有需要的小伙伴请及时收藏&#xff0c;防止下次找不到。 软件介绍 全能图像格式转换工具 这是一款全能的图像转换软件&#xff0c;支持几乎所有的图像格式…

    企业高性能web服务器——Nginx

    Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个邮件代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发&#xff0c;官方测试nginx能够支撑5万并发链接&#xff0c;并且cpu、内存等资源消耗却非常低&#xff0c;运行非常稳定。所以其特点是占有内存…