优化目标

与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰、更加强大的方式。

回顾一下逻辑回归的相关概念,看如何进行改动可以得到支持向量机。逻辑回归的假设函数为 支撑向量回归 支持向量机回归方程_机器学习,对应的图像如下:

支撑向量回归 支持向量机回归方程_支撑向量回归_02


Logistic 回归中的代价函数:

支撑向量回归 支持向量机回归方程_支持向量机_03

其中的 支撑向量回归 支持向量机回归方程_代价函数_04 函数:

支撑向量回归 支持向量机回归方程_支持向量机_05

SVM 中的代价函数图像:

支撑向量回归 支持向量机回归方程_支持向量机_06


支撑向量回归 支持向量机回归方程_代价函数_07支撑向量回归 支持向量机回归方程_代价函数_08 改变时,在某一区域其对应的值会变得非常小,对整个代价函数而言影响也非常小。在图中,取 支撑向量回归 支持向量机回归方程_代价函数_07

对于两个图,把左图中斜线段的函数改为 支撑向量回归 支持向量机回归方程_支撑向量回归_10,右图中斜线段的函数改为 支撑向量回归 支持向量机回归方程_神经网络_11

相应代价函数变成:
支撑向量回归 支持向量机回归方程_支持向量机_12
用参数 支撑向量回归 支持向量机回归方程_支撑向量回归_13 替代 支撑向量回归 支持向量机回归方程_神经网络_14,相当于 支撑向量回归 支持向量机回归方程_支持向量机_15

构建的支持向量机:
支撑向量回归 支持向量机回归方程_神经网络_16
与逻辑回归不同的是,支持向量机并不会输出概率,相对的得到的是通过优化这个代价函数得到一个参数 支撑向量回归 支持向量机回归方程_机器学习_17,支持向量机所做的是直接进行一个预测,预测 支撑向量回归 支持向量机回归方程_神经网络_18 是等于1还是等于0。
支撑向量回归 支持向量机回归方程_神经网络_19


直观上对大间距的理解

有时将支持向量机看作是大间距分类器,本节将介绍其中的含义,这有助于我们直观理解 SVM 模型的假设。

支撑向量回归 支持向量机回归方程_神经网络_20


支撑向量回归 支持向量机回归方程_支撑向量回归_13 非常大,最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解。因此,让我们尝试在代价项的第一项为0的情形下理解该优化问题。比如我们可以把 支撑向量回归 支持向量机回归方程_支撑向量回归_13

前面一项近似为 0 后,得到 支撑向量回归 支持向量机回归方程_代价函数_23
支撑向量回归 支持向量机回归方程_代价函数_24
这是一个条件极值问题

对于下面的这个例子,有不止一条直线可以把正负样本划分开,但是相比来说,黑色的分界线要好很多,它是更稳健的决策边界。

支撑向量回归 支持向量机回归方程_代价函数_25


从数学来说,这条黑色的决策边界拥有更大的距离,叫做边距,这个边距也叫做支持向量机的间距,这会使支持向量机具有鲁棒性。因此,支持向量机有时被称为大间距分类器。对于下面这个训练集,加入一个额外的正样本后:

支撑向量回归 支持向量机回归方程_支持向量机_26


如果把 支撑向量回归 支持向量机回归方程_支撑向量回归_13

如果数据不是线性可分的,如果在这里有一些正样本或者有一些负样本,则支持向量机也会将它们恰当分开。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数 支撑向量回归 支持向量机回归方程_支撑向量回归_13 非常大的情形。当 支撑向量回归 支持向量机回归方程_支撑向量回归_13


大间距分类器的数学原理

计算向量内积:

支撑向量回归 支持向量机回归方程_代价函数_30


先前的目标函数:

支撑向量回归 支持向量机回归方程_神经网络_31

做一点简化,为了让目标函数更容易被分析:

支撑向量回归 支持向量机回归方程_神经网络_32


