机器学习:深入解析SVM的核心概念(问题与解答篇)【三、核函数】

news2024/12/23 22:11:22

核函数

    • ==**问题一:为什么说是有限维就一定存在高维空间可分呢?**==
      • 原始空间与特征空间
      • 为什么映射到高维空间可以实现可分
      • 核函数的作用
    • ==**问题二:最终怎么得到函数**==
      • 从对偶问题到决策函数的步骤:
      • 结论
    • ==**问题三:为什么说特征空间的好坏对于SVM性能重要?和核函数有什么关系?**==
      • 特征空间
      • 核函数
      • 特征空间的重要性
      • 核函数与特征空间的关系
      • 总结
    • ==**问题四:半正定性理解**==
      • 实际例子:
    • ==**问题五:为什么函数组合也能最终成立?**==
      • 1. 核函数的线性组合
      • 2. 核函数的直积
      • 3. 核函数与函数的乘积
      • 总结
  • 核函数讨论
    • 常用核函数
    • 使用核函数经验

在这里插入图片描述

问题一:为什么说是有限维就一定存在高维空间可分呢?

这个问题触及了核函数和支持向量机(SVM)中的一个基本概念,即通过映射到高维空间来实现数据的线性可分。这个概念基于Cover定理,它暗示了一个非线性可分的数据集在高维空间中更可能是线性可分的。

原始空间与特征空间

首先,我们来区分两个概念:

  1. 原始空间:这是我们的数据所在的空间,通常由数据的特征维度决定。
  2. 特征空间:这是通过某种映射(可能是非线性的)将原始数据转换后的空间,通常维度高于原始空间。

为什么映射到高维空间可以实现可分

  1. Cover的定理:这个定理指出,对于非线性可分的数据,通过非线性映射到高维空间,可以使得数据在这个高维空间内变得线性可分。定理认为,如果原始空间是有限维的,且数据是随机生成的,那么原始数据投影到足够高维的空间后,存在线性超平面能将数据正确分类的可能性会增加。

  2. 维度灾难:在低维空间中,数据点往往会彼此挤压,但在高维空间中,每个点都可以“呼吸”,因为空间大得多,每个数据点间的相对距离可能增加,这有助于找到一个合适的线性分界来区分不同类别。

  3. 几何直觉:在二维空间中,我们可以用一条线来分隔点;在三维空间中,我们可以用一个平面来分隔点。随着维度的增加,我们可以使用更高维的“超平面”来分隔点集。在足够高的维度中,几乎总是可以找到一个超平面将数据集分隔成两部分。

  4. 特征组合:通过映射到高维空间,我们实际上在创建原始特征的各种非线性组合。例如,如果原始特征是 x 1 x_1 x1 x 2 x_2 x2,在高维空间中,我们可能有 x 1 2 x_1^2 x12 x 1 x 2 x_1x_2 x1x2 x 2 2 x_2^2 x22 等特征。这些新特征有时会揭示数据中隐藏的结构,这些结构在原始空间中不是线性可分的。

核函数的作用

核函数允许我们在 不显式计算 高维映射的情况下,通过在原始空间内进行内积运算来间接工作在这个高维特征空间内。这就是所谓的“核技巧”,它避免了直接在高维空间中的昂贵计算。


然后其中这个


问题二:最终怎么得到函数

在这里插入图片描述
当我们使用核函数 k ( ⋅ , ⋅ ) k(\cdot, \cdot) k(,) 在SVM中,我们实际上是在使用一个非线性映射 ϕ \phi ϕ 将原始特征空间映射到一个高维空间,在这个高维空间中,数据更有可能是线性可分的。在这个高维空间中,我们的目标函数和决策函数将基于这个映射来表达。让我们一步步分解这个过程,了解如何从对偶问题的目标函数得到最终的决策函数 f ( x ) f(x) f(x)

