机器学习:深入解析SVM的核心概念【三、核函数】

核函数

    • ==**问题一:为什么说是有限维就一定存在高维空间可分呢?**==
      • 原始空间与特征空间
      • 为什么映射到高维空间可以实现可分
      • 核函数的作用
    • ==**问题二:最终怎么得到函数**==
      • 从对偶问题到决策函数的步骤:
      • 结论
    • ==**问题三:为什么说特征空间的好坏对于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

使用核函数经验

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Proteus】LED呼吸灯 直流电机调速

1.LED呼吸灯 #include <REGX51.H> sbit LEDP2^0; void delay(unsigned int t) {while(t--); } void main() {unsigned char time,i;while(1){for(time0;time<100;time){for(i0;i<20;i){LED0;delay(time);LED1;delay(100-time);}}for(time100;time>0;time--){fo…

003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁

文章目录 Redis分布式锁原理1.使用set的命令时&#xff0c;同时设置过期时间2.使用lua脚本&#xff0c;将加锁的命令放在lua脚本中原子性的执行 Jedis分布式锁实现pom.xmlRedisCommandLock.javaRedisCommandLockTest.java 锁过期问题1乐观锁方式&#xff0c;增加版本号(增加版本…

GPT-1

GPT 系列是 OpenAI 的一系列预训练模型&#xff0c;GPT 的全称是 Generative Pre-Trained Transformer&#xff0c;顾名思义&#xff0c;GPT 的目标是通过 Transformer&#xff0c;使用预训练技术得到通用的语言模型。目前已经公布论文的有 GPT-1、GPT-2、GPT-3。 最近非常火的…

腾讯云ubuntu新建用户后,命令行只显示$

这是因为&#xff0c;新建用户命令行解释器默认是sh&#xff0c;需要手动切换为bash&#xff0c;bash可以认为是sh的加强版本。 所以我们只需要将&#xff0c;shell切换为bash就好了。 切换到root 修改配置文件 vim/etc/bash 将sh修改为bash

AcWing 3194:最大的矩形 ← 笛卡尔树

【题目来源】https://www.acwing.com/problem/content/3197/【题目描述】 在横轴上放了 n 个相邻的矩形&#xff0c;每个矩形的宽度是 1&#xff0c;而第 i&#xff08;1≤i≤n&#xff09;个矩形的高度是 hi。 这 n 个矩形构成了一个直方图。 例如&#xff0c;下图中六个矩形的…

类和对象【四】运算符重载

文章目录 运算符重载的概念运算符重载&#xff08;函数&#xff09;返回值类型&#xff1a;任意类型函数名&#xff1a;operator已有操作符 运算符重载&#xff08;函数&#xff09;的特点和注意点3个比较特殊的运算符重载赋值运算符&#xff08;&#xff09;重载返回值类型和返…

Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务

前言&#xff1a; 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序&#xff0c;以及配置Nginx反向代理服务器。因为公司的项目一直都是托管在Window服务器IIS上&#xff0c;对于Linux服务器上托管.NET Core项目十分好奇。因为…

简单学生信息管理系统

简单&#xff0c;单表&#xff1b; https://download.csdn.net/download/bcbobo21cn/89251742

【QT学习】12.UDP协议,广播,组播

一。Udp详细解释 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的、不可靠的数据传输服务。与TCP相比&#xff0c;UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能&#xff0c;但由于其简单性和低开销&#x…

Java | Leetcode Java题解之第64题最小路径和

题目&#xff1a; 题解&#xff1a; class Solution {public int minPathSum(int[][] grid) {if (grid null || grid.length 0 || grid[0].length 0) {return 0;}int rows grid.length, columns grid[0].length;int[][] dp new int[rows][columns];dp[0][0] grid[0][0]…

《罪与罚》读后感

陀思妥耶夫斯基和列夫托尔斯泰是公认的俄国文学黄金时代的两座高峰&#xff0c;分别代表着俄国文学的“深度”和“广度”。列夫托尔斯泰的鸿篇巨著《复活》《安娜卡列尼娜》等等都已经拜读过&#xff0c;但陀思妥耶夫斯基的作品却一本也没有看过&#xff0c;实在是有点遗憾。这…

LabVIEW换智能仿真三相电能表研制

LabVIEW换智能仿真三相电能表研制 在当前电力工业飞速发展的背景下&#xff0c;确保电能计量的准确性与公正性变得尤为重要。本文提出了一种基于LabVIEW和单片机技术&#xff0c;具有灵活状态切换功能的智能仿真三相电能表&#xff0c;旨在通过技术创新提高电能计量人员的培训…

Flutter笔记:谈Material状态属性-为什么FlatButton等旧版按钮就废弃了

Flutter笔记 谈Material状态属性-为什么FlatButton等旧版按钮就废弃了 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this artic…

MySQL-逻辑架构

1、MySQL服务器处理客户端请求 MySQL是典型的C/S架构&#xff0c;服务端程序使用 mysqld。实现效果&#xff1a;客户端进程像服务端发送&#xff08;SQL语句&#xff09;&#xff0c;服务器进程处理后再像客户端进程发送 处理结果。 2、connectors 指不同语言中与SQL的交互…

Vue3+ts(day05:ref、props、生命周期、hook)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

OpenMLDB v0.9.0 发布:SQL 能力大升级覆盖特征上线全流程

发布日期 25 April 2024 Release note https://github.com/4paradigm/OpenMLDB/releases/tag/v0.9.0 亮点特性 增加最新版 SQLAlchemy 2 的支持&#xff0c;无缝集成 Pandas 和 Numpy 等常用 Python 框架。支持更多数据后端&#xff0c;融合 TiDB 的分布式文件存储能力以及…

【Redis】Redis安装、配置、卸载使用可视化工具连接Redis

文章目录 1.前置条件2.安装Redis2.1下载Redis安装包并解压2.2在redis目录下执行make命令2.3修改Redis配置文件2.4启动Redis服务2.5连接redis服务 3.Redis卸载4.使用可视化工具连接Redis 1.前置条件 Linux操作系统需要要是64位.如果不清楚自己Linux上是多少位的,可以使用以下命…

详解 Go 程序的启动流程,你知道 g0,m0 是什么吗?

自古应用程序均从 Hello World 开始&#xff0c;你我所写的 Go 语言亦然&#xff1a; import "fmt"func main() {fmt.Println("hello world.") }这段程序的输出结果为 hello world.&#xff0c;就是这么的简单又直接。但这时候又不禁思考了起来&#xff0…

vue3 ——笔记 (表单输入,监听器)

表单输入 在Vue 3中&#xff0c;v-model指令的用法稍有不同于Vue 2。在Vue 3中&#xff0c;v-model指令实际上是一个语法糖&#xff0c;它会自动将value属性和input事件绑定到组件或元素上&#xff0c;以实现双向数据绑定。 在自定义组件中使用v-model时&#xff0c;需要在组…

SQL注入漏洞--报错/union/布尔盲注/时间盲注

之前介绍了数据库的基本操作&#xff0c;今天这篇文章就来实操SQL注入。 阅读本文前可以先看一下基本操作&#xff0c;有助于更好理解本文。。。 https://blog.csdn.net/weixin_60885144/article/details/138356410?spm1001.2014.3001.5502 what SQL---结构化查询语言---S…