IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 支持向量机(SVM)详解 -> 正文阅读

[人工智能]支持向量机(SVM)详解

支持向量机(SVM)详解

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) βj?gi?(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 ) b = {{\rm{y}}^{(i)}} - {w^T}{x^{(i)}} b=y(i)?wTx(i)= y ( i ) ? ∑ j = 1 n α j y ( j ) x ( j ) x ( i ) {y^{(i)}} - \sum\limits_{{\rm{j}} = 1}^n {{\alpha _j}{y^{(j)}}{x^{(j)}}} {x^{(i)}} y(i)?j=1n?αj?y(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-支持向量分类机

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

核函数:

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

image-20211114161215822

直接扩展到高维的问题:

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

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

image-20211114190718771

约束条件:

image-20211114190753918

核函数的充要条件:

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

image-20211114191108866
image-20211114191125654

常见的核函数:

  • 线性核(Linear Kernel)

    image-20211114201329371

  • 多项式核(Polynomial Kernel)

    image-20211114191427394

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

    image-20211115180004894

  • 余弦相似性核(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)  % 预测待判样本点进行分类
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:42:25  更:2021-12-01 17:43:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 2:21:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码