首页 > 其他分享 >SVM 学习笔记

SVM 学习笔记

时间:2023-05-10 18:12:43浏览次数:40  
标签:SVM mathbf vert 笔记 学习 超平面 theta 函数

Support Vector Machine(SVM),也是广泛应用于各个领域的机器学习算法。

注意为了方便,本文取消了 \(x_0 = 1\) 的这一维,故原来的 \(\mathbf{\theta}^{\mathbf{T}} \mathbf{x}\),现在记为 \(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0\)。

1. SVM 模型

我们先复习一下 Logistic 回归,我们的函数模型是设 \(h_{\mathbf{\theta}}(\mathbf{x}) = \sigma(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0)\) 表明 \(\mathbf{x}\) 是正类的概率。然后通过代价函数:

\[J(\theta) = \frac{1}{m} \bigg[ \sum_{i = 1}^m y^{(i)} \left(- \ln(h_{\theta}(\mathbf{x}^{(i)})) \right) + (1 - y^{(i)}) \left(- \ln(1 - h_{\theta}(\mathbf{x}^{(i)})) \right) \bigg] + \frac{\lambda}{2m} \sum_{j = 1}^{n} \theta_j^2 \]

来使用数据训练该模型。

由于代价函数中出现了对数函数,不便于计算,我们考虑使用一个便于计算且可以同样在模型决策错误时,让代价函数的值趋于正无穷的单调函数。我们暂且用 \(\operatorname{cost}_1(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0), \operatorname{cost}_0(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0)\) (下标代表了这个代价是否为正类数据的代价)代替代价函数中的两个对数的部分,即让新的代价函数为:

\[J(\theta) = \frac{1}{m} \bigg[ \sum_{i = 1}^m y^{(i)} \operatorname{cost}_1(\mathbf{\theta}^{\mathbf{T}} \mathbf{x}^{(i)} + \theta_0) + (1 - y^{(i)}) \operatorname{cost}_0(\mathbf{\theta}^{\mathbf{T}} \mathbf{x}^{(i)} + \theta_0) \bigg] + \frac{\lambda}{2m} \sum_{j = 1}^{n} \theta_j^2 \]

我们一般会选取 \(\operatorname{cost}_1(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0) = \max(0, -\mathbf{\theta}^{\mathbf{T}} \mathbf{x} - \theta_0), \operatorname{cost}_0(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0) = \max(0, \mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0)\) 做代价函数这两部分。

而且由于 SVM 在代价函数的表示方法上与 Logistic 回归有些不同,我们去掉了第二项的正则化参数,而在第一项前面添加了参数,而且也去掉了取平均,最终的代价函数即为:

\[J(\theta) = C \bigg[ \sum_{i = 1}^m y^{(i)} \operatorname{cost}_1(\mathbf{\theta}^{\mathbf{T}} \mathbf{x}^{(i)} + \theta_0) + (1 - y^{(i)}) \operatorname{cost}_0(\mathbf{\theta}^{\mathbf{T}} \mathbf{x}^{(i)} + \theta_0) \bigg] + \frac{1}{2} \sum_{j = 1}^{n} \theta_j^2 \]

不同于 Logistic 回归,会给出一个概率,而 SVM 会给出一个直接的分类:

\[h_{\theta}(\mathbf{x}) = \begin{cases} 1, & \mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0 \ge 0 \\ 0, & \mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0 < 0 \end{cases} \]

但是我们会给一个边界因子,使得分类效果更加明显,即我们最终的函数模型为:

\[h_{\theta}(\mathbf{x}) = \begin{cases} 1, & \mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0 \ge 1 \\ 0, & \mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0 \le -1 \end{cases} \]

我们不妨来看一下这些式子的意义。让我们从 \(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0\) 这一部分下手。

我们发现这个是超平面的方程 \(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0 = 0\) 的一部分,我们可以简单推导一下超平面的相关内容:

设超平面的法向量为 \(\mathbf{\theta}\),\(\mathbf{x}_0\) 是由原点为起点,终点为超平面上一点的一个向量。故超平面的方程为 \(\mathbf{\theta}^{\mathbf{T}} (\mathbf{x} - \mathbf{x}_0) = 0\),如果令 \(-\mathbf{\theta}^{\mathbf{T}} \mathbf{x}_0 = \theta_0\),则超平面的方程就为 \(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0 = 0\)。