这样通过内积计算的方式:

支撑向量回归 支持向量机回归方程_神经网络_33

目标函数可以被取代为:

支撑向量回归 支持向量机回归方程_支持向量机_34

比如对于一个训练样本,得出下面这样的决策界:

支撑向量回归 支持向量机回归方程_支撑向量回归_35


支撑向量回归 支持向量机回归方程_神经网络_36

参数向量 支撑向量回归 支持向量机回归方程_机器学习_17 事实上是和决策界是90度正交的,因此这个绿色的决策界对应着一个参数向量 支撑向量回归 支持向量机回归方程_机器学习_17

考察这个样本到参数 支撑向量回归 支持向量机回归方程_机器学习_17 的投影,支撑向量回归 支持向量机回归方程_代价函数_40的投影是图中短的红色线段,等于 支撑向量回归 支持向量机回归方程_神经网络_41,非常短。支撑向量回归 支持向量机回归方程_支撑向量回归_42的投影是图中短的粉色线段,等于 支撑向量回归 支持向量机回归方程_支撑向量回归_43,也非常短。

因此当考察优化目标函数的时候,对于正样本而言,需要正样本 支撑向量回归 支持向量机回归方程_支持向量机_44 或者负样本 支撑向量回归 支持向量机回归方程_支撑向量回归_45,但是如果支撑向量回归 支持向量机回归方程_神经网络_46 在这里非常小,那就意味着我们需要 支撑向量回归 支持向量机回归方程_机器学习_17 的范数非常大。但是需要找到目标函数的一个参数 支撑向量回归 支持向量机回归方程_机器学习_17,它的范数是比较小的。因此,这看起来不像是一个好的参数向量 支撑向量回归 支持向量机回归方程_机器学习_17

另一种情况的决策界:

支撑向量回归 支持向量机回归方程_代价函数_50


在这个决策界下,支撑向量回归 支持向量机回归方程_神经网络_41支撑向量回归 支持向量机回归方程_支撑向量回归_43 都比较大,这样 支撑向量回归 支持向量机回归方程_机器学习_17

因此,如果想令 支撑向量回归 支持向量机回归方程_机器学习_17 的范数变小,从而令 支撑向量回归 支持向量机回归方程_机器学习_17


核函数

  • 支撑向量回归 支持向量机回归方程_机器学习_56

用多项式解决非线性拟合问题:

支撑向量回归 支持向量机回归方程_神经网络_57


支撑向量回归 支持向量机回归方程_支撑向量回归_58通过引入核函数来解决这个问题,假设函数:

支撑向量回归 支持向量机回归方程_机器学习_59

用一系列的新的特征f来替换模型中的每一项,例如令:

支撑向量回归 支持向量机回归方程_神经网络_60

给定一个训练样本 支撑向量回归 支持向量机回归方程_支撑向量回归_61,我们利用的各个特征与我们预先选定的地标 支撑向量回归 支持向量机回归方程_支撑向量回归_62 的近似程度来选取新的特征 支撑向量回归 支持向量机回归方程_机器学习_63

支撑向量回归 支持向量机回归方程_支持向量机_64


新特征,例如:


上述公式中的相似度函数(similarity)用数学术语来说就是一个核函数 ,这里的核函数实际上是高斯核函数,即exp。

支撑向量回归 支持向量机回归方程_代价函数_65


支撑向量回归 支持向量机回归方程_神经网络_66 是高斯核函数的参数,通过下面的图我们可以看出对函数图形的改变:

支撑向量回归 支持向量机回归方程_支撑向量回归_67


图中水平面的坐标为 支撑向量回归 支持向量机回归方程_机器学习_68,而垂直坐标轴代表 支撑向量回归 支持向量机回归方程_神经网络_69。可以看出,只有当 支撑向量回归 支持向量机回归方程_支撑向量回归_61支撑向量回归 支持向量机回归方程_神经网络_71 重合时才具有最大值。随着 支撑向量回归 支持向量机回归方程_支撑向量回归_61 的改变,支撑向量回归 支持向量机回归方程_神经网络_69

  • 支撑向量回归 支持向量机回归方程_支持向量机_74

