【引言】
SVM可以说是目前最好的现成的分类器,即不加任何修改就可以直接使用。本文对应《机器学习实战》第六章内容,具体理论知识可以联系西瓜书第七章内容和博客笔记,此处只介绍SMO算法的实现与学习心得,以及关于核函数的选择和实现。
1、基于最大间隔分隔数据
支持向量机:
优点:泛化错误率低,计算开销小,可解释性强;
缺点:调参工作量大,核函数敏感性强;
适用数据类型:标称型和数值型
线性可分:在平面内能够划出一条直线将两组数据点分开,则这组数据就被称为线性可分;
分隔超平面:当数据点的特征维度不仅仅是二维后(例如:1001维的特征数据集,那么就需要1000维的分隔超平面来划分),划分数据集的“直线”。
决策边界:与划分超平面、分隔超平面、SVM中所说的超平面是同一个意思,也就是常说的支持向量机。
间隔:点到分隔面的距离,尽可能大,这样才能保证分类器的健壮性,即在当数据集元素增多时,也能起到很好的划分作用。
支持向量:离分隔超平面最近的那些点。
SVM的设计意图:希望找到离分隔超平面最近的点,确保它们离分隔面的距离尽可能远。
因此,SVM的设计目的便是对超平面内的数据集进行划分,并且尽可能使支持向量与离决策面的距离最大化。
2、寻找最大化间隔
分隔超平面公式:
而平面上一点A到分隔超平面的距离公式,即其法线或垂线的长度为:
显然,作为描述分隔超平面的向量w和常数b,共同决定了超平面划分公式,而我们的目的,也正是寻找最优的w和b。
2.1 分类器求解的优化问题
利用海瑟矩阵处理输入的超平面得到:
目的是类似于sigmoid函数,对其做出二值化处理,当
时,输出-1;反之为+1。这里之所以这样标注,是为了便于在计算协方差时直观地反应与分隔超平面的距离远近:
label的正负号反应了数据点是正例还是反例,
的大小反应了点与分隔超平面的距离(被称为函数间隔),两者始终同号,值越大,离分隔超平面越远;值越靠近1,就说明离分隔超平面越近。
如果对上述公式稍作修改:
那么就可以反应分隔点(支持向量)与分隔超平面(支持向量机)之间的几何间隔。
【正如上节说到,我们需要找到分类器中的w和b,那么就需要先找到两个不同类别间间隔最小的点集合,再从这个点集合中找到与划分平面距离最大的的点作为支持向量】
公式化后可以写作:
显然,利用最优化的知识不难发现,这里的约束条件就是当分类间隔大于等于1时,公式化为:
利用拉格朗日乘子法,引入λ,详细的公式过程如西瓜书第七章内所述。因为约束条件都是基于数据点的,因此可以将超平面改写为数据点式的最优化约束问题:
以上就是SVM的公式化目标函数和约束条件,我们的目的就是利用拉格朗日乘子法优化它,求出最优的w和b。
然而,这一切都是建立在假设数据100%线性可分的基础上,而事实并非如此。通过在引入拉格朗日乘子的基础上,再引入松弛变量的原理,给予数据点一定的错误容忍范围,从而避免过拟合的情况,也增强了数据划分的可解释性。
常数C用于控制最大化间隔和保证大部分点的函数间隔小于1.0这两个目标权重。
通过上式不难发现,最终的目的就是求出所有的α,因为α可以用来表示这些分隔超平面。
收集数据:任意方法
准备数据:数值型数据
分析数据:有助于可视化分隔超平面
训练算法:两个主要参数的调优
测试算法:调用训练后的模型
使用算法:几乎所有分类都可以使用SVM。
以上便是SVM算法的设计流程。