支持向量机(SVM)

本文介绍了支持向量机(SVM)的基本概念,包括寻找最大间隔超平面的目标,支持向量的作用,以及SVM的优化目标。讨论了分类误差、边际误差和超参数C的影响,并解释了如何通过核函数解决非线性问题。最后,简要介绍了在sklearn库中使用SVM的相关参数设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是支持向量机

通俗来讲,SVM是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化。
如:
在这里插入图片描述
SVM要做的就是找出划分蓝点和红点的一条线,且使这条线尽可能远离这些点(即就是让两条虚线之间的距离Margin最大)。

中间那条关键的线我们叫它“超平面”。我们现在处理的是二维平面数据,此时超平面为一条直线。当我们处理的是三维空间数据时,超平面就是一个平面。而当我们处理的是100维数据时,超平面就是一个99维的对象。
这个超平面被描述为:WTx + b = 0

支持向量(Support Vector):
在距离超平面很远的区域的样本点对于分割线的位置都没有影响的,分割线是由正好落在margin边界上的点决定的。这些关键点支撑起了一个分割超平面,这些“支撑”的点(向量)便叫做支持向量Support Vector。

2. SVM的优化目标

在这里插入图片描述
目标函数中的符号解释:

  • 为了简化WTx + b,我们将给W增加一维W0=1变为θ\thetaθ,给x也增加一维x0=b,
    那么WTx + b = θT\theta^TθTx (注:m表示m个样本,n表示x的维数)
  • cost1函数图像为左边的图,也就是当x>=1时cost1(x)=0,当x<1时cost1(x) = -x+1;
    cost0函数图像为右边的图,也就是当x<=-1时cost0(x)=0,当x>-1时cost0(x) = x+1。

如何理解上述的损失函数:
目标函数可以理解为是由三部分组成的:分类误差,边际误差,超参数C

分类误差

在这里插入图片描述
如上述,分类正确的时候是如果y=1,θT\theta^TθTx>=1;如果y=0,θT\theta^TθTx<=-1,此时误差都为0。
下图中分类正确的情况我们希望蓝点都处于Wx+b=1的上面,红点都处于Wx+b=-1的下面。
在这里插入图片描述

分类错误的时候

  • 如果y=1,θT\theta^TθTx<1,那么分类造成的误差就是cost1(θTxi\theta^Tx^iθTxi) = −θTxi+1-\theta^Tx^i+1θTxi+1。解释:
    以Wx+b=1为基准,下面的蓝点为分类错误的点,以Wx+b=1向下画平行线,假设误差点所处线为Wx+b=0.3,那么误差值就是1−0.3=0.71-0.3=0.710.3=0.7
    因为Wx+b=0.3故 −θTxi=−0.3-\theta^Tx^i=-0.3θTxi=0.3,那么 −θTxi+1=0.7-\theta^Tx^i+1=0.7θTxi+1=0.7

  • 如果y=0,θT\theta^TθTx>-1,那么分类造成的误差就是cost0(θTxi\theta^Tx^iθTxi) = θTxi+1\theta^Tx^i+1θTxi+1。 解释:
    以Wx+b=-1为基准,上面的红点为分类错误的点,以Wx+b=-1向上画平行线,假设误差点所处线为Wx+b=-0.3,那么误差值就是−0.3−(−1)=0.7-0.3-(-1)=0.70.3(1)=0.7
    因为Wx+b=-0.3故θTxi=−0.3\theta^Tx^i=-0.3θTxi=0.3,那么 θTxi+1=0.7\theta^Tx^i+1=0.7θTxi+1=0.7

边际误差

