SSVM

1. 关于SVM

在机器学习中,支持向量机(英语:support vector machine,常简称为SVM,又名支持向量网络[1])是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

由于支持向量机非常重要也非常经典,所以在这个实验中我参考南大软件新技术国家重点实验室大牛给出的推导,希望能够帮助大家深刻地理解。
1.线性二分类模型
给定一组数据
在这里插入图片描述
,其中
在这里插入图片描述
,二分类任务的目标是希望从数据中学得一个假设函数 h: R → {−1,1},使得 h(xi) =yi,即
在这里插入图片描述
用一个更简洁的形式表示是
在这里插入图片描述
更进一步,线性二分类模型认为假设函数的形式是基于对特征 xi 的线性组合,即
在这里插入图片描述
定理 1. 线性二分类模型的目标是找到一组合适的参数 (w, b),使得
在这里插入图片描述
即,线性二分类模型希望在特征空间找到一个划分超平面,将属于不同标记的样本分开。
证明.
在这里插入图片描述
2. 线性支持向量机
线性支持向量机 (SVM) [4]也是一种线性二分类模型,也需要找到满足定理 1 约束的划分超平面,即 (w, b)。由于能将样本分开的超平面可能有很多,SVM 进一步希望找到离各样本都比较远的划分超平面。
当面对对样本的随机扰动时,离各样本都比较远的划分超平面对扰动的容忍能力比较强,即不容易因为样 本的随机扰动使样本穿越到划分超平面的另外一侧而产生分类错误。因此,这样的划分超平面对样本比较稳健,不容易过拟合。另一方面,离各样本都比较远的划分超平面不仅可以把正负样本分开,还可以以比较大的确信度将所有样本分开,包括难分的样本,即离划分超平面近的样本。
2.1 间隔
在支持向量机中,我们用间隔 (margin) 刻画划分超平面与样本之间的距离。在引入间隔之前,我们需要 先知道如何计算空间中点到平面的距离。
在这里插入图片描述
定义 1 (间隔 γ ). 间隔表示距离划分超平面最近的样本到划分超平面距离的两倍,即
在这里插入图片描述
也就是说,间隔表示划分超平面到属于不同标记的最近样本的距离之和。
定理 3. 线性支持向量机的目标是找到一组合适的参数(w, b),使得
在这里插入图片描述
即,线性支持向量机希望在特征空间找到一个划分超平面,将属于不同标记的样本分开,并且该划分超平面距离各样本最远。
证明. 带入间隔定义即得。
2.2 线性支持向量机基本型
定理 3 描述的优化问题十分复杂,难以处理。为了能在现实中应用,我们希望能对其做一些简化,使其变 为可以求解的、经典的凸二次规划 (QP) 问题。
定义 2 (凸二次规划). 凸二次规划的优化问题是指目标函数是凸二次函数,约束是线性约束的一类优化问题。
在这里插入图片描述
由于对 (w, b) 的放缩不影响解,为了简化优化问题,我们约束 (w, b) 使得
在这里插入图片描述在这里插入图片描述在这里插入图片描述

推论 6. 线性支持向量机基本型中描述的优化问题属于二次规划问题,包括 d + 1 个优化变量,m 项约束。
证明. 令
在这里插入图片描述
代入公式 10 即得。
3. 对偶问题
现在,我们可以通过调用现成的凸二次规划软件包来求解定理 5 描述的优化问题。不过,通过借助拉格朗 日 (Lagrange) 函数和对偶 (dual) 问题,我们可以将问题更加简化。
3.1 拉格朗日函数与对偶形式
构造拉格朗日函数是求解带约束优化问题的重要方法。
在这里插入图片描述
证明.
在这里插入图片描述
推论 8 (KKT 条件). 公式 21 描述的优化问题在最优值处必须满足如下条件。
在这里插入图片描述
证明. 由引理 7 可知,u 必须满足约束,即主问题可行。对偶问题可行是公式 21 描述的优化问题的约束项。αigi(u) = 0 是在主问题和对偶问题都可行的条件下的最大值。
定义 4 (对偶问题). 定义公式 19 描述的优化问题的对偶问题为
在这里插入图片描述
引理 10 (Slater 条件). 当主问题为凸优化问题,即 f 和 gi 为凸函数,hj 为仿射函数,且可行域中至少有一点使不等式约束严格成立时,对偶问题等价于原问题。
证明. 此证明已超出本文范围,感兴趣的读者可参考 [2]。
在这里插入图片描述
3.2 线性支持向量机对偶型
线性支持向量机的拉格朗日函数为
在这里插入图片描述
证明. 因为公式 26 内层对 (w,b) 的优化属于无约束优化问题,我们可以通过令偏导等于零的方法得到 (w,b)的最优值。
在这里插入图片描述
将其代入公式 26,消去 (w, b),即得。
推论 13. 线性支持向量机对偶型中描述的优化问题属于二次规划问题,包括 m 个优化变量,m + 2 项约束。
证明. 令
在这里插入图片描述
代入公式 10 即得。其中,ei 是第 i 位置元素为 1,其余位置元素为 0 的单位向量。我们需要通过两个不等式约束和来得到一个等式约束。
3.3 支持向量
定理 14 (线性支持向量机的 KKT 条件). 线性支持向量机的 KKT 条件如下。
在这里插入图片描述