若 \(\mathbf{x}\) 为空间内任意一点,其到超平面的距离 \(d\) 即为向量 \(\mathbf{x} - \mathbf{x}_0\) 到法向量 \(\mathbf{\theta}\) 的投影的绝对值。即:

\[d = \dfrac{\vert \mathbf{\theta}^{\mathbf{T}}(\mathbf{x} - \mathbf{x}_0) \vert}{\vert \mathbf{\theta} \vert} = \dfrac{\vert \mathbf{\theta}^{\mathbf{T}}\mathbf{x} + \theta_0 \vert}{\vert \mathbf{\theta} \vert} \]

如果我们将 \(h_{\mathbf{\theta}}(\mathbf{x})\) 化作这样:

\[h_{\theta}(\mathbf{x}) = \begin{cases} 1, & \dfrac{\mathbf{\theta}^{\mathbf{T}}\mathbf{x} + \theta_0}{\vert \mathbf{\theta} \vert} \ge \dfrac{1}{\vert \mathbf{\theta} \vert}\\ 0, & -\dfrac{\mathbf{\theta}^{\mathbf{T}}\mathbf{x} + \theta_0}{\vert \mathbf{\theta} \vert} \ge \dfrac{1}{\vert \mathbf{\theta} \vert} \end{cases} \]

如果正类和负类的限制条件都加上绝对值,那么就是表明我们希望任意样本点 \(\mathbf{x}\) 到超平面 \(\mathbf{\theta}^{\mathbf{T}} \mathbf{x} + \theta_0 = 0\) 的距离至少为 \(\dfrac{1}{\vert \mathbf{\theta} \vert}\),而原式没有加绝对值,说明当 \(h_{\mathbf{\theta}}(\mathbf{x}) = 1\) 时,即 \(\mathbf{x}\) 为正类样本点时,我们还限制其在超平面上方,反之亦然。注意这里的上方是指 \(\mathbf{x} - \mathbf{x}_0\) 与超平面法向量 \(\mathbf{\theta}\) 的夹角为锐角。

所以若设 \(d = \dfrac{1}{\vert \mathbf{\theta} \vert}\),那么显然,最终训练出的分布应该是用一个超平面将正类和负类分开,并且这个超平面距离所有数据点的距离均要大于等于 \(d\)。在二维平面上就是下图的黑线:

img

我们也称 \(d\) 为 SVM 的 margin。

我们再看代价函数的前一部分:

\[C \bigg[ \sum_{i = 1}^m y^{(i)} \max(0, -\mathbf{\theta}^{\mathbf{T}} \mathbf{x}^{(i)} - \theta_0) + (1 - y^{(i)}) \max(0, \mathbf{\theta}^{\mathbf{T}} \mathbf{x}^{(i)} + \theta_0) \bigg] \]

我们可以这样理解这个代价函数,即当一个数据为正类的时候,如果该数据点在我们当前由 \(\mathbf{\theta}\) 和 \(\theta_0\) 决定的超平面的下方的话,我们就会惩罚这个函数模型,反之亦然。而前面的常数 \(C\) 也表明了这样的惩罚最终被落实下来是多少。

下图表明了 \(C\) 的作用,如果我们将图中蓝色的圈看作一个正类数据,红色的叉看作负类数据,一开始我们的数据集没有左下角的那个负类数据时,我们训练出的 SVM 大概是黑线,但是如果我们向数据集添加了那个左下角的负类数据后,重新训练 SVM,这时候训练的结果就会受到 \(C\) 的影响。如果 \(C\) 过大,那么模型就会仅仅因为有一个负类数据点被分到了正类里面,而得到很大的惩罚,迫使其将训练结果调整为紫红色的线。反正若 \(C\) 较小,那么模型就不会过于受到这仅仅一个点的影响,最终的结果仍然和黑线接近。

img

如果数据是近似线性可分的,那么最终得到的 \(\mathbf{\theta}, \theta_0\) 会使得代价函数前一部分的值不会太大,可以近似看作 0,进而代价函数的后一部分就需要重点考虑,即:

\[\frac{1}{2} \sum_{j = 1}^n \theta_j^2 \]

不难发现,其就是 \(\frac{1}{2} \vert \mathbf{\theta} \vert^2\),我们使它最小化,也就是使得 \(\vert \mathbf{\theta} \vert\) 最小化,进而使 \(d = \frac{1}{\vert \mathbf{\theta} \vert}\) 最大化。也就是说我们的代价还是在保证正负类在被分到平面的两侧的同时,还在使得间隔 \(d\) 尽可能大。这就是 SVM 的模型。

