优化目标
与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰、更加强大的方式。
回顾一下逻辑回归的相关概念,看如何进行改动可以得到支持向量机。逻辑回归的假设函数为 ,对应的图像如下:
Logistic 回归中的代价函数:
其中的 函数:
SVM 中的代价函数图像:
当 即 改变时,在某一区域其对应的值会变得非常小,对整个代价函数而言影响也非常小。在图中,取
对于两个图,把左图中斜线段的函数改为 ,右图中斜线段的函数改为 。
相应代价函数变成:
用参数 替代 ,相当于
构建的支持向量机:
与逻辑回归不同的是,支持向量机并不会输出概率,相对的得到的是通过优化这个代价函数得到一个参数 ,支持向量机所做的是直接进行一个预测,预测 是等于1还是等于0。
直观上对大间距的理解
有时将支持向量机看作是大间距分类器,本节将介绍其中的含义,这有助于我们直观理解 SVM 模型的假设。
当 非常大,最小化代价函数的时候,我们将会很希望找到一个使第一项为0的最优解。因此,让我们尝试在代价项的第一项为0的情形下理解该优化问题。比如我们可以把
前面一项近似为 0 后,得到 :
这是一个条件极值问题
对于下面的这个例子,有不止一条直线可以把正负样本划分开,但是相比来说,黑色的分界线要好很多,它是更稳健的决策边界。
从数学来说,这条黑色的决策边界拥有更大的距离,叫做边距,这个边距也叫做支持向量机的间距,这会使支持向量机具有鲁棒性。因此,支持向量机有时被称为大间距分类器。对于下面这个训练集,加入一个额外的正样本后:
如果把
如果数据不是线性可分的,如果在这里有一些正样本或者有一些负样本,则支持向量机也会将它们恰当分开。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数 非常大的情形。当
大间距分类器的数学原理
计算向量内积:
先前的目标函数:
做一点简化,为了让目标函数更容易被分析:
这样通过内积计算的方式:
目标函数可以被取代为:
比如对于一个训练样本,得出下面这样的决策界:
参数向量 事实上是和决策界是90度正交的,因此这个绿色的决策界对应着一个参数向量 。
考察这个样本到参数 的投影,的投影是图中短的红色线段,等于 ,非常短。的投影是图中短的粉色线段,等于 ,也非常短。
因此当考察优化目标函数的时候,对于正样本而言,需要正样本 或者负样本 ,但是如果 在这里非常小,那就意味着我们需要 的范数非常大。但是需要找到目标函数的一个参数 ,它的范数是比较小的。因此,这看起来不像是一个好的参数向量
另一种情况的决策界:
在这个决策界下, 和 都比较大,这样
因此,如果想令 的范数变小,从而令
核函数
用多项式解决非线性拟合问题:
通过引入核函数来解决这个问题,假设函数:
用一系列的新的特征f来替换模型中的每一项,例如令:
给定一个训练样本 ,我们利用的各个特征与我们预先选定的地标 的近似程度来选取新的特征 。
新特征,例如:
上述公式中的相似度函数(similarity)用数学术语来说就是一个核函数 ,这里的核函数实际上是高斯核函数,即exp。
是高斯核函数的参数,通过下面的图我们可以看出对函数图形的改变:
图中水平面的坐标为 ,而垂直坐标轴代表 。可以看出,只有当 与 重合时才具有最大值。随着 的改变,
关于标记点,在实际问题中,我们应该怎么选取。
通常情况下是根据训练集的数量选择地标的数量,即如果训练集中有 个样本,则选取 个地标,并且令:。这样做的好处在于:得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
下面将核函数运用到支持向量机中,修改支持向量机假设为:
给定 ,计算新特性 ,当 时,预测 ,否则反之。
相应地修改代价函数为:
在具体实施过程中,我们还需要对最后的正则化项进行些微调整,在计算 时,用 代替 ,其中
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数,当不采用非常复杂的函数,或者训练集特征非常多而样本非常少的时候,可以采用这种不带核函数的支持向量机。
下面是支持向量机的两个参数 和 的影响:
较大时,相当于
较小时,相当于
使用 SVM
一般使用 SVM 的软件包(例如:liblinear,libsvm…)来解决参数问题。
需要做的事:
是提出参数
选择内核参数或你想要使用的相似函数,其中一个选择是:选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的SVM(支持向量机),这就意味这他使用了不带有核函数的SVM(支持向量机)。
多类别分类问题:
许多SVM的包已经内置了多分类的函数,因此,如果面对一个类似这样的模式,只是使用这些内置函数,会取得不错的效果。
除此之外,一个多分类的方法是使用one-vs-all的方法,要做的是训练 K 个SVM,如果有 K 个类别,用以将每个类别从其他类中区分开来,这会给你K参数的向量,这会尝试从其他所有类别中识别出 y=1 的类别。
使用准则:
为特征数,
如果相较于 而言,
如果 较小,而且
如果 较小,而