机器学习-04-分类算法-04-支持向量机SVM

本文介绍了机器学习中的分类算法,特别是支持向量机(SVM)模型,涵盖了从理论背景、目标函数到实际应用,包括线性可分与非线性、硬间隔与软间隔的区别,以及SVM参数设置和调优的方法。通过实例代码展示了如何在Python中使用SVM进行分类,并讨论了如何确定调参策略以达到最优模型性能。
摘要由CSDN通过智能技术生成

总结

本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与SVM算法部分。

本门课程的目标

完成一个特定行业的算法应用全过程:

懂业务+会选择合适的算法+数据处理+算法训练+算法调优+算法融合
+算法评估+持续调优+工程化接口实现

参考

图解机器学习 | 支持向量机模型详解

支持向量机通俗导论(理解SVM的三层境界)

支持向量机(SVM)

机器学习中的算法(2)-支持向量机(SVM)基础

看了这篇文章你还不懂SVM你就来打我https://tangshusen.me/2018/10/27/SVM/

斯坦福CS229 | 机器学习-吴恩达主讲(2018·完整版)

https://www.bilibili.com/video/BV1hT4y1r73X/

深度解析拉格朗日乘子法,让你成为高手

最优化问题

深入浅出最优化(1) 最优化问题概念与基本知识

机器学习定义

关于机器学习的定义,Tom Michael Mitchell的这段话被广泛引用:
对于某类任务T性能度量P,如果一个计算机程序在T上其性能P随着经验E而自我完善,那么我们称这个计算机程序从经验E中学习
在这里插入图片描述

SVM算法

SVM算法简介与分类

支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

目标:找到最好点到决策边界最大
SVM,这是曾经在机器学习界有着近乎「垄断」地位的模型,影响力持续了好多年。直至今日,即使深度学习神经网络的影响力逐渐增强,但 SVM 在中小型数据集上依旧有着可以和神经网络抗衡的极好效果和模型鲁棒性。

在这里插入图片描述x到面的距离就是画一个垂线,面上有两个点x’ 和 x" ,则点x’ 和 x" 是满足平面方程的,假设平面方程为
y = W x + b y=Wx+b y=Wx+b,把x’ 和 x"代入
W T x ′ + b = 0 和 W T x ′ ′ + b = 0 W^Tx'+b=0 和 W^Tx''+b=0 WTx+b=0WTx′′+b=0
我们计算x到点x’ 和 x" 的距离,因为点到点的距离相比点到面的距离好算些。
法向量W是垂直于平面的,在对这个x到点x’ 或者 x到点x"的距离按照法向量W进行投影,就得到了点x到平面的距离