代入引理 8 即得。
定义 5 (支持向量). 对偶变量 αi > 0 对应的样本。
引理 15. 线性支持向量机中,支持向量是距离划分超平面最近的样本,落在最大间隔边界上。
在这里插入图片描述
定理 16. 支持向量机的参数 (w, b) 仅由支持向量决定,与其他样本无关。
证明. 由于对偶变量 αi > 0 对应的样本是支持向量,
在这里插入图片描述
其中 SV 代表所有支持向量的集合,b 可以由互补松弛算出。对于某一支持向量 xs 及其标记 ys,由于
在这里插入图片描述
实践中,为了得到对 b 更稳健的估计,通常使用对所有支持向量求解得到 b 的平均值。
推论 17. 线性支持向量机的假设函数可表示为
在这里插入图片描述
证明. 代入公式 35 即得。
至此为止,我们都是假设训练样本是线性可分的,即,存在一个划分超平面能将属于不同标记的训练样本分开。
本次实验后面的代码也是基于这种情况,即Simple SVM(SSVM)。但是实际上在很多任务中,这样的划分超平面是不存在的。支持向量机通过核技巧 (kernel trick) 来解决样本不是线性可分的情况,这种情况即Kernel SVM(KSVM),在本系列课程的机器学习之KSVM中会继续推导后续的公式,以及给出代码、数据集进行编程。

实际看不懂的话,就看下面的图文并茂的浅要介绍吧。
在二维线性可分离数据的情况下,如图所示,典型的机器学习算法试图找到一个边界,该边界特定方式划分数据实现错误分类误差可以最小化。如果仔细看下图,可以发现有几个边界来正确划分数据点。两条虚线和一条实线对数据进行了正确分类。
在这里插入图片描述
SVM与其他分类算法的不同之处在于它选择的决策边界能最大化距离所有类的最近数据点的距离。SVM不仅仅是找到决策边界,而且是找到了最佳的决策边界。最佳决策边界是距离所有类的最近点具有最大余量的边界。
那么支持向量机中的支持向量是什么意思呢?
以下图为例,我们会不会认为所有的点对于分割线的位置都是起决定性作用的?
在这里插入图片描述
其实在特别远的区域,哪怕你增加10000个样本点,对于分割线的位置,也是没有作用的,因为分割线是由几个关键点决定的(图上三个),这几个关键点支撑起了一个分割超平面,所以这些关键点,就是支持向量。

了解基础概念之后,我们来编程实现。
这次案例的数据集为bill_authentication.csv,我们的任务是基于纸币的四个属性,即小波变换图像的偏斜度、图像的方差、图像的熵和图像的简略度,来预测纸币是否真实。这是一个二分类问题,我们将使用SVM算法来解决这个问题。

首先加载库
在这里插入图片描述
导入数据文件
在这里插入图片描述
使用各种Python库分析数据集的方法几乎是无限的,为简单起见,我们只检查数据的维度并查看前几条记录。查看行和列以及数据:
在这里插入图片描述
运行结果如下
在这里插入图片描述
打印出来的意思是这个数据集有1372行,5列
想知道数据集究竟是什么样的吗?我们稍微打印几行看看
加上下面的代码即可
在这里插入图片描述
结果如下
在这里插入图片描述

接下来我们该处理数据了
数据预处理涉及(1)将数据划分为属性和标签,以及(2)将数据划分为训练集和测试集。
将数据划分为属性和标签:
在这里插入图片描述
第一行中,bankdata数据的所有列都存储在X变量中,但“Class”列除外,它是标签列。
第二行中只有class列存储在y变量中。此时X变量包含属性,而y变量包含相应的标签。
将数据划分为属性和标签后,下面的预处理步骤是将数据划分为训练集和测试集。 Scikit-Learn库的model_selection库包含train_test_split方法,该方法允许我们将数据轻松地划分为训练和测试集。
在这里插入图片描述
接下来我们要训练模型了
Scikit-Learn包含svm库,其中包含用于不同SVM算法的内置类。由于我们要执行分类任务,我们将使用支持向量分类器的类,该类在Scikit-Learn的svm库中名为SVC。该类采用一个参数,即内核(kernel)类型。这个参数非常重要。在Simple SVM的情况下,我们只需将此参数设置为“linear”即可,因为Simple SVM只能对线性可分的数据进行分类。
调用SVC类的fit方法来进行训练,该算法作为参数传递给fit方法。
在这里插入图片描述
然后我们做出预测
我们使用SVC的predict方法
在这里插入图片描述
最后就是评估算法
精确度,召回率和F1值等是分类任务常用的度量标准。 Scikit-Learn的metric库包含classification_report和confusion_matrix方法,可以很容易地找出这些重要度量的值。
在这里插入图片描述
全部代码在1.py
运行后结果如图
在这里插入图片描述
在看具体的值之前,我们需要了解,这结果度量的意义
准确率(Precision):P=TP/(TP+FP)。通俗地讲,就是预测正确的正例数据占预测为正例数据的比例。
召回率(Recall):R=TP/(TP+FN)。通俗地讲,就是预测为正例的数据占实际为正例数据的比例
recall 越高,说明模型对正样本的识别能力越强,precision 体现了模型对负样本的区分能力,precision越高,说明模型对负样本的区分能力越强。F1-score 是两者的综合。F1-score 越高,说明分类模型越稳健。
那么这里我们可以从结果中看出,这个分类模型是比较不错的。

参考:
2. 机器学习(西瓜书)
3. https://zh.wikipedia.org/wiki/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA
4. https://blog.csdn.net/matrix_space/article/details/50384518
5. 论文:张皓.从零推导支持向量机.南京大学软件新技术国家重点实验室
6. https://stackabuse.com
7. http://sofasofa.io/forum_main_post.php?postid=1000255

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值