【机器学习】入门笔记系列(9) | SVM(支持向量机)

一、SVM代价函数

支持向量机(SVM, Support Vector Machines)是一种非常流行与强大的监督算法。

SVM 的代价函数与逻辑回归的代价函数很相似。

逻辑回归与 SVM 的代价函数

现在定义 cost_0(z),cost_1(z) 分别为当 y=1 的分类代价,当 y=0时的分类代价。

SVM 代价函数演化过程

其中,参数 C 相当于 C = \frac{1} {\lambda}。当算法过拟合时,C 应该减小;当算法欠拟合时,C 应该增加。

SVM 代价函数最终形态

如果你有一个正样本,即y=1, 则只有在 z \geq 1时,cost_1(z) = 0。换句话说,如果你有一个正样本,我们会希望 \theta^Tx \geq 1

反之,如果有一个负样本,即y=0,则只有在 z = \theta^Tx \leq -1 时,cost_0(z) = 0

SVM 优化目标

最后,SVM 的假设函数 h_\theta(x) 不再代表 y=1 的概率,而是直接输出预测值0或1

SVM 假设函数

二、大边距分类器

在SVMs中,决策边界有一个特殊的属性:尽可能远离正样本和负样本。决策边界与离便觉最近样本的距离称为边距。 由于 SVM 最大化此边距,因此通常称为「大边距分类器」。

大边距分类器

SVM 需要尽可能最大化边距,那么只有参数 C 值很大才能实现大边距。

因为参数 C 值很大,想要 min~J(\theta),我们必须选择满足 \sum_{i=1}^{m} (y^{(i)}cost_1(z) + (1-y^{(i)})cost_0(z)) = 0 的参数 \theta。这样,我们的优化目标:
min~J(\theta) =min~( C*0+\frac{1} {2}\sum_{i=1}^{n}\theta_i^2 )= min~\frac{1} {2}\sum_{i=1}^{n}\theta_i^2

2.2 数学解释:SVM 为何被称为大边距分类器?

解释之前需要讲解向量内积的知识:

向量内积数学含义

为了方便讲解,令 n=2,\theta_0=0 前者方便可视化,后者使决策边界过原点。

之前讲想要最小化代价函数时,我们得到如下结论:

如果 y = 1,我们希望 \theta^T x \geq 1
如果 y = 0,我们希望 \theta^T x \leq -1

根据向量内积,得 \theta^T x^{(i)} = p^{(i)} ||\theta||,就有

如果 y^{(i)} = 1,我们希望 p^{(i)} ||\theta|| \geq 1
如果 y^{(i)} = 0,我们希望 p^{(i)} ||\theta|| \leq -1

因为只有参数 C 值很大才能实现大边距。min~J(\theta) \approx min \frac{1} {2}\sum_{i=1}^{n}\theta_i^2 = \frac{1} {2} (\theta_1^2 + \theta_2^2 ) = \frac{1} {2} (\sqrt{\theta_1^2 + \theta_2^2})^2 = \frac{1} {2}||\theta||^2

三、核函数(Kernels)

核函数允许 SVM 制作复杂的非线性分类器。

给定特征 x,根据与标志 l^{(1)},..,l^{(m)} 的接近度计算出新的特征 f,即

x^{(i)} = \begin{bmatrix} f^{(i)}_1 = similarity(x^{(i)},l^{(1)})\\ f^{(i)}_2 = similarity(x^{(i)},l^{(2)})\\ ...\\ f^{(i)}_n = similarity(x^{(i)},l^{(n)}) \end{bmatrix}

对应的,SVM 代价函数变为 J(\theta) = C \sum^{m}_{i=1}(y^{(i)}cost_1(\theta^Tf^{(i)}) + (1-y^{(i)})cost_0(\theta^Tf^{(i)})) + \frac{1} {2} \sum^{n}_{j=1}\theta_j^2

其中,similarity函数就是核函数。SVM 有很多核函数,不同核函数运用场景也不同。常见的核函数是「高斯核函数」,如下图所示。

高斯核函数

高斯核函数有如下的特点如下图所示。换句话说,当特征 x 与标志 l 越接近,新特征 f 越接近 1;当特征 x 与标志 l 越远,新特征 f 越接近 0。

高斯核函数的特点

3.1 高斯核函数如何选取标志 l^{(1)},...,l^{(n)} 呢?

