机器学习学习笔记(十)—— 支持向量机(SVM)

本文深入解析支持向量机(SVM),对比逻辑回归和神经网络,阐述SVM在处理复杂非线性问题时的强大能力。介绍了SVM的工作原理,包括最大间距分类器的概念,核函数的应用,以及如何选择合适的参数和核函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支持向量机(Support Vector Machine):

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

先来看假设函数:

if y=1, we want h_{\theta}(x)\approx 1\theta^{}Tx\gg 0.

if y=0, we want h_{\theta}(x)\approx 0\theta^{}Tx\ll 0.

那么类似的代价函数:

Cost_{1}(z):

Cost_{0}(z):

我们根据逻辑回归的代价函数变形得到SVM的代价函数:

Logistic regression:

SVM: 

相当于式子乘上了\frac{m}{\lambda}, 对于求全局最小值没有影响,那么C=\frac{1}{\lambda}.

 

那么假设函数定义为:

 

宏观上了解SVM的工作机制:

SVM会优先寻找一个最大间距的分类器,如下图黑线,那么其与蓝线的间距被称为margin .

 

为什么SVM总是寻找最大间距:

向量内积(vector inner product):

现在有两个向量u、v:

u和v的内积,即u^{T}v.

定义 \left \| u \right \|(范数符号)表示向量u的长度, 那么

\left \| u \right \|=\sqrt{u_{1}^{2}+u_{2}^{2}}\in \mathbb{R}

p表示向量v在u上的投影长度(可能是负实数).得到:

u^{T}v=u_{1}v_{1}+u_{2}v_{2}=p\cdot \left \| u \right \|

下面通过一个例子来理解SVM求解最大间距的过程,当C特别大,那么在求解min_{\theta}时代价函数第一部分会尽量被计算为0,那么代价函数求解问题就可以看作:

如果从简单问题入手,\theta\in \mathbb{R}^{2},那么:

min_{\theta}\frac{1}{2}\sum_{j=1}^{n}\theta_{j}^{2}=\frac{1}{2}(\theta_{1}^{2}+\theta_{2}^{2})=\frac{1}{2}(\sqrt{\theta_{1}^{2}+\theta_{2}^{2}})^{2}

=min_{\theta}\frac{1}{2}\left \| \theta \right \|^{2}, 如果\theta\in \mathbb{R}^{n}也同理。

s.t.(subject to/约束条件):

\theta^{T}x\geqslant 1\Leftrightarrow p^{(i)}\cdot \left \| \theta \right \|\geqslant 1, if: y^{(i)}=1

\theta^{T}x\leqslant -1\Leftrightarrow p^{(i)}\cdot \left \| \theta \right \|\leqslant -1, if: y^{(i)}=0

\theta^{T}xp^{(i)}\cdot\left \| \theta \right \|的图像意义: 

对于不是最大margin的分类器,p^{(i)}相对较小,\left \| \right\theta \|相对较大:

对于SVM找到的最大margin的分类器,相对上图p^{(i)}更大,\left \| \rig\theta \|更小,对于求最小theta问题显然更优:

 

 

 

核函数(kernels):

核函数可以用来构造复杂的非线性方程。 

先来看一个简单的变换,一个多项式特征变量:

\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}+\theta_{3}x_{1}x_{2}+\theta_{4}x_{1}^{2}+\theta_{5}x_{2}^{2}...

变为:

\theta_{0}+\theta_{1}f_{1}+\theta_{2}f_{2}+\theta_{3}f_{3}+\theta_{4}f_{4}+\theta_{5}f_{5}...(f_{1}=x_{1},f_{2}=x_{2},f_{3}=x_{1}x_{2},f_{4}=x_{1}^{2},f_{5}=x_{2}^{2})

高斯核函数(相似度函数/Gaussian Kennels):

f_{i}=similarity(x,l^{(i)})=k(x,l^{(i)})=exp(-\frac{\left \| x-l^{(i)} \right \|^{2}}{2\sigma ^{2}})

=exp(-\frac{\sum_{j=1}^{n}(x_{j}-l_{j}^{(i)})^{2}}{2\sigma ^{2}})

给出x,如果x接近l^{(i)},那么f^{(i)}接近1,否则接近0,即:

if: x\approx l^{(i)},f_{i}\approx exp(-\frac{0}{2\sigma ^{2}}) \approx 1

if : x is far from l^{(i)}f_{i}\approx exp(-\frac{large number^{2}}{2\sigma ^{2}}) \approx 0

现在来看看\sigma ^{2}对核的影响:

一个三个标记点的分类器举例:

如此,标记点更多时,还会构成更复杂的分类器。实际上我们会把每一个训练样本作为一个标记点。

 

最终的代价函数:

给定训练集:(x^{(1)}, y^{(1)})...(x^{(m)}y^{(m)})

选定:l^{(1)}=x^{(1)}...l^{(m)}=x^{(m)}

for training example: (x^{(i)}y^{(i)}), x^{(i)}\in \mathbb{R}^{n+1}:

Hypothesis: given x, compute features f\in \mathbb{R}^{m+1}, f^{(i)}_{0}=1, also \theta\in \mathbb{R}^{m+1}

进一步转化代价函数:

 

 

如何选择参数:

 

总结SVM计算过程:

1.选择一个软件包(e.g. liblinear,libsvm,...)来计算SVM。

2.选择参数C。

3.选择一个核函数(相似度函数)。例如高斯核,或者没有核(也叫线性核,if y=1,直接就是\theta^{T}x\geqslant 0).

当n很大,m很小,偏向于选择线性核,因为在没有足够多的训练数据的时候,会导致过度拟合。

当n较小,m很大,偏向于选择高斯核,高斯核在拟合一个复杂的非线性判定边界时会很有用。

不是所有的函数都可以作为核函数并使得核函数都有用,首先需要满足莫塞尔定理。 

还有其它很多中核函数可供选择:

polynomial kernel(多项式核函数), string kernel(字符串核函数), chi-square kernel(卡方核函数), histogram intersection kernel(直方图交叉核函数),...

4.如果是高斯核,还需要选择一个\sigma^{2}.

5.对输入x归一化。

与逻辑回归问题一样,如果有K个分类,那么就要训练K个SVM分类器。

 

如何选择使用逻辑回归还是使用SVM:

if n is large (relative to m): e.g. n >= m, n=10000, m=10/1000

use logistic regression, or SVM without a kernel("linear kernel")

if n is small, m is intermediate: e.g. n=1~1000, m=10~10000

use SVM with gaussian kernel.

if n is small, m is large: e.g. n=1~1000, m=50000~1000000+

create/add more features, then use logistic regression, or use SVM without a kernel.

在最后这种情况,使用逻辑回归和SVM无核是相似的,SVM的优势需要随着核函数的选择而发挥出来。

最后,神经网络的效果可能比以上选择会更好,但是其一个缺点就是训练过程比SVM慢很多,而且不一定是全局最小(虽然局部最小也很接近,而且可以多次训练缓解问题),但是SVM总是能找到全局最小。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值