第十二章 支持向量机(Support Vector Machines)

12.1 大边界的直观理解

先直观理解一下支持向量机,人们有时将支持向量机看作是大间距分类器

具体而言,如果你考察这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的。我的意思是,存在一条直线把正负样本分开。当然有多条不同的直线,可以把正样本和负样本完全分开。

比如,这就是一个决策边界可以把正样本和负样本分开。但是多多少少这个看起来并不是非常自然是么?

或者我们可以画一条更差的决策界,这是另一条决策边界,可以将正样本和负样本分开,但仅仅是勉强分开,这些决策边界看起来都不是特别好的选择,支持向量机将会选择这个黑色的决策边界,相较于之前我用粉色或者绿色画的决策界。这条黑色的看起来好得多,黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这是什么意思呢?这条黑线有更大的距离,这个距离叫做间距(margin)。

当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器

支持向量机(那条分界线)的公式为

如果C非常大,则最小化代价函数的时候,我们将会C希望找到一个使第一项为0的最优解。因此,让我们尝试在代价项的第一项为0的情形下理解该优化问题。比如我们可以把C设置成了非常大的常数,这将给我们一些关于支持向量机模型的直观感受。

在这里讲一下正则化参数C的设置。

我们将这个大间距分类器中的正则化因子常数设置的非常大,我记得我将其设置为了100000,因此对这样的一个数据集,也许我们将选择这样的决策界,从而最大间距地分离开正样本和负样本。那么在让代价函数最小化的过程中,我们希望找出在y=1y=0两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:

事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习算法会受异常点(outlier)的影响。比如我们加入一个额外的正样本。

在这里,如果你加了这个样本,为了将样本用最大间距分开,也许我最终会得到一条类似这样的决策界,对么?就是这条粉色的线,仅仅基于一个异常值,仅仅基于一个样本,就将我的决策界从这条黑线变到这条粉线,这实在是不明智的。而如果正则化参数C设置的非常大,这事实上正是支持向量机将会做的。它将决策界,从黑线变到了粉线,但是如果C设置的小一点,如果你将C设置的不要太大,则你最终会得到这条黑线,当然数据如果不是线性可分的,如果你在这里有一些正样本或者你在这里有一些负样本,则支持向量机也会将它们恰当分开。

因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数C非常大的情形,同时,要提醒你C的作用类似于1/\lambda \lambda 是我们之前使用过的正则化参数。这只是C非常大的情形,或者等价地\lambda 非常小的情形。你最终会得到类似粉线这样的决策界,但是实际上应用支持向量机的时候,C不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。

回顾C=1/\lambda ,因此:

C较大时,相当于\lambda 较小,可能会导致过拟合,高方差。

C较小时,相当于 \lambda 较大,可能会导致低拟合,高偏差。


12.2 核函数

回顾我们之前讨论过可以使用高级数的多项式模型来解决无法用直线进行分隔的分类问题:

为了获得上图所示的判定边界,我们的模型可能是\theta _0+\theta _1x_1+\theta _2x_2+\theta _3x_1x_2+\theta _4x_1^2+\theta _5x_2^2...的形式。

我么可以用一系列的新的特征f来替换模型中的每一项。例如令:f_1=x_1,f_2=x_2,f_3=x_1x_2,f_4=x_1^2,f_5=x_2^2

可以得到h_\theta (x)=\theta _1f_1+\theta _2f_2+...+\theta _nf_n。然而,除了对原有的特征进行组合以外,有没有更好的方法来构造f_1,f_2,f_3?我们可以利用核函数来计算出新的特征。

给定一个训练实例x,我们利用x的各个特征与我们预先选定的地标(landmarks)l^{(1)},l^{(2)},l^{(3)}的近似程度来选取新的特征f_1,f_2,f_3

例如:f_1=similarity(xl^{(1)})=e(-\frac{||x-l^{(1)}||^2}{2\sigma ^2})

其中||x-l^{(1)}||^2=\sum\nolimits_{j=1}^n (x_j-l_j^{(1)})^2是实例x中所有特征与地标l^{(1)}之间的距离的和。上例中的similarity(xl^{(1)})就是核函数,具体而言,这里是一个高斯核函数(Gaussian Kernel)。

这些地标l的作用是什么?如果一个训练实例x与地标l之间的距离近似于0,则新特征f近似于e^{-0}=1,如果训练实例x与地标l之间距离较远,则f近似于e^{-(一个较大的数)}=0.

假设我们的训练实例含有两个特征[x_1,x_2],给定地标l^{(1)}与不同的\sigma 值,见下图:

