机器学习算法 08 您所在的位置:网站首页 支持向量机应用实例 机器学习算法 08

机器学习算法 08

2023-10-25 08:17| 来源: 网络整理| 查看: 265

文章目录 系列文章支持向量机SVM算法1 SVM算法简介1.1 引入1.2 算法定义 2 SVM算法原理2.1 线性可分支持向量机2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建议跳过)推导目标函数目标函数求解拉格朗日乘数法对偶问题整体流程确定 3 SVM的损失函数4 SVM的核方法4.1 什么是核函数4.2 常见核函数 5 SVM回归6 SVM算法API介绍6.1 SVM算法API综述6.2 SVC6.3 NuSVC6.4 LinearSVC 7 案例:数字识别器7.1 案例背景介绍7.2 数据介绍7.3 案例实现确定最优参数结果预测 8 SVM总结

系列文章

机器学习算法 01 —— K-近邻算法(数据集划分、归一化、标准化)

机器学习算法 02 —— 线性回归算法(正规方程、梯度下降、模型保存)

机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

机器学习算法 04 —— 决策树(ID3、C4.5、CART,剪枝,特征提取,回归决策树)

机器学习算法 05 —— 集成学习(Bagging、随机森林、Boosting、AdaBost、GBDT)

机器学习算法 06 —— 聚类算法(k-means、算法优化、特征降维、主成分分析PCA)

机器学习算法 07 —— 朴素贝叶斯算法(拉普拉斯平滑系数、商品评论情感分析案例)

机器学习算法 08 —— 支持向量机SVM算法(核函数、手写数字识别案例)

机器学习算法 09 —— EM算法(马尔科夫算法HMM前置学习,EM用硬币案例进行说明)

机器学习算法 10 —— HMM模型(马尔科夫链、前向后向算法、维特比算法解码、hmmlearn)

支持向量机SVM算法

学习目标:

了解什么是SVM算法掌握SVM算法的原理知道SVM算法的损失函数知道SVM算法的核函数了解SVM算法在回归问题中的使⽤应⽤SVM算法实现⼿写数字识别器 1 SVM算法简介 1.1 引入

案例来源:http://bytesizebio.net/2014/02/05/support-vector-machines-explained-well/

视频演示:https://www.youtube.com/watch?v=3liCbRZPrZA

桌上有两种颜色的球,我们需要用一根棍子将它们区分开,并且要求之后添加球也能继续适用。

显而易见,我们可以这样放!

接着,我们继续添加球,但似乎有一个红球被分错了类。

此时我们可以把棍子变得更粗,稍微改变下角度,让棍子的两边有更大的空隙(最大间隙)。

这样即使再放更多的球,这跟棍子依然是一个比较好的分界线。

如果我们加大难度,变成下面这样的情况后该如何分类呢?

我们将这个二维图像转换到三维,用力在桌上一拍!这时,我们可以用一张纸去分类!

但我们试图用二维的视角去看这个划分的纸,那就是一条曲线。

 

上面这些东西在学术上是另一种说法:

球 —— 数据 [data]棍子 —— 分类器 [classifier]最大间隙 —— 最优化 [optimization]拍桌子 —— 核方法 [kernelling]纸 —— 超平面 [hyperplane]

 

1.2 算法定义

SVM(supported vector machine,⽀持向量机):找到⼀个超平⾯使样本分成两类,并且间隔最⼤。

SVM能够执⾏线性或⾮线性分类、回归,甚⾄是异常值检测任务。它是机器学习领域最受欢迎的模型之⼀,特别适⽤于中⼩型复杂数据集的分类。

 

超平⾯最⼤间隔

下面左图显示了三种可能的线性分类器的决策边界,虚线代表的模型表现⾮常糟糕,甚⾄都⽆法正确实现分类。

其余两个模型(红线和紫线)在训练集上表现比较完美,但是它们的决策边界与实例过于接近,导致在⾯对新实例时,表现可能不会太好。

而下面右图中的实线代表不仅分离了两个类别,且尽可能远离最近的训练实例。

 

硬间隔

在上⾯我们使⽤超平⾯进⾏分割数据的过程中,如果我们严格地让所有实例都不在最⼤间隔之间,只位于正确的⼀边,这就是硬间隔分类。

硬间隔分类有两个问题:⾸先,它只在数据是线性可分离的时候才有效;其次,它对异常值⾮常敏感。

例如,下面这两幅图,它们是鸢尾花数据。左图有一个绿点在蓝点中间,无法找出硬间隔;右图虽然找出一个硬间隔,但间隔太窄无法无法有效泛化。

 

软间隔

