支撑向量机SVM

支撑向量机Support Vector Machine

我们使用支撑向量机既可以解决分类也可以解决回归


我们先来讨论分类问题


支撑向量机SVM

逻辑回归本质就是在这个二维平面找到决策边界

我们分类算法就告诉我们如果在这个决策边界一边就属于一类

否则就属于另一类

支撑向量机SVM

对于一些数据存在这样一个问题,就是决策边界并不唯一

支撑向量机SVM

决策边界不唯一通常有一个属于叫做   不适定问题


逻辑回归是如何解决这个  不适定问题的

他解决的思路是定义一个概率函数就是我们之前讲的Sigmoid

根据这个概率函数进行建模,形成损失函数

我们最小化这个损失函数从而求出一条角色边界

就是逻辑回归解决问题的思路 

在这么我们的损失函数完全由我们的训练数据集决定的


支撑向量机解决问题的方式稍微有点不同

支撑向量机SVM

假设我们得到的是这样一个线

在我们训练数据集上

这个决策平面非常好的将我们的数据分成两部分

但是现在对于机器学习算法来说有一个非常重要的问题

就是我们算法的泛化能力

当我们求出这个决策边界之后,这个决策边界对于没有看见的样本,他是不是一个好的决策边界

他能不能非常好的,得到那些未知数据相应的分类结果的

要知道对于未知结果进行分类,判断 ,预测是我们机器学习的真正目的 

支撑向量机SVM

假如他在这个位置很显然,根据我们分成的直线是蓝色

但是很有可能是红色类别更加可能

这个决策边界泛化效果不够好

因为离红色的点离得太近了

这就导致离红色的点依然很近的点被误分在红色一侧

这个点就是这样的情况


因为我们决策边界本身离红色点也特别近


这就是这根支线所代表的决策边界

这就是他泛化能力比较差的原因


那么什么边界泛化能力比较好呢

应该是这样的一根直线


支撑向量机SVM

这根支线是离这个支线最近的三个点

我们让他们尽可能的远换句话说,我期望我们的决策边界即离红色的点远,又离蓝色的点尽可能的远

同时他还能很好的分别红色和蓝色相应的数据点


所以我就得到这样一个决策边界


他相当于不仅仅考虑到现在的数据集划分

还考虑到了未来期望我们找到决策边界相应的泛化能力相应的好


SVM思想

对应泛化能力好的考量没有计划在预处理阶段

或者是我们找到这个模型之后,再对模型进行正则化这样的方式


而是对泛化能力的考量直接放在了算法内部


我们要找到决策边界,这个决策边界离我们样本都要尽可能的远


我们直观地看这样的泛化能力是好的

实际上这样的一个假设不仅仅是直观的假设

背后也是有它的数学理论的


我们可以在数学上证明,在SVM的决策中,这样的泛化能力是相应的好的


有兴趣的同学可以找资料深一步的理解


支撑向量机SVM

这些最近的点和我们决策直线又定义了两个直线

这两个直线和我们决策边界平行的


这两根直线现对应两个区域

直线之间不再有任何数据点

而我们SVM最终得到的决策边界相当于区域中间那根线


支撑向量机

SVM尝试寻找一个最优的决策边界


距离两个类别的最近的样本最远


最近的这些点被称为    支撑向量


支撑向量顶定义了一个区域


我们最优的决策边界就是由区域定义的


我们找到的最优的决策边界是由支撑向量决定的


支撑向量使我们SVM算法非常重要的元素


支撑向量机SVM

我们管这三个直线的距离d

很明显上面下面都是d


红色和蓝色的距离都是一样的


确定区域的两个直线通常称为margin

支撑向量机SVM

margin=2d


我们支撑向量机要做的最大化margin

我们现在解决的问题都是线性可分的


我们需要存在一个直线, 存在一个超平面可以将这些点划分


这种情况下定义了margin


称为Hard Margin SVM

也就是非常严格的,我们切切实实的找到了决策边界

这个决策边界没有错误的将我们的样本点进行划分同时最大化了margin


但是真实情况下很多情况是线性不可分的


我们可以进一步改进SVM

得到Soft Margin SVM


最大化Margin是自然语言的说法

如果真的想最大化margin我们首先要用形式语言,我们的数学语言将这个margin标出来

就是求出Margin的数学表达式

就是找到其中未知数的一组取值能够最大化marigin