从对偶问题到决策函数的步骤:

  1. 对偶问题的目标函数:

    在对偶问题中,我们最大化关于拉格朗日乘子 ( \alpha ) 的函数:
    max ⁡ α ( ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j k ( x i , x j ) ) \max_{\alpha} \left( \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 k(x_i, x_j) \right) αmax(i=1mαi21i=1mj=1mαiαjyiyjk(xi,xj))

    其中,约束条件是 ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m} \alpha_i y_i = 0 i=1mαiyi=0 α i ≥ 0 \alpha_i \geq 0 αi0。这个目标函数本质上是SVM原始问题的拉格朗日形式,其中的内积 x i T x j x_i^T x_j xiTxj 被核函数 k ( x i , x j ) k(x_i, x_j) k(xi,xj) 替代。

  2. 决策函数的构建:

    一旦我们找到了最优的 α \alpha α 值,我们可以构建SVM的决策函数。在没有核函数的情况下,我们有 f ( x ) = w T x + b f(x) = w^T x + b f(x)=wTx+b。当使用核函数时, w w w 可以表示为:
    w = ∑ i = 1 m α i y i ϕ ( x i ) w = \sum_{i=1}^{m} \alpha_i y_i \phi(x_i) w=i=1mαiyiϕ(xi)

w w w 现在是映射到高维空间的向量。我们无需直接计算 w w w,因为在核函数的帮助下,我们可以仅通过原始特征空间中的数据点来计算 w T ϕ ( x ) w^T \phi(x) wTϕ(x)

  1. 核函数的应用:

    核函数 k ( x i , x ) k(x_i, x) k(xi,x) 实际上是 ϕ ( x i ) \phi(x_i) ϕ(xi) ϕ ( x ) \phi(x) ϕ(x)内积 ϕ ( x i ) T ϕ ( x ) \phi(x_i)^T \phi(x) ϕ(xi)Tϕ(x)。因此,决策函数 f ( x ) f(x) f(x) 可以重写为:
    f ( x ) = ∑ i = 1 m α i y i k ( x , x i ) + b f(x) = \sum_{i=1}^{m} \alpha_i y_i k(x, x_i) + b f(x)=i=1mαiyik(x,xi)+b

    这里, k ( x , x i ) k(x, x_i) k(x,xi) 就是我们的核函数,它提供了一种有效的方式来计算在高维空间中 ϕ ( x ) \phi(x) ϕ(x) 与所有 ϕ ( x i ) \phi(x_i) ϕ(xi) 的内积,无需直接在高维空间中操作。

  2. 计算 ( b ):

    为了找到偏置项 ( b ),我们可以使用任意一个支持向量 ( x_s )(即对应的 α s > 0 \alpha_s > 0 αs>0):
    y s ( ∑ i = 1 m α i y i k ( x s , x i ) + b ) = 1 y_s \left( \sum_{i=1}^{m} \alpha_i y_i k(x_s, x_i) + b \right) = 1 ys(i=1mαiyik(xs,xi)+b)=1

    从上面的式子中解出 ( b )。通常我们会使用所有支持向量得到的 ( b ) 值的平均值以获得更稳健的估计。

  3. 最终的决策函数:

    最终的SVM决策函数在使用了核函数的情况下形式如下:
    f ( x ) = ∑ i = 1 m α i y i k ( x , x i ) + b f(x) = \sum_{i=1}^{m} \alpha_i y_i k(x, x_i) + b f(x)=i=1mαiyik(x,xi)+b

    这个函数可以用来估计新样本 ( x ) 的类别标签。如果 f ( x ) > 0 f(x) > 0 f(x)>0,则 ( x ) 被分类为正类;如果 f ( x ) < 0 f(x) < 0 f(x)<0,则被分类为负类。

结论

核函数 k ( x i , x j ) k(x_i, x_j) k(xi,xj) 的引入允许我们在原始特征空间中间接使用高维空间的内积。这个过程提供了一种有效的计算方式,即使在高维空间中也能够处理,这是通过将数据点映射到高维特征空间并计算它们之间的内积来实现。这个映射是隐式的,通过核函数 k ( x i , x j ) k(x_i, x_j) k(xi,xj) 实现,无需显式地定义或计算映射 ϕ \phi ϕ。通过这种方式,我们能够构建决策函数来处理线性不可分的数据集。

问题三:为什么说特征空间的好坏对于SVM性能重要?和核函数有什么关系?