为了避免硬间隔的问题,软间隔应运而生。软间隔的⽬标是尽可能在保持最⼤间隔宽阔和限制间隔违例(即限制位于最⼤间隔之外,甚⾄在错误的⼀边的实例数量)之间找到良好的平衡。

image-20210823205310671

在Scikit-Learn的SVM类中,可以通过超参数C来控制这个平衡:C值越⼩则间隔越宽,但是间隔违例也会越多。

上图显示了在⼀个⾮线性可分离数据集上,两个软间隔SVM分类器各⾃的决策边界和间隔。

左边使⽤了⾼C值,分类器的错误样本(间隔违例)较少,但是间隔也较⼩。右边使⽤了低C值,间隔⼤了很多,但是位于间隔上的实例也更多。

看起来第⼆个分类器的泛化效果更好,因为⼤多数间隔违例实际上都位于决策边界正确的⼀边,所以即便是在该训练集上,它做出的错误预测也会更少。

 

2 SVM算法原理 2.1 线性可分支持向量机

假设特征空间上的一个线性可分离训练集为: T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } x i ∈ R n , y i ∈ { + 1 , − 1 } , i = 1 , 2 , . . . N T= \lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \rbrace \\ x_i \in R^n,y_i \in \lbrace +1, -1 \rbrace,i=1,2,...N T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)}xi​∈Rn,yi​∈{+1,−1},i=1,2,...N 其中 ( x i , y i ) (x_i,y_i) (xi​,yi​)称为样本点, x i x_i xi​是第i个样本, y i y_i yi​为 x i x_i xi​的标记【 y i = 1 时 , x i 为 正 例 ; y i = − 1 时 , x i 为 负 例 y_i=1时,x_i为正例;y_i=-1时,x_i为负例 yi​=1时,xi​为正例;yi​=−1时,xi​为负例】

为什么标记要为+1、-1呢?

其实没有太多原理,只是一个标记,我们也可以用其他数字来标记,但为了方便后面计算 y i y j = y i ∗ y j \frac{y_i}{y_j}=y_i*y_j yj​yi​​=yi​∗yj​,取+1、-1比较好。

 

给出了上面的线性可分离训练数据集,我们可以通过间隔最大化得到分离超平面: y ( x ) = w T Φ ( x ) + b y(x)=w^T \Phi(x)+b y(x)=wTΦ(x)+b

相应的分类决策函数为: f ( x ) = s i g n ( w T Φ ( x ) + b ) f(x)=sign(w^T\Phi(x)+b) f(x)=sign(wTΦ(x)+b),这个决策函数就被称为线性可分支持向量机。

这里说明下 Φ ( x ) \Phi(x) Φ(x),前面我们引入SVM时举例了一个“拍桌子”的行为,能将二维的球“拍”到三维中的核函数就是 Φ ( x ) \Phi(x) Φ(x),它的作用就是将 x x x投影到更高维度。

例如我们看到的特征有2个, x 1 x_1 x1​和 x 2 x_2 x2​,它们组成了一个线性函数 w 1 x 1 + w 2 x 2 w_1x_1+w_2x_2 w1​x1​+w2​x2​

可能这两个特征并不能很好地描述数据,于是我们进行维度转化,变成 w 1 x 1 + w 2 x 2 + w 3 x 1 x 2 + w 4 x 1 2 + w 5 x 2 2 w_1x_1+w_2x_2+w_3x_1x_2+w_4x_1^2+w_5x_2^2 w1​x1​+w2​x2​+w3​x1​x2​+w4​x12​+w5​x22​

于是我们就多了三个特征,而这个就是笼统地描述x的映射。

最简单直接的就是 Φ ( x ) = x \Phi(x)=x Φ(x)=x

上面这个表达式就也就是一个超平面 y ( x ) y(x) y(x),本质上其实就是让我们求出一组参数 ( w , b ) (w,b) (w,b),使其构建的超平面函数能最优地分离两个集合。

例如下面这幅图就是一个超平面(硬间隔):

从这幅图可以看出, w w w其实是一个法向量(两条虚线上的点垂直到实线上距离最近),而b决定超平面和原点的距离。

再例如下面这幅图(软间隔):阴影部分是⼀个“过渡带”,“过渡带”的边界是集合中离超平⾯最近的样本点落在的地⽅。

 

2.2 SVM计算过程与算法步骤(有点难,我也没理解透,建议跳过) 推导目标函数

我们知道了支持向量机是什么,现在我们要去寻找一个最优的超平面,再次之前我们需要建立一个目标函数。

