0006.有监督学习之支持向量机(SVM)

发布时间 2023-06-05 20:03:05作者: 興華

一、什么是SVM

支持向量机(Support Vector Machine,SVM)是用于分类的一种算法,也属于有监督学习的范畴。

当一个分类问题,数据是线性可分(linearly separable)的,也就是用一根棍就可以将两种小球分开的时候,我们只要将棍的位置放在让小球距离棍的距离最大化的位置即可,寻找这个最大间隔的过程,就叫做最优化。但是,现实往往是很残酷的,一般的数据是线性不可分的,也就是找不到一个棍将两种小球很好的分类。这个时候,我们就需要球模拟成三维空间,然后找到将球分类的平面。而将球模拟成三维空间的这个东西就是核函数(kernel),用于切分小球的平面就是超平面(hyperplane)。如果数据集是N维的,那么超平面即使N-1维的。

把一个数据集正确分开的超平面可能有多个(如下图),而那个具有“最大间隔”的超平面就是SVM要寻找的最优解。而这个正则的最优解对应的两侧虚线所穿过的样本点,就是SVM中的支持样本点,称为“支持向量(support vector)”。支持向量到超平面的距离被称为间隔(margin)。

 

二、线性SVM

1. 概述

一个最优化问题通常有两个最基本的因素:

① 目标函数,也就是你希望什么东西的什么指标大到最好;

② 优化对象,你期望通过改变哪些因素来使你的目标函数达到最优。

在线性SVM算法中,目标函数显然就是那个“间隔”, 而优化对象则是超平面。

我们以线性可分的二分类问题为例

2. 间隔的计算公式

3. 约束条件

4. 线性SVM优化问题基本描述

5. 最优化问题的求解

6. 对偶问题求解

三、SMO算法

1. 概述

2. SMO算法流程

3. 简化版SMO算法

3.1 SMO算法的伪代码

3.2 构建辅助函数

3.3 简化版SMO算法

3.4 支持向量的可视化

4. 完整版SMO算法

4.1概述

4.2 虚招决策边界的优化例程

4.3 构建完整版SMO算法

5. 核函数

5.1 Sigmoid核函数

五、非线性SVM

1. 构建核转换函数

2. 更新辅助函数

3. 非线性SVM算法

4. 利用核函数进行分类

六、SVM之手写数字识别

1. 导入数据集

2. 手写数字的测试函数

3. 不同核函数及参数运行结果

七、算法总结

1. 优点

2. 缺点