在这里插入图片描述
特征空间的质量对于SVM的性能至关重要,因为SVM是一个依赖于数据表示的机器学习模型。核函数在这里扮演了一个关键角色,因为它定义了在特征空间中如何度量样本之间的相似性

特征空间

  1. 定义:特征空间是我们在其中构建模型的空间,由数据的特征向量组成。
  2. 影响:数据在特征空间中的表示影响了模型的 学习能力 。如果特征能够很好地表示数据中的模式和关系,模型更容易学习。

核函数

  1. 映射:核函数隐式地将数据映射到一个更高维的特征空间中,帮助SVM在这个空间中找到线性分界面来分隔数据。
  2. 相似性度量:核函数实际上是在计算特征空间中两个向量的内积,这是一个 相似性的度量
  3. 选择:选择合适的核函数至关重要,因为它决定了数据如何在高维空间中被分布和区分。

特征空间的重要性

  1. 线性可分:在原始空间中不可分的数据,可以通过适当的映射在高维特征空间中变得线性可分。
  2. 模式识别:一个好的特征空间能更好地揭示数据中的模式,让SVM能够构建一个有效的分类器。

核函数与特征空间的关系

  1. 构造特征空间:核函数的选择直接定义了特征空间的构造。例如,多项式核可以捕捉特征的各种组合,而高斯径向基函数(RBF)核可以度量点之间的“距离”,形成一个以 每个数据点为中心 的分布。
  2. 性能影响:一个不恰当的核函数可能导致特征空间中的样本点不适于线性分界,从而影响模型的准确度。
  3. 过拟合与泛化:合适的核函数可以帮助模型实现泛化,而不恰当的选择可能导致过拟合。

总结

在实践中,选择合适的核函数对于构建有效的SVM模型至关重要。它不仅影响模型对数据的理解和分界线的构建,也影响模型的泛化能力。通过使用核函数,SVM可以在复杂的数据集上找到简洁的决策规则,即便在原始特征空间中数据是高度非线性的。

问题四:半正定性理解

半正定性是高维空间中的一个重要概念,我们可以用一个简化的类比来帮助理解。

想象你有一座山,山顶是最高点。如果这座山的形状是凸的(像一个碗),那么无论你在山腰的哪个位置开始,都可以直接走最陡峭的路线到达山顶。在这座“凸山”上,无论你选择哪条路径,你总能达到山顶。这就像是一个半正定函数:不管你从哪个方向查看它,它总是“向上”的。

数学上,当我们谈论一个函数或矩阵的半正定性时,我们指的是一种类似的属性。一个半正定矩阵,当你用它来“量度”两个向量的相似性时,得到的结果总是非负的。这就保证了在我们通过这个矩阵来观察数据时,不会有意外的“洞”或者“下降”,只有平滑的“上升”或“平坦”。在核函数的背景下,这意味着无论我们选择什么样本点来计算它们的相似性,我们总会得到一个 合理的(非负的)值

实际例子:

假设我们有一个数据集包含两个点: x 1 x_1 x1 x 2 x_2 x2 。我们定义了一个简单的线性核函数 k ( x , z ) = x ⋅ z k(x, z) = x \cdot z k(x,z)=xz ,即两个数的乘积。我们可以创建一个核矩阵 K K K 来表示这个数据集中所有点对的相似性:

K = [ x 1 ⋅ x 1 x 1 ⋅ x 2 x 2 ⋅ x 1 x 2 ⋅ x 2 ] K = \begin{bmatrix} x_1 \cdot x_1 & x_1 \cdot x_2 \\ x_2 \cdot x_1 & x_2 \cdot x_2 \end{bmatrix} K=[x1x1x2x1x1x2x2x2]

因为我们用点自身乘以自身,对角线上的值( x 1 ⋅ x 1 x_1 \cdot x_1 x1x1 x 2 ⋅ x 2 x_2 \cdot x_2 x2x2)都是正的。如果 x 1 x_1 x1 x 2 x_2 x2 是正数,那么其他项也是正的,因此这个核矩阵是半正定的。这意味着,不管我们用这个矩阵来“测量”哪两个点的相似性,结果都不会是负的。