Margin就是Wx+b=1与Wx+b=-1之间的距离,也就是Wx+b=1与Wx+b=0之间的距离的两倍。
在这里插入图片描述
将两条线平移到上图位置,此时,W向量就垂直这两条线。
原因:以x为二维为例,则W也是二维,W向量即为(w1,w2)。在Wx=0这条线上随便找两个点a(x1,x2),b(x3,x4),ab向量就是(x3−x1,x4−x2)(x3-x1,x4-x2)(x3x1,x4x2)那么w1∗x1+w2∗x2=0w1*x1+w2*x2=0w1x1+w2x2=0w1∗x3+w2∗x4=0w1*x3+w2*x4=0w1x3+w2x4=0
ab向量与W向量的点积就为:
w1(x3−x1)+w2(x4−x2)=w1∗x3+w2∗x4−(w1∗x1+w2∗x2)=0w1(x3-x1)+w2(x4-x2) = w1*x3+w2*x4-(w1*x1+w2*x2)=0w1(x3x1)+w2(x4x2)=w1x3+w2x4(w1x1+w2x2)=0
所以W向量就垂直Wx=0。

设W向量与Wx=1的交点坐标为(p,q),那么

  • 因为交点在Wx=1上,所以w1​∗p+w2∗​q=1w1​*p+w2*​q=1w1p+w2q=1
  • 因为交点也在W向量上,所以(p,q)=k(w1,w2)(p,q)=k(w1,w2)(p,q)=k(w1,w2)

将上述两个方程联立可以解得k=1w12+w22k=\frac1{w1^2+w2^2}k=w12+w221

综上Margin就为kWkWkW 这个向量的长度的二倍,也就是2∣W∣\frac2{|W|}W2 (|W|表示W向量的长度即w12+w22\sqrt{w1^2+w2^2}w12+w22)

我们要最大化距离就是最大化2∣W∣\frac2{|W|}W2,也就是最小化|W|,等价于最小化|W|2

这样就是目标函数的Σj=1nθj2\Sigma_{j=1}^n\theta_j^2Σj=1nθj2,加上12\frac1221的系数就是求导方便

这不就是L2正则化化吗,没错,所以SVM是自带正则化的

超参数C

C参数用来平衡错分与间隔大小。C越大,模型越注重分类误差,反之,模型越注重边际误差。
所以当模型欠拟合时需要增大C,模型过拟合时需要减小C。

3. 核函数

当遇到非线性的问题时该怎么办呢?这时就需要将原始的特征向量映射到更高维的空间H,从而转化为线性可分问题,此时作为决策边界的超平面就为:WTϕ(X)+b=0W^T\phi(X)+b=0WTϕ(X)+b=0ϕ\phiϕ为X到H映射函数。

因为映射函数是复杂的非线性函数,因此其内积的计算是困难的,这时就引入了核函数,即定义映射函数的内积为核函数(kernel function),K(X,Z)=ϕ(X)⋅ϕ(Z)K(X,Z)=\phi(X) \cdot \phi(Z)K(X,Z)=ϕ(X)ϕ(Z)

常用的核函数:
多项式核:K(X,Z)=(XTZ)nK(X,Z)=(X^TZ)^nK(X,Z)=(XTZ)n

径向基函数核(RBF核)又被称为高斯核:K(X,Z)=exp(−∣∣X−Z∣∣22σ2)K(X,Z)=exp(-\frac{||X-Z||^2}{2\sigma^2})K(X,Z)=exp(2σ2XZ2)

4. sklearn中的SVM

from sklearn.svm import SVC

model = SVC()
model.fit(x_values, y_values)

SVC()的常见参数:

  • C:C 参数。
  • kernel:内核。最常见的内核为 ‘linear’、‘poly’ 和 ‘rbf’。
  • degree:如果内核是多项式,则此参数为内核中最大单项式的次数。
  • gamma:如果内核是径向基函数,则此参数为γ\gammaγ参数。γ\gammaγ等效于上述高斯核中的12σ2\frac{1}{2\sigma^2}2σ21γ\gammaγ太大模型会发生过拟合现象
    在这里插入图片描述
#定义一个次数为4、C参数为0.1的多项式内核模型
model = SVC(kernel='poly', degree=4, C=0.1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值