在这里插入图片描述
法向量是没有方向的,用 W T W^T WT 处于自身的模 ∣ ∣ W ∣ ∣ ||W|| ∣∣W∣∣就得到了单位方向向量
∣ W T ∣ ∣ W ∣ ∣ ( X − X ′ ) ∣ |\frac{W^T} {||W||}(X-X')| ∣∣W∣∣WT(XX)其中 ( X − X ′ ) (X-X') (XX)是两点之间的距离, ∣ W T ∣ ∣ W ∣ ∣ ∣ |\frac{W^T} {||W||}| ∣∣W∣∣WT是单位方向向量
就是在单位方向的投影,对 W T W^T WT放在括号内得到
∣ 1 ∣ ∣ W ∣ ∣ ( W T X − W T X ′ ) ∣ |\frac{1} {||W||}(W^TX-W^TX')| ∣∣W∣∣1(WTXWTX)
W T X ′ = − b W^TX'= -b WTX=b代入

∣ 1 ∣ ∣ W ∣ ∣ ∣ ( W T X + b ) ∣ |\frac{1} {||W||}|(W^TX+b)| ∣∣W∣∣1(WTX+b)

在这里插入图片描述
这里的X1 X2 X3 为样本点的特征 Y1Y2…Yn为样本的标签,其中规定样本的标签有2种,正样本为+1,负样本为-1.
正样本表示所有点位于超平面的上面,此时 y ( x i ) y(x_i) y(xi)为正值, y ∗ y ( x i ) > 0 y*y(x_i)>0 yy(xi)>0
负样本表示所有点位于超平面的下面,此时 y ( x i ) y(x_i) y(xi)为负值, y ∗ y ( x i ) > 0 y*y(x_i)>0 yy(xi)>0
这里规定正样本为+1,负样本为-1都是为了后面的计算,保证为正可以去掉绝对值,同时任何书数字乘以1都不变

在这里插入图片描述
因为 ∣ ( W T X + b ) ∣ |(W^TX+b)| (WTX+b)有绝对值,但 y i ∗ y ( x i ) > 0 y_i*y(x_i)>0 yiy(xi)>0就可以实现把绝对值符号去掉

在这里插入图片描述
因为 y i ∗ y ( x i ) > 0 y_i*y(x_i)>0 yiy(xi)>0,对函数进行放缩可以得到 y i ∗ y ( x i ) > = 1 y_i*y(x_i)>=1 yiy(xi)>=1
此时的优化目标函数就等价于 :与该分割线最近点距离最大
放缩变换从>0变为>1的目的是为了便于计算,因为1*任何数都为自身
最终就得到了目标函数 a r g m a x w , b 1 ∣ ∣ W ∣ ∣ argmax_{w,b}\frac{1}{||W||} argmaxw,b∣∣W∣∣1

在这里插入图片描述
把最大值转换为求最小值, W 2 W^2 W2表示一个向量,添加 1 2 \frac{1}{2} 21不影响求最小值
这里我们需要在约束条件下,求极值

深度解析拉格朗日乘子法,让你成为高手在这里插入图片描述
在拉格朗日法中,包含不等式和等式的约束条件,在此约束条件下求方程的最小值。
y i ∗ y ( x i ) > = 1 y_i*y(x_i)>=1 yiy(xi)>=1可得
− y i ∗ y ( x i ) + 1 < = 0 -y_i*y(x_i)+1<=0 yiy(xi)+1<=0
如本体中,我们求W和b,不好求,但可以求一个 α \alpha α α \alpha α和W和b有关系
在这里插入图片描述

在这里插入图片描述
对偶
计算过程需要从内向外,而 m i n w , b m a x α L ( w , b , a ) min_{w,b}max_{\alpha}L(w,b,a) minw,bmaxαL(w,b,a)中最内为最大值可以通过对转换为
m a x α m i n w , b L ( w , b , a ) max_{\alpha}min_{w,b}L(w,b,a) maxαminw,bL(w,b,a)
KKT条件

在这里插入图片描述
这一步求出了最小距离的点

再求最小距离最大的点在这里插入图片描述
依然把最大值转换为最小值,最大值的整数,加上负号 就是 求最小值了
要注意这里的条件

在这里插入图片描述
这里的约束条件就是如下的约束条件
在这里插入图片描述

代入的
代入X1 ,X2,X3的值为:在这里插入图片描述
这里的 18 α 1 2 18\alpha_{1}^2 18α12是当i=1并且j=1时,把 x 1 x_1 x1为(3,3)点代入,把 y 1 y_1 y1为+1代入后的结果
( + 1 ) ∗ ( + 1 ) ∗ ( 3 ∗ 3 + 3 ∗ 3 ) = 18 (+1)*(+1)*(3*3+3*3)=18 +1+133+33=18
在这里插入图片描述
在这里插入图片描述
这里的 42 α 1 α 2 42\alpha_{1}\alpha_{2} 42α1α2是当i=1并且j=2时,把 x 1 x_1 x1为(3,3)点和 x 2 x_2 x2为(4,3)点代入,把 y 1 y_1 y1为+1和 y 2 y_2 y2为+1代入后的结果
( + 1 ) ∗ ( + 1 )( 3 ∗ 4 + 3 ∗ 3 ) = 21 (+1)*(+1)(3*4+3*3)=21 +1+1)(34+33=21同时当i=2并且j=1也为21,加一起就为42

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把(3,3)(4,3)(1,1)代入得到

在这里插入图片描述
在这里插入图片描述>这里 α 2 = 0 \alpha_2=0 α2=0表明 x 2 x_2 x2这个点不为支持向量,所有不为支持向量的都是0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

支持向量机学习方法,针对不同的情况,有由简至繁的不同模型:

线性可分支持向量机(linear support vector machine in linearly separable case):训练数据线性可分的情况下,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机(亦称作硬间隔支持向量机)。
线性支持向量机(linear support vector machine):训练数据近似线性可分的情况下,通过软间隔最大化(soft margin maximization),学习一个线性的分类器,称作线性支持向量机(又叫软间隔支持向量机)。
非线性支持向量机(non-linear support vector machine):训练数据线性不可分的情况下,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性分类器,称作非线性支持向量机。
在这里插入图片描述

支持向量机可以借助核技巧完成复杂场景下的非线性分类,当输入空间为欧式空间或离散集合、特征空间为希尔贝特空间时,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。
通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。这样的方法称为核技巧。
在这里插入图片描述

SVM参数设置

一:如何判断调参范围是否合理

正常来说,当我们参数在合理范围时,模型在训练集和测试集的准确率都比较高;当模型在训练集上准确率比较高,而测试集上的准确率比较低时,模型处于过拟合状态;当模型训练集和测试集上准确率都比较低,模型处于欠拟合状态。正常来说测试集上的准确率都会比训练集要低。

二:如何确定参数的调节方向

当使用线性支持向量机时,我们只需调节正则化参数C的范围即可。
这里我们以RBF作为核的SVM为例,这时候我们需要调节的参数是正则化参数C和核函数参数gamma。为了保证调参的精确度,一般我们都使用网格搜索法来确定参数。
网格搜索法就是给出各个参数的调节范围和调节步长,计算出每个参数的可能取值,然后遍历所有的组合情况,返回最佳的参数值。
C和gamma的有效范围是: 1 0 − 8 − 1 0 8 10^{-8}-10^8 108108
C表示模型对误差的惩罚系数,gamma反映了数据映射到高维特征空间后的分布;C越大,模型越容易过拟合;C越小,模型越容易欠拟合。gamma越大,支持向量越多,gamma值越小,支持向量越少。gamma越小,模型的泛化性变好,但过小,模型实际上会退化为线性模型;gamma越大,理论上SVM可以拟合任何非线性数据。
为维持模型在过拟合和欠拟合之间的平衡,往往最佳的参数范围是C比较大,gamma比较小;或者C比较小,gamma比较大。也就是说当模型欠拟合时,我们需要增大C或者增大gamma,不能同时增加,调节后如果模型过拟合,我们又很难判断是C过大了,还是gamma过大了;同理,模型欠拟合的时候,我们需要减小C或者减小gamma。

三:设置合理的调参起始点

因为SVM本身是一个非线性模型,调参的时候根据项目的不同,每一次都是从头开始的。如果想把上一个项目调好的参数套用到下一个项目上,往往没什么效果。正常情况下,我们都会先设置C和gamma的值在0.1~10之间,然后在根据模型的表现,每次乘以0.1或者10作为一个步长,当确定大致范围后,再细化搜索区间。

最大间隔分类器

分类问题的数学理解是空间划分(或者寻找不同类别的决策边界),如图所示是一个简单的线性分类器(这部分更详细的讲解参考ShowMeAI文章 图解机器学习| 机器学习基础知识图解机器学习 | 逻辑回归算法详解)。
在这里插入图片描述

不同的模型在解决分类问题时,会有不同的处理方式,直观上看,我们会使用不同的决策边界对样本进行划分,完成该分类任务的决策边界有无数个。SVM 模型,要求更高一些,它不仅仅希望把两类样本点区分开,还希望找到鲁棒性最高、稳定性最好的决策边界(对应图中的黑色直线)。
在这里插入图片描述
这个决策边界与两侧「最近」的数据点有着「最大」的距离,这意味着决策边界具有最强的容错性,不容易受到噪声数据的干扰。直观的理解就是,如果决策边界抖动,最不容易「撞上」样本点或者进而导致误判。

支持向量机详解

1)线性可分 SVM 与硬间隔最大化
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

