第9章 支持向量机(SVM)

支持向量机(SVM)——原理篇 - 知乎 (zhihu.com)

1. 最优化问题

image-20211114103119512

  • 无约束条件:变量求导,令其为0,求得极值
  • 等式约束:拉格朗日乘子法
  • 等式约束和不等式约束:KKT条件

1.1 拉格朗日乘子法

等式约束时,需构建拉格朗日函数,将有约束的问题转为无约束的优化问题

image-20211114103315108

构建拉格朗日函数引入拉格朗日乘子,将原始优化问题表示为:

image-20211114103420934

拉格朗日函数对 x x x求偏导的结果为0时,即为最优解

1.2 KKT条件

既有等式约束(拉格朗日乘子法),又有不等式约束时,利用KKT条件将有约束的问题转为无约束的优化问题

image-20211114103623763

构建拉格朗日函数,同时引入拉格朗日乘子KKT乘子【注:KKT乘子是大于0的】,将原始优化问题表示为:

image-20211114103835235

KKT条件:

image-20211114104203015

【注:f(x)和g(x)都是凸函数】

1.3 对偶问题

原优化问题:image-20211114104423307

构建的拉格朗日函数:image-20211114104433598

对上面构建的拉格朗日函数先最大化再最小化:image-20211114104543640

满足KKT条件的情况下,该式和原优化问题是等价的

解释过程:

将上式分为两部分:

  • 可行解区域内:原优化问题的约束条件都满足。因 h i ( x ) = 0 {{\rm{h}}_i}\left( x \right) = 0 hi(x)=0,所以不管 α \alpha α如何变化,必然有 α h i ( x ) = 0 \alpha {{\rm{h}}_i}\left( x \right) = 0 αhi(x)=0 g i ( x ) < 0 {{\rm{g}}_i}\left( x \right) < 0 gi(x)<0且限定了 β j > 0 {\beta _j} > 0 βj>0,则 β j g i ( x ) {\beta _j}{{\rm{g}}_i}\left( x \right) βjgi(x)最大值为0

    image-20211114105038916

  • 可行解区域外:原优化问题的约束条件未满足。若 h i ( x ) ≠ 0 {{\rm{h}}_i}\left( x \right) \ne 0 hi(x)=0,则最大化后为 ∞ \infty ;若 g i ( x ) > 0 {{\rm{g}}_i}\left( x \right) > 0 gi(x)>0,则最大化也为 ∞ \infty

image-20211114105215264

综上所述,f(x)在可行解区域内最小化,等价于image-20211114105351448的最小化,为原优化问题的最优解

定义:image-20211114105602311

则最小化原始问题和原问题有相同的解:

image-20211114105815913

定义对偶优化问题如下:

image-20211114105905522

【注:image-20211114110114786

证明过程:

定义:

image-20211114110307719为原始最小化问题的值

image-20211114110419277为对偶问题最大化的值

两式满足定理

image-20211114110507352

只有在KKT条件时,才有:image-20211114110752466,此时,才可通过求解对偶问题来求解原始问题

image-20211114110830424

2. SVM原理

基本思想:找到一个超平面,使得它能够尽可能多地将两类数据点正确分开,同时使分开的两类数据点距离分类面最远

image-20211114140143407

2.1 线性可分支持向量分类机

构造的超平面是硬间隔超平面

SVM的数学模型:image-20211115175704931

支持向量机的优化问题可以写为:

为了最大化间隔,仅需最大化 ∥ ω ∥ − 1 {\left\| \omega \right\|^{{\rm{ - }}1}} ω1,这等价于最小化 ∥ ω ∥ 2 {\left\| \omega \right\|^2} ω2

image-20211114141246424

可以将约束条件写为 :

image-20211114141305487

可以将优化问题拉格朗日化

image-20211114141510562

欲构造对偶问题,先对拉格朗日化的原问题求最小值来计算各变量( w w w b b b)的值,利用各变量求一阶偏导数置0,可得:

image-20211114142857716

image-20211114143411582

各变量( w w w b b b)代回至拉格朗日化的原问题,可得:

image-20211115180832668

注: ∥ ω ∥ 2 = ω T ω {\left\| \omega \right\|^2}{\rm{ = }}{\omega ^T}\omega ω2=ωTω