再来看看超平面表达式: y ( x ) = w T Φ ( x ) + b y(x)=w^T\Phi(x)+b y(x)=wTΦ(x)+b,为了方便,我们设 Φ ( x ) = x \Phi(x)=x Φ(x)=x。

在样本空间中,划分超平面可以通过如下线性方程来描述: w T x + b = 0 w^Tx+b=0 wTx+b=0

w = ( w 1 , w 2 , . . . , w d ) w=(w_1,w_2,...,w_d) w=(w1​,w2​,...,wd​)为法向量,决定了超平面的方向b是位移项,决定了超平面和原点之间的距离显然,划分超平面可以被法向量 w w w和位移项b确定,我们把其记为 ( w , b ) (w,b) (w,b)

因此,样本空间中任意点x到超平面 ( w , b ) (w,b) (w,b)的距离可以写为: γ = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ \gamma = \frac{|w^Tx+b|}{||w||} γ=∣∣w∣∣∣wTx+b∣​

假设超平面 ( w , b ) (w,b) (w,b)能将训练样本正确分类,那么对于 ( x i , y i ) ∈ D (x_i,y_i) \in D (xi​,yi​)∈D

若 y i = + 1 y_i=+1 yi​=+1,则有 w T x i + b > 0 w^Tx_i+b>0 wTxi​+b>0若 y i = − 1 y_i=-1 yi​=−1,则有 w T x i + b < 0 w^Tx_i+bwTxi​+b≥+1wTxi​+b≤−1​yi​=+1yi​=−1​ 即 有 m a x ( w , b ) = 2 ∣ ∣ w ∣ ∣ 使 得     y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , . . . , m 有max_{(w,b)}=\frac{2}{||w||}\\ 使得 \ \ \ y_i(w^Tx_i+b) \ge 1,i=1,2,...,m 有max(w,b)​=∣∣w∣∣2​使得   yi​(wTxi​+b)≥1,i=1,2,...,m 显然,为了最大化间隔,也就是需要最大化 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} ∣∣w∣∣1​,这等价于最小化 ∣ ∣ w ∣ ∣ 2 ||w||^2 ∣∣w∣∣2,于是上式可以重写为: 有 m i n ( w , b ) = 1 2 ∣ ∣ w ∣ ∣ 2 使 得 y i = ( w T x + b ) ≥ 1 , i = 1 , 2 , . . . m 有min_{(w,b)}=\frac{1}{2}||w||^2 \\ 使得 y_i=(w^Tx+b) \ge 1,i=1,2,...m 有min(w,b)​=21​∣∣w∣∣2使得yi​=(wTx+b)≥1,i=1,2,...m 这就是支持向量机的基本型。

 

 

目标函数求解

 

拉格朗日乘数法

到了这一步,终于把目标函数给建立起来了,接下来就是求目标函数的最优值。由于目标函数带有一个约束条件,所以我们可以用拉格朗日乘数法求解。【没错,就是高数里面的那个】

什么是拉格朗日乘数法呢?

拉格朗日乘数法(Lagrange multipliers)是一种寻找多元函数在一组约束下的极值的方法,这种方法可以将d个变量和k个约束条件的最优化问题转化为具有d+k个变量的无约束优化问题。【了解它作用就好,不必深究】

 

想要深入了解,可以看下面拉格朗日乘数法例子

以包含⼀个变量⼀个约束的简单优化问题为例,我们的⽬标函数是 f ( x ) = x 2 + 4 x − 1 f(x) = x^2 + 4x − 1 f(x)=x2+4x−1,讨论两种约束条件g(x):

在满⾜ x ≤ − 1 x\le−1 x≤−1约束条件下求⽬标函数的最⼩值;

在满⾜ x ≥ − 1 x\ge−1 x≥−1约束条件下求⽬标函数的最⼩值。

我们可以直观的从图中得到,

对于约束 1) 使⽬标值f(x)最⼩的最优解是x=−2;

对于约束 2) 使⽬标值f(x)最⼩的最优解是x=−1。

 

下面我们用拉格朗日乘数法求解。

当没有约束的时候,我们可以直接令⽬标函数的导数为0,求最优值。

可现在有约束,那怎么边考虑约束边求⽬标函数最优值呢?

最直观的办法是把约束放进⽬标函数⾥,由于本例中只有⼀个约束,所以引⼊⼀个朗格朗⽇乘⼦λ,构造⼀个新的函数,拉格朗⽇函数 h ( x ) = f ( x ) + λ g ( x ) h(x) = f(x) + \lambda g(x) h(x)=f(x)+λg(x)

该拉格朗⽇函数h(x)最优解可能在g(x)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有