关于标记点,在实际问题中,我们应该怎么选取。

通常情况下是根据训练集的数量选择地标的数量,即如果训练集中有 支撑向量回归 支持向量机回归方程_神经网络_75 个样本,则选取 支撑向量回归 支持向量机回归方程_神经网络_75 个地标,并且令:支撑向量回归 支持向量机回归方程_支持向量机_77。这样做的好处在于:得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:

支撑向量回归 支持向量机回归方程_神经网络_78


支撑向量回归 支持向量机回归方程_神经网络_79


下面将核函数运用到支持向量机中,修改支持向量机假设为:

给定 支撑向量回归 支持向量机回归方程_支撑向量回归_61,计算新特性 支撑向量回归 支持向量机回归方程_神经网络_69,当 支撑向量回归 支持向量机回归方程_机器学习_82 时,预测 支撑向量回归 支持向量机回归方程_代价函数_83,否则反之。

相应地修改代价函数为:支撑向量回归 支持向量机回归方程_支持向量机_84

在具体实施过程中,我们还需要对最后的正则化项进行些微调整,在计算 支撑向量回归 支持向量机回归方程_支持向量机_84 时,用 支撑向量回归 支持向量机回归方程_支撑向量回归_86 代替 支撑向量回归 支持向量机回归方程_支撑向量回归_87,其中 支撑向量回归 支持向量机回归方程_支撑向量回归_88

另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数,当不采用非常复杂的函数,或者训练集特征非常多而样本非常少的时候,可以采用这种不带核函数的支持向量机。

下面是支持向量机的两个参数 支撑向量回归 支持向量机回归方程_支撑向量回归_13支撑向量回归 支持向量机回归方程_神经网络_90的影响:

支撑向量回归 支持向量机回归方程_神经网络_91

支撑向量回归 支持向量机回归方程_支撑向量回归_13 较大时,相当于 支撑向量回归 支持向量机回归方程_神经网络_14

支撑向量回归 支持向量机回归方程_支撑向量回归_13 较小时,相当于 支撑向量回归 支持向量机回归方程_神经网络_14

支撑向量回归 支持向量机回归方程_神经网络_90

支撑向量回归 支持向量机回归方程_神经网络_90


使用 SVM

一般使用 SVM 的软件包(例如:liblinear,libsvm…)来解决参数问题。

需要做的事:

是提出参数 支撑向量回归 支持向量机回归方程_支撑向量回归_13

选择内核参数或你想要使用的相似函数,其中一个选择是:选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的SVM(支持向量机),这就意味这他使用了不带有核函数的SVM(支持向量机)。

多类别分类问题:

支撑向量回归 支持向量机回归方程_神经网络_99


许多SVM的包已经内置了多分类的函数,因此,如果面对一个类似这样的模式,只是使用这些内置函数,会取得不错的效果。

除此之外,一个多分类的方法是使用one-vs-all的方法,要做的是训练 K 个SVM,如果有 K 个类别,用以将每个类别从其他类中区分开来,这会给你K参数的向量,这会尝试从其他所有类别中识别出 y=1 的类别。

使用准则:

支撑向量回归 支持向量机回归方程_代价函数_100 为特征数,支撑向量回归 支持向量机回归方程_神经网络_75

如果相较于 支撑向量回归 支持向量机回归方程_神经网络_75 而言,支撑向量回归 支持向量机回归方程_代价函数_100

如果 支撑向量回归 支持向量机回归方程_代价函数_100 较小,而且 支撑向量回归 支持向量机回归方程_神经网络_75

如果 支撑向量回归 支持向量机回归方程_代价函数_100 较小,而 支撑向量回归 支持向量机回归方程_神经网络_75