注: x ( i ) {x^{(i)}} x(i) x ( j ) {x^{(j)}} x(j)都是一维向量,一维向量是数,即 ( x ( i ) ) T x ( j ) = ( x ( j ) ) T x ( i ) = x ( i ) x ( j ) = ⟨ x ( i ) , x ( j ) ⟩ {\left( {{x^{(i)}}} \right)^T}{x^{(j)}} = {\left( {{x^{(j)}}} \right)^T}{x^{(i)}} = { {x^{(i)}}}{x^{(j)}} =\langle {x^{(i)}},{x^{(j)}}\rangle (x(i))Tx(j)=(x(j))Tx(i)=x(i)x(j)=x(i),x(j)

现在可以构造对偶问题,对其进行求最大值

image-20211114143935485

KKT条件可得:

image-20211114150930597image-20211114151043725

y ( i ) ( w T x ( i ) + b ) − 1 = 0 {{\rm{y}}^{(i)}}({w^T}{x^{(i)}}{\rm{ + b}}) - 1 = 0 y(i)(wTx(i)+b)1=0

两边同时乘以 y ( i ) {{\rm{y}}^{(i)}} y(i),得: ( y ( i ) ) 2 ( w T x ( i ) + b ) − y ( i ) = 0 {({{\rm{y}}^{(i)}})^2}({w^T}{x^{(i)}}{\rm{ + b}}) - {{\rm{y}}^{({\rm{i}})}} = 0 (y(i))2(wTx(i)+b)y(i)=0

( y ( i ) ) 2 {({{\rm{y}}^{(i)}})^2} (y(i))2=1】,得: ( w T x ( i ) + b ) − y ( i ) = 0 ({w^T}{x^{(i)}}{\rm{ + b}}) - {{\rm{y}}^{(i)}} = 0 (wTx(i)+b)y(i)=0

解出 b b b的值为: b = y ( i ) − w T x ( i ) = y ( i ) − ∑ j = 1 n α j y ( j ) x ( j ) x ( i ) b = {{\rm{y}}^{(i)}} - {w^T}{x^{(i)}}={y^{(i)}} - \sum\limits_{{\rm{j}} = 1}^n {{\alpha _j}{y^{(j)}}{x^{(j)}}} {x^{(i)}} b=y(i)wTx(i)=y(i)j=1nαjy(j)x(j)x(i)

SVM的决策函数如下,嵌套符号函数sgn可得到分类函数【值的符号为类别】:

image-20211114144445067

2.2 线性支持向量分类机

引入松弛变量,构造的超平面是软间隔超平面

引入松弛变量的数学模型:image-20211114154622779引入松弛变量的优化问题:

image-20211114154753470

约束条件:

image-20211114154814304

拉格朗日化:

image-20211114154956770

对拉格朗日化的原问题求最小值来计算各变量,利用各变量求一阶偏导数置0,可得:

image-20211114155034840

将各变量代回至拉格朗日化的原问题,可得:

image-20211114155538994

对偶问题求最大值

image-20211114155713755

KKT条件:满足以下条件的 α i \alpha_i αi的集合就是优化问题的解:

image-20211114155912302

2.3 C-支持向量分类机

将输入空间映射到高维特征空间,核函数【作用:避免在高维特征空间进行复杂的运算】的软间隔超平面

核函数:

  • 核函数:是映射关系img 的内积/数量积/点积
  • 核函数和映射没有关系
  • 核函数只是用来计算映射到高维空间之后的内积/数量积/点积的一种简便方法

image-20211114161215822

直接扩展到高维的问题:

  • 增大了计算量:计算量与数据量和每一条数据的维度正相关
  • 没办法增加到无限维

采用核函数的对偶问题求最大值:

image-20211114190718771

约束条件:

image-20211114190753918

核函数的充要条件:

Mercer定理:任何半正定对称函数都可作为核函数

image-20211114191108866

image-20211114191125654