图中水平面的坐标为x_1,x_2,而垂直坐标轴代表f。可以看出,只有当xl^{(1)}重合时,即x=l^{(1)},则f=e^{-0}=1,这个时候f处于最高点即最大值。随着x的改变f值改变的速率受到\sigma ^2的控制。

看到上图,,当实例处于粉红色的点位置处,因为其离l^{(1)}最近,但是离l^{(2)}l^{(3)}较远,因此f_1接近1,而f_2,f_3接近0。因此h_\theta (x)=\theta _1f_1+\theta _2f_2+\theta _3f_3>0,因此预测y=1。同理可以求出,对于离l^{(2)}较近的绿色点,也预测y=1,但是对于蓝绿色的点,因为其离三个地标都较远,预测y=0

这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征f_1,f_2,f_3

下面有个问题!!!我们应该如何选择地标呢?

我们通常是根据训练集的数量选择地标的数量,即如果训练集中有m个实例,则我们选取m个地标,并且令:l^{(1)}=x^{(1)},l^{(2)}=x^{2)},...,l^{(m)}=x^{(m)}。这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:

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

给定x,计算新特征f,当\theta ^Tf\geq 0时,预测y=1,否则反之。

相应地修改代价函数为:\sum\nolimits_{j=1}^{n=m}\theta _j^2=\theta ^T\theta ,minC\sum\nolimits_{i=1}^m [y^{(i)}cost_1(\theta ^Tf^{(i)})+(1-y^{(i)})cost_0(\theta ^Tf^{(i)})]+\frac{1}{2} \sum\nolimits_{j=1}^{n=m} \theta _j^2在具体实施过程中,我们还需要对最后的正则化项进行些微调整,在计算\sum\nolimits_{j=1}^{n=m} \theta _j^2=\theta ^T\theta 时,我们用\theta ^TM\theta 代替\theta ^T\theta ,其中M是根据我们选择的核函数而不同的一个矩阵。这样做的原因是为了简化计算。

理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用M来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间。

在此,我们不介绍最小化支持向量机的代价函数的方法,我们可以使用python很多模块去实现。在使用这些软件包最小化我们的代价函数之前,我们通常需要编写核函数,并且如果我们使用高斯核函数,那么在使用之前进行特征缩放是非常必要的。

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

下面是支持向量机的两个参数C\sigma 的影响:

已知C=1/\lambda        

C较大时,相当于\lambda 较小,可能会导致过拟合,高方差;

C较小时,相当于\lambda 较大,可能会导致低拟合,高偏差;

\sigma 较大时,可能会导致低方差,高偏差;

\sigma 较小时,可能会导致低偏差,高方差。


12.3 使用支持向量机

我们要知道在高斯核函数之外我们还有其他一些选择,如:

多项式核函数(Polynomial Kernel)

字符串核函数(String kernel

卡方核函数(chi-square kernel

直方图交集核函数(histogram intersection kernel

等等

这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足Mercer's定理,才能被支持向量机的优化软件正确处理。

多类分类问题

假设我们利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有k个类,则我们需要k个模型,以及k个参数向量\theta 。我们同样也可以训练k个支持向量机来解决多类分类问题。但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。

尽管我们不去写自己的SVM的优化软件,但是我们也需要做几件事:

1、是提出参数C的选择。我们在讨论过误差/方差在这方面的性质。

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


下面是一些普遍使用的准则:

n为特征数,m为训练样本数。

(1)如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。

(2)如果n较小,而且m大小中等,例如n1-1000之间,而m10-10000之间,使用高斯核函数的支持向量机。

(3)如果n较小,而m较大,例如n1-1000在之间,而m大于50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。

值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。

SVM会工作得很好,但是它们仍然会有一些慢。当你有非常非常大的训练集,且用高斯核函数是在这种情况下,我经常会做的是尝试手动地创建,拥有更多的特征变量,然后用逻辑回归或者不带核函数的支持向量机。如果你看到这个幻灯片,看到了逻辑回归,或者不带核函数的支持向量机。在这个两个地方,我把它们放在一起是有原因的。原因是:逻辑回归和不带核函数的支持向量机它们都是非常相似的算法,不管是逻辑回归还是不带核函数的SVM,通常都会做相似的事情,并给出相似的结果。但是根据你实现的情况,其中一个可能会比另一个更加有效。但是在其中一个算法应用的地方,逻辑回归或不带核函数的SVM另一个也很有可能很有效。但是随着SVM的复杂度增加,当你使用不同的内核函数来学习复杂的非线性函数时,这个体系,你知道的,当你有多达1万(10,000)的样本时,也可能是5万(50,000),你的特征变量的数量这是相当大的。那是一个非常常见的体系,也许在这个体系里,不带核函数的支持向量机就会表现得相当突出。你可以做比这困难得多需要逻辑回归的事情。


参考:https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容