SVM 总结

1)模型总结

支持向量机(Support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,他的学习策略就是间隔最大化,同时该方法可以形式化为一个求解图二次规划。
在这里插入图片描述
2)模型优缺点
(1)SVM模型优点
在这里插入图片描述

在这里插入图片描述

基于Python的 SVM 代码实践

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets
iris = datasets.load_iris()
X = iris.data[:, :2]  #只取前两维特征,方便可视化
y = iris.target
svc = svm.SVC(kernel='linear', C=1).fit(X, y)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min) / 100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
plt.subplot(1, 1, 1)
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('SVC with linear kernel')
plt.show()

输出为:
在这里插入图片描述

在这里插入图片描述

使用多项式核函数
初始化 SVM 对象的代码替换为下面这行

# svc = svm.SVC(kernel='linear', C=1).fit(X, y)
svc = svm.SVC(kernel='poly', degree=3).fit(X, y)

输出为:
在这里插入图片描述

使用rbf核函数(高斯核函数)
初始化 SVM 对象的代码替换为下面这行

# svc = svm.SVC(kernel='linear', C=1).fit(X, y)
# svc = svm.SVC(kernel='poly', degree=3).fit(X, y)
svc = svm.SVC(kernel='rbf', C=1).fit(X, y)**

输出为:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

确定方向过程

针对完全没有基础的同学们
1.确定机器学习的应用领域有哪些
2.查找机器学习的算法应用有哪些
3.确定想要研究的领域极其对应的算法
4.通过招聘网站和论文等确定具体的技术
5.了解业务流程,查找数据
6.复现经典算法
7.持续优化,并尝试与对应企业人员沟通心得
8.企业给出反馈

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT从业者张某某

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值