这里提供一种方法:让每一个样本 x^{(i)} 等于每一个标志 l^{(i)},即 \{l^{(1)} = x^{(1)},l^{(2)} = x^{(2)},..,l^{(m)} = x^{(m)}\}

那么,就有了 x^{(i)} \in \mathbb{R}^{n*1} \Rightarrow f^{(i)} \in \mathbb{R}^{m*1},可以理解为 n = m

x^{(i)} = \begin{bmatrix} f^{(i)}_1 = similarity(x^{(i)},l^{(1)})\\ f^{(i)}_2 = similarity(x^{(i)},l^{(2)})\\ ...\\ f^{(i)}_m = similarity(x^{(i)},l^{(m)}) \end{bmatrix} = \begin{bmatrix} f^{(i)}_1 = similarity(x^{(i)},x^{(1)})\\ f^{(i)}_2 = similarity(x^{(i)},x^{(2)})\\ ...\\ f^{(i)}_m = similarity(x^{(i)},x^{(m)}) \end{bmatrix}

J(\theta) = C \sum^{m}_{i=1}(y^{(i)}cost_1(\theta^Tf^{(i)}) + (1-y^{(i)})cost_0(\theta^Tf^{(i)})) + \frac{1} {2} \sum^{m}_{j=1}\theta_j^2

3.2 参数 C 与 \sigma 的取值对高斯核函数的影响

核函数的参数

2.3 核函数的选取原则

不是所有的函数都能作为核函数,核函数必须满足一个技术性要求「默塞尔定理」,需要这个条件的原因是 SVM 算法或者 SVM 实现函数有许多熟练的数值优化技巧,为了有效求解参数 \theta,在最初的假设,这些决策都是用于把我们的注意力仅仅限制于可以满足「默塞尔定理」的核函数,这个定理的所做就是确保所有的 SVM 软件包能够使用大类的优化方法从而快速求解参数 \theta

四、SVM 的使用

现在已经有很多编写并优化过的 SVM 库可供直接调用,如 'liblinear' 和 'libsvm' 。 在实际应用中,应该调用 SVM 库,而不是自己编程实现 SVM 算法。

还需要注意两点:

  1. 选用高斯核函数时,要先对原特征 x 进行特征缩放;
  2. 并非所有相似性函数都是有效的核函数。 它们必须满足“Mercer定理”,这保证了 SVM 包中对核函数优化的运行正确。

Tips:大部分 SVM 软件包会自动增加特征 x_0 = 1,对于这类 SVM 软件包就不需要人工在数据集中增加特征 x_0 = 1。最好,在使用某个 SVM 软件包之前,查看是否需要人为增加特征 x_0 = 1

五、逻辑回归与 SVM 选择

n = 特征数量(x^{(i)} \in \mathbb{R}^{n*1} )
m = 样本数量

  1. n \gg m 时,选用 逻辑回归模型;

  2. n 较小,m 适中时,选用高斯核函数的 SVM (比如n = 1~1000,m = 10~10,000);

  3. m \gg n 时,就需要先增加特征后,再选用逻辑回归模型;

Tips:神经网络都能很好地应对上面几种情况,但是神经网络训练速度较慢

总结

SVM 实现步骤:

  1. 提取特征;
  2. 选择核函数,如果是高斯函数,还需要先进行特征缩放;
  3. 调用 SVM 软件包;
  4. 使用训练集训练模型,调整参数 C 和 \sigma执行 SVM;
  5. 用验证集计算模型误差率;
  6. 选择产生最小误差率的参数 C 和 \sigma
% X, y, Xval, Yval 分别是训练集特征向量、训练集标签、验证集的特征向量、验证集标签
C_list = [0.01,0.03,0.1,0.3,1,3,10,30];
sigma_list = [0.01,0.03,0.1,0.3,1,3,10,30];
min = [-1,0,0];
for i = 1:size(C_list(:),1)
  for j = 1:size(sigma_list(:),1)
    model= svmTrain(X, y, C_list(i), @(x, l) gaussianKernel(x, l, sigma_list(j)));
    predictions = svmPredict(model, Xval);  
    error = mean(double(predictions ~= yval));
    if min(1) == -1 || min(1) > error
      min = [error, C_list(i), sigma_list(j)];
    end
  endfor
endfor
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容