如果我们试图用这个核函数和矩阵来训练一个SVM,我们可以确定在优化过程中,不会出现任何数学上的意外。我们能够找到一个全局最优解,它将允许我们预测一个新点是否与数据集中的其他点相似。

通过确保我们的核矩阵是半正定的,我们就可以安心地使用它在高维空间中表示我们的数据,而不用担心在优化时会遇到数学上的问题。

问题五:为什么函数组合也能最终成立?

在这里插入图片描述
核函数的组合定理表明,我们可以通过已知的核函数来构建新的核函数。在SVM中,核函数用于隐式地映射数据到高维空间,从而允许在原始特征空间中找到非线性决策界面。如果 k 1 k_1 k1 k 2 k_2 k2 是两个有效的核函数(即分别对应于两个高维特征空间的内积),那么根据这些组合定理,我们可以创造出新的有效核函数,这些新的核函数仍然保持核函数所必须的数学属性。

1. 核函数的线性组合

如果 k 1 k_1 k1 k 2 k_2 k2 是核函数,那么对于任意的正系数 γ 1 \gamma_1 γ1 γ 2 \gamma_2 γ2,它们的线性组合 γ 1 k 1 + γ 2 k 2 \gamma_1 k_1 + \gamma_2 k_2 γ1k1+γ2k2 也是一个核函数。

  • 原因:因为每个 k i k_i ki 分别映射到一个RKHS,其线性组合仍然映射到一个RKHS。在这个RKHS中,点积保留了所有原始点积的性质,并且线性组合也是半正定的,这是核函数必须满足的条件。

2. 核函数的直积

如果 k 1 k_1 k1 k 2 k_2 k2 是核函数,它们的直积 k 1 ⊗ k 2 k_1 \otimes k_2 k1k2,定义为 k 1 ( x , z ) k 2 ( x , z ) k_1(x, z) k_2(x, z) k1(x,z)k2(x,z),也是一个核函数。

  • 原因:直积实际上是在对应的RKHS中进行 点积操作结果,它仍然满足半正定性。这意味着,如果我们在各自的空间中对两对向量取内积,然后将结果相乘,得到的仍然是所有向量的一个有效内积。

3. 核函数与函数的乘积

如果 k 1 k_1 k1 是核函数, g ( x ) g(x) g(x) 是一个函数,并且 g ( x ) g(x) g(x) 在所考虑的定义域上是非负的,则 g ( x ) k 1 ( x , z ) g ( z ) g(x) k_1(x, z) g(z) g(x)k1(x,z)g(z) 也是一个核函数。

  • 原因:这里 g ( x ) g(x) g(x) 作为一个权重函数,它乘以 k 1 k_1 k1 不会破坏 k 1 k_1 k1 的半正定性质,因为 g ( x ) g(x) g(x) 是非负的。所以 g ( x ) g(x) g(x) 的作用可以被看作是在 k 1 k_1 k1 所对应的RKHS空间中对特征向量进行缩放

总结

核函数组合的正确性基于核函数必须满足的数学属性:它们必须对应于RKHS中的内积,并且核矩阵必须是半正定的。这些组合方法允许我们在保持这些属性的同时创造出新的核函数,给我们在特征空间的构造上提供了巨大的灵活性。这些组合核函数可以被用于解决各种非线性问题,同时确保我们的SVM或其他基于核的算法能够正确运作。

核函数讨论

常用核函数