常见的核函数:

  • 线性核(Linear Kernel)

    image-20211114201329371

  • 多项式核(Polynomial Kernel)

    image-20211114191427394

  • 高斯核/径向基核(RBF Kernel)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PntjmGCr-1639995677376)(https://cdn.jsdelivr.net/gh/rjq123/imageRepository/image/202111302253138.png)]

  • 余弦相似性核(Cosine Similarity Kernel)

    image-20211114191625199

  • 卡方核(Chi-squared Kernel)

    image-20211114191837145

3. 使用SVM的步骤

  • 原始数据预处理:提取已分类和待分类的数据,并转化为SVM算法的数据格式
  • 数据标准化:防止样本中不同特征数值大小相差较大影响分类器性能
  • 核函数的选取:不知使用什么核函数时,优先考虑使用RBF【最常用】
  • 利用交叉验证网格搜索寻找最优参数:交叉验证防止过拟合,网格搜索在指定范围内寻找最优参数
  • 使用最优参数来训练模型
  • 模型验证/测试:计算已知样本点的误判率
  • 预测待分类样本的类别

4. Matlab中SVM的命令

  • 训练SVM分类器的函数fitcvsm
    • 调用格式:
      • 线性SVM:s=fitcsvm(train_data,train_labels)或s=fitcsvm(train_data,train_labels,‘KernelFunction’,‘linear’)
      • 非线性SVM:s=fitcvsm(train_data,train_labels,‘Standardize’,true,‘KernelFunction’,‘rbf’,‘KernelScale’,‘auto’)
        • 使用高斯核/径向基核(rbf)训练 SVM 分类器,让软件计算核函数的缩放值,对预测变量进行标准化
    • s是经过训练的ClassificationSVM分类器
    • train_data为已知的训练样本,train_labels为已知样本点的类别标号
    • 默认核函数是线性核,不知使用什么核函数时,优先考虑使用RBF【最常用】
  • 使用SVM分类器分类的函数predict
    • 调用格式:check=predict(s,train_data)或solution=predict(s,predict_data)

5. 总结

  • SVM专注于找最优分界线,用于减小过拟合
  • 核函数的应用使得SVM可以高效的用于非线性可分的情况

优势

  • 理论非常完美
  • 支持不同的核函数,用于调参,进而寻找最优参数

缺点:当数据量特别大时,训练比较慢

6. SVM实例—螨虫的分类判别

%% I.清空环境
clc
clear
close all

%% II.导入数据
% a=load('mite.txt');
a=[1.24 1.27
1.36 1.74
1.38 1.64
1.38 1.82
1.38 1.90
1.40 1.70
1.48 1.82
1.54 1.82
1.56 2.08 
1.14 1.82 
1.18 1.96 
1.20 1.86
1.26 2.00
1.28 2.00
1.30 1.96
1.24 1.80
1.28 1.84
1.40 2.04];

%% III.数据预处理
a=a';
% 提取数据
training=a(:,[1:15]);   % 已分类数据
predicting=a(:,[16:end]);  % 待分类数据
% 数据标准化mapstd
% mapstd(training):将训练数据的每一行映射为0均值1方差的数据
[trains,ps]=mapstd(training);  % 已分类数据的标准化
% mapstd('apply',predicting,ps):对验证/测试数据进行预处理,利用训练数据中均值和方差进行处理
predicts=mapstd('apply',predicting,ps);  % 待分类数据的标准化
trains=trains';
predicts=predicts'; 
% 已知样本点的类别标号
group=[ones(9,1);-1*ones(6,1)];

%% IV.训练SVM分类器
% 非线性SVM:使用高斯核/径向基核(rbf)训练 SVM 分类器,让软件计算核函数的缩放值,对预测变量进行标准化
% s=fitcsvm(trains,group,'Standardize',true,'KernelFunction','rbf','KernelScale','auto')
% sv_index=find(s.IsSupportVector)
% alpha=s.Alpha
% b=s.Bias
% 线性SVM:s=fitcsvm(trains,group) 或 s=fitcsvm(trains,group,'KernelFunction','linear')
s=fitcsvm(trains,group)
sv_index=find(s.IsSupportVector)  % 返回支持向量的标号
alpha=s.Alpha  % 返回经过训练的Lagrange乘数(分类函数的权系数)
b=s.Bias  % 返回分类函数的常数项b

%% V.验证/测试SVM分类器
check=predict(s,trains)  % 验证已知样本点
error_rate=1-sum(group==check)/length(group)  % 计算已知样本点的误判率

%% VI.SVM分类器预测分类
solution=predict(s,predicts)  % 预测待判样本点进行分类
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值