虽然 SVM 使用简单的超平面来分类,但是即使在实际情况中许多问题都不是线性可分的,SVM 仍然能做的很好。

2. 核函数

标签:SVM,mathbf,vert,笔记,学习,超平面,theta,函数
From: https://www.cnblogs.com/Nickel-Angel/p/17388824.html

相关文章

  • 《人月神话》阅读笔记03
    “软件项目开发的完成与增加人员的问题”这句话听起来通俗易懂,但实现起来却遇到了相当大的困难,这是我在阅读完成《人月神话》时最大的感受,我想这种问题的出现主要是就订单项目而言,因为人员的增加主要是因为客户所要求实现的东西并没有在计划的时间内收到满意的答复和应得的功能与......
  • java笔记_10_文件压缩Zip并加密(Zip4j)
    1、添加依赖Maven仓库地址:https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j<!--压缩--><dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId>......
  • OpenResty学习笔记03:再探WAF
    一.再谈WAF 我们上一篇安装的WAF来自另一位技术大神赵舜东,花名赵班长,一直从事自动化运维方面的架构设计工作。阿里云MVP、华为云MVP、中国SaltStack用户组发起人、新运维社区发起人。虽然并非安全专业出身,但根据他的自述,边学边写,只用了几天的时间就将WAF写出来了,并于2016......
  • httprunner 4.x学习 - 12. 测试用例引用前面一个用例testcase
    前言当登录用例写完后,后面想继续写其他用例,可以导入前面的login用例,当成下个用例的步骤使用导入前一个用例之前,需先export导出变量,变成全局变量。登录用例在testcase下新建一个test_login.yml文件,用于测试登录成功接口信息testcase/test_login.ymlconfig:name:测试登......
  • Fine-Grained学习笔记(5):(min+)卷积及背包问题的复杂度归约理论
    (min,+)卷积问题:给定$a_0,\cdots,a_{n-1},b_0,\cdots,b_{n-1}$,计算$c_k=min_i(a_i+b_{k-i})$全局决定性问题版本:给定$a_0,\cdots,a_{n-1},b_0,\cdots,b_{n-1}$,$c_0,\cdots,c_{2n-2}$,对于所有$k$,判断是否$\existsi,a_i+b_{k-i}<c_k$单解问题版本:给定$a_0,\cdots,a_......
  • 每天进步一点点-学习程序暂停的方法
    #!/usr/bin/envpython#-*-coding:utf-8-*-foriinrange(100):ifi>20:print(f"进入暂停流程:{i}--->")#暂停方式1importosos.system("pause")#按enter后执行下一条,然后又满足条件暂停#暂停方式2#......
  • 【机器学习之 朴素贝叶斯】6.1 贝叶斯分类器
    文章目录6.朴素贝叶斯6.0贝叶斯决策论6.0.1简介6.0.2贝叶斯解决的问题-逆概6.1.3先验概率和后验概率1)条件概率2)先验概率3)后验概率4)例子介绍6.0.4贝叶斯定理1)公式2)出现原因(逆概问题)6.0.5例子2)例一3)例二4)例三6.0.6全概率6.1贝叶斯分类器6.1.1贝叶斯判......
  • 莫比乌斯反演学习笔记(内涵反演详细推导和证明!)
    莫比乌斯反演前言记得上次学这个东西已经是一年前了,题到没有做过几道……一些有趣的东西莫比乌斯这个人还是很nb的,相信大家都听说过莫比乌斯带,就是他发现的,跟所有数学大佬一样的,他还喜欢天文学和物理废话不扯多了前置知识整除分块一个在数论计算中异常常见的东西,一般和......
  • ubuntu 如何在笔记本电脑合上之后不休眠
    原文地址https://askubuntu.com/questions/15520/how-can-i-tell-ubuntu-to-do-nothing-when-i-close-my-laptop-lid#:~:text=How%20to%20Turn%20Off%20the%20Laptop%20Lid%20in,will%20log%20you%20off%29%20with%20this...%20See%20More.修改配置文件:sudo-Hgedit/etc/sys......
  • 学习日记——表单
    1.表单的定义①以表格的形式展现多个输入框(单),常用于网页中的注册和登录功能。②表单的元素属性:<inputtype=""name=''value=""/>input:表单元素type:input元素类型name:input元素名称,是提交到服务器的key,不展现在形式上value:input元素的值,所见即所得③代码结构如下:......