名称表达式参数
线性核 κ ( x i , x j ) = x i T x j \kappa(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^T \mathbf{x}_j κ(xi,xj)=xiTxj
多项式核 κ ( x i , x j ) = ( x i T x j ) d \kappa(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i^T \mathbf{x}_j)^d κ(xi,xj)=(xiTxj)d d ≥ 1 d \geq 1 d1为多项式的次数, d = 1 d = 1 d=1时退化为线性核。
高斯核(RBF核) κ ( x i , x j ) = exp ⁡ ( − ∣ x i − x j ∣ 2 2 σ 2 ) \kappa(x_i, x_j) = \exp\left( -\frac{|x_i - x_j|^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(x_i, x_j) = \exp\left( -\frac{|x_i - x_j|}{\sigma} \right) κ(xi,xj)=exp(σxixj) σ > 0 \sigma > 0 σ>0
Sigmoid核 κ ( x i , x j ) = tanh ⁡ ( β x i T x j + θ ) \kappa(\mathbf{x}_i, \mathbf{x}_j) = \tanh(\beta \mathbf{x}_i^T \mathbf{x}_j + \theta) κ(xi,xj)=tanh(βxiTxj+θ)tanh为双曲正切函数, β > 0 , θ < 0 \beta > 0, \theta < 0 β>0,θ<0

使用核函数经验

  • 文本数据——线性核
  • 情况不明——高斯核

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

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

相关文章

Kafka 3.x.x 入门到精通(03)——Kafka基础生产消息

Kafka 3.x.x 入门到精通&#xff08;03&#xff09;——对标尚硅谷Kafka教程 2. Kafka基础2.1 集群部署2.2 集群启动2.3 创建主题2.4 生产消息2.4.1 生产消息的基本步骤2.4.2 生产消息的基本代码2.4.3 发送消息2.4.3.1 拦截器2.4.3.1.1 增加拦截器类2.4.3.1.2 配置拦截器 2.4.3…

c#数据库:1.c#创建并连接数据库

安装软件:SQL Server Management Studio Management Studio Visual Studio 2022 启动服务: 打开SQL Server Management Studio Management Studio ,连接到服务器(GUANZU是我的计算机名) 新建数据库,随便起个名字叫aq: c#代码: using System; using System.Collections.Gener…

UG NX二次开发(C++)-获取模型中所有的拉伸(Extrude)特征

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG 12中创建几个拉伸特征3、UFun中获取对象类型4、通过NXOpen过渡5.测试结果1、前言 在采用UG NX二次开发时,有时需要在模型中获取特定的对象,比如拉伸特征、关联特征等等。但是通过…

大数据分析与应用实验(黑龙江大学)

实验一 Hadoop伪分布式实验环境搭建与WordCount程序 一、实验目的 1、学习搭建Hadoop伪分布式实验环境 2、在伪分布式实验环境下运行WordCount程序 二、实验内容 1、搭建Hadoop伪分布式实验环境&#xff0c;并安装Eclipse。 2、在Eclipse环境下&#xff0c;编写并执行Wor…

面试题:分布式消息中间件 MQ

MQ官网文档&#xff1a; RabbitMQ&#xff1a;https://www.rabbitmq.com/docs RocketMQ&#xff1a;https://rocketmq.apache.org/zh/docs/ Kafka&#xff1a;https://kafka.apache.org/documentation/ DDMQ&#xff1a;https://base.xiaojukeji.com/docs/ddmq 面试题&#xff…

【LeetCode周赛】第 395 场周赛

目录 3131. 找出与数组相加的整数 I 简单3132. 找出与数组相加的整数 II 中等3133. 数组最后一个元素的最小值 中等3134. 找出唯一性数组的中位数 困难 3131. 找出与数组相加的整数 I 简单 3131. 找出与数组相加的整数 I 分析&#xff1a; 将两个数组中最小的两个值相减即可。…

你的动漫AI女友 Anime gf :自定义创建各种独特个性、语言风格的虚拟角色

一个本地且开源的 CharacterAI 替代工具 Anime gf&#xff0c;提供了一个用户友好的界面&#xff0c;允许用户在桌面上与虚拟角色互动。你可以自定义创建各种角色&#xff0c;让每个虚拟角色都有自己的独特个性和语言风格&#xff0c;可以接入OpenAI、Anthropic、Mistral和 Tog…

Faststone Capture:一触即发的效率革命【AI写作】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

XY_RE复现(二)

一&#xff0c;何须相思煮余年 0x55 0x8b 0xec 0x81 0xec 0xa8 0x0 0x0 0x0 0xa1 0x0 0x40 0x41 0x0 0x33 0xc5 0x89 0x45 0xfc 0x68 0x9c 0x0 0x0 0x0 0x6a 0x0 0x8d 0x85 0x60 0xff 0xff 0xff 0x50 0xe8 0x7a 0xc 0x0 0x0 0x83 0xc4…

【中级软件设计师】上午题12-软件工程(3):项目活动图、软件风险、软件评审、软件项目估算

【中级软件设计师】上午题12-软件工程&#xff08;3&#xff09; 1 软件项目估算1.1 COCOMO估算模型1.2 COCOMOⅡ模型 2 进度管理2.1 gantt甘特图2.2 pert图2.3 项目活动图2.3.1 画项目图 3 软件配置管理4 软件风险4.1 风险管理4.2 风险识别4.3 风险预测4.4 风险评估4.5 风险控…

大模型(LLM)调用API论文研究合集

1、API-BLEND: A Comprehensive Corpora for Training and Benchmarking API LLMs 中文标题&#xff1a;API-BLEND: 一个用于训练和评测 API 语言模型的全面语料库 简介&#xff1a;随着大型语言模型(LLM)的发展,它们需要能够有效地利用各种工具和应用程序接口(API)来完成复杂…

GNU Radio之OFDM Channel Estimation底层C++实现

文章目录 前言一、 OFDM Channel Estimation 模块简介二、C 具体实现1、初始化和配置参数2、forecast 函数3、计算载波偏移量4、提取信道响应5、核心的数据处理任务 前言 OFDM Channel Estimation 模块的功能是根据前导码&#xff08;同步字&#xff09;估计 OFDM 的信道和粗略…

Java:SpringBoot如何优化启动速度

一、yml中设置懒加载 spring:main:lazy-initialization: true 二、SpringBoot启动类中添加注解 Indexed &#xff08;Spring5才有该注解&#xff09; Indexed EnableAsync RestController SpringBootApplication(exclude {WxMaAutoConfiguration.class}) EnableTransactionM…

web服务的部署及高级优化

搭建web服务器 1.1、配置主机IP以及软件仓库搭建 [rootserver129 ~]# vmset.sh 100 //主机IP配置为172.25.254.100 1.2、查看搭建web服务器所需的软件包 [rootserver100 ~]# dnf search nginx 名称 精准匹配&#xff1a;nginx nginx.x86_64 : A high performance web serve…

31.基础乐理-首调与固定调

首调与固定调的概念&#xff1a; 首调 与 固定调 这两个词都是针对 唱名 来说的&#xff0c;针对唱名1234567 来说的&#xff0c;和别的没什么关系&#xff0c;这两个概念是唱名的两种不同表达方式 首调&#xff1a;虽然各个大调实际使用的按键、使用的音名都是不一样的&#x…

【4103】基于小程序实现的老年人健康管理平台

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

学习C语言的指针

有一阵没更新了&#xff0c;因为最近比较繁忙&#xff0c;所以更新比较慢&#xff0c;还在慢慢学习 话不多说&#xff0c;开始今天的内容&#xff0c;聊一聊C语言指针。 很多小伙伴可能会被指针这个名字吓到&#xff0c;觉得很难&#xff0c;实际上确实有点难&#xff0c;但是…

算力云平台

先预热下 目标&#xff1a; 算力互联&#xff0c;随需随取&#xff1b;让算力化零为整&#xff0c;化整为零 场景&#xff1a; 1. 个人pc改造&#xff0c;个人算力出租&#xff0c;类似之前的jiluyou模式 2. 服务器中间商准系统集成&#xff0c;目前了解到挖矿不好弄了以后…

MVC架构简述

MVC简介 MVC 是一种非常常见且常用的分层架构&#xff0c;主要包括&#xff1b;M - mode 对象层&#xff0c;封装到 domain 里。V - view 展示层&#xff0c;但因为目前都是前后端分离的项目&#xff0c;几乎不会在后端项目里写 JSP 文件了。C - Controller 控制层&#xff0c…

qt安装历史版本5.15.2

0 背景 因为需要&#xff0c;所以需要安装qt5的最后一个版本qt5.15.2&#xff0c;但是下载qt安装器后&#xff0c;发现没有想要的版本。后面才发现&#xff0c;可以筛选历史版本进行安装。 1 解决 1&#xff0c;打开qt安装程序&#xff0c;勾选Archive后&#xff0c;点击筛选…