第一次写博客~~
暑假要到了 >-<! 深知自己本性懒惰迫不得已得想个办法保持继续学习的状态,听说写博客是个挺有趣的过程?那就来试试吧~不得不提一句,这是一个学习过程绝对不是完全正确的攻略,所以一起以初学者角度能加深理解就好啦。并且在学习新知识的时候不习惯一上来就面对一堆专有名词,一直觉得在完全理解后再看专有名词会有深刻体会并日后用来交流,所以下面一些定义有些是我瞎起的名字。。。
今天的学习内容
那么,今天要学习的就是SVM。
可以说几乎所有监督学习的任务都是想要确定一个决策边界,那么SVM也不例外。随之产生几个疑问如下:
- 它可以对什么样的数据进行分类?
- 它的决策边界是长什么样子的?
- 这个决策边界应该怎样获得?
- 它的技术难点会在哪里?
问题引入
基于以上几个问题,开始学习。
在网上查阅资料了解到支持向量机针对的是线性二分类问题,举个最简单的例子如下图:
相信大多数人都会觉得蓝色直线比红色直线划分的更好,因为它看起来更加“普世”,对正负样本的划分安全性更高,也就是说泛化能力更强。记住这个感觉,这就是接下来确定这条蓝色直线的依据。
一般直线表示为:
y
=
w
x
+
b
.
y= wx+b.
y=wx+b.
怎样才可以根据数据集来获得参数
w
w
w 和
b
b
b ?那就是要依赖一开始的感觉——寻找泛化能力最强的,对于二分类问题,指的就是兼顾双方。如下图:
可以看到由两条虚线和在中间的一条直线组成了一条较宽的分隔带(分离边缘),它是对称的所以兼顾双方,可以很直观的感受到分隔带越宽越好。首先,假设直线
y
y
y 的两个参数已知,那么与该直线垂直的向量
β
\beta
β 也可以得到。在这些参数已知的情况下要判断一个数据的类别,要做的就是将未知数据构成的向量投影在向量
β
\beta
β 上,并利用该长度与原点到蓝色直线(决策边界)的垂直距离比较进行判断。(图中深红色线,因为未知样本向量的投影长度小于垂直距离所以被判定为负样本)
将未知样本向量定义为
x
i
x_{i}
xi,原点到决策边界的垂直距离定义为
c
c
c,正负样本的标签
y
i
y_{i}
yi 分别定义为
1
1
1 与
−
1
-1
−1,可以得到如下决策公式:
y
i
=
{
1
,
β
⋅
x
i
‾
≥
c
−
1
,
β
⋅
x
i
‾
≤
c
y_{i} = \begin{cases} 1, & \text{$\beta \cdot \overline{x_{i}} \geq c$} \\ -1, & \text{$\beta \cdot \overline{x_{i}} \leq c$} \end{cases}
yi={1,−1,β⋅xi≥cβ⋅xi≤c
那么到现在为止,我们希望的是能够确定决策边界的两个参数
w
w
w 和
b
b
b ,并且
L
L
L (分隔带的宽度)越宽越好。在训练集中,这就转化成了一个优化问题,两个参数为决策变量,
L
L
L 为约束条件。
如何训练
现在问题变成了如何在训练集中解决一个优化问题。
在训练集中,我们要找到这条决策边界并且要体现出分离边缘的概念,那么所需公式如下:
{
β
⋅
x
i
‾
≥
c
+
1
,
y
i
=
1
β
⋅
x
i
‾
≤
c
−
1
,
y
i
=
−
1
\begin{cases} \beta \cdot \overline{x_{i}} \geq c+1, & \text{$y_{i}=1$} \\ \beta \cdot \overline{x_{i}} \leq c-1, & \text{$y_{i}=-1$} \end{cases}
{β⋅xi≥c+1,β⋅xi≤c−1,yi=1yi=−1
这个公式和决策公式的差别在于多了一个
1
1
1,并且该公式是为了确定决策公式的参数。在我看来这个
1
1
1 意义,首先是要体现出分离边缘这个东西,没有
1
1
1 的话只表示一条线。其次,为什么是
1
1
1 而不是其他的数字,那原因可能在于我们的目的是确定向量
β
\beta
β 以及常数
c
c
c,我们都知道一个向量有着无数的表示方式,再配合一个常数不出意外是可以任意调节的。在这里大胆猜测就算写成任何数字都是可以算的。(如果不是我再回来偷偷改正)
说的这些让我感觉上面的公式仅仅是指明了决策边界与分离边缘的一般形式,真正的约束条件是我们最初的感觉也就是分离边缘的宽度
L
L
L。在这里又遇到两个问题:
- 这个真正的约束条件怎么表达?
- 就算写出了约束条件,那目标函数是啥,有两个决策变量难道是多目标优化?多目标优化可不一定有绝对最优解啊。
有了疑问又要寻找答案,首先这个约束怎么表达,如下如所示:
“支持向量机”,前面提了那么多向量,那支持在哪呢?这里就需要用到。与蓝色虚线相交的数据点他的向量就成为支持向量,有了这东西就可以用数学语言描述宽度
L
L
L,就像图中深红色表示的,两个不同标签的样本向量做差得到分离边缘内的向量,然后再投影到向量
β
\beta
β 方向上,那得到的就是
L
L
L。这时候好像又有疑问:
- 为啥就有数据点恰巧在两侧的虚线上?这虚线不是对称的么,讲道理没这么巧吧。(这个疑问还没解释)
这个疑问先放这,那我们先把刚才说的公式化就是:
L
=
(
x
+
‾
−
x
−
‾
)
⋅
β
∣
∣
β
∣
∣
L=(\overline{x_{+}}-\overline{x_{-}}) \cdot \frac{\beta}{|| \beta||}
L=(x+−x−)⋅∣∣β∣∣β
到此为止我们解释了第一疑问。
我们再把训练集中用到的想法写成一个公式表示的形式,如下(两公式同时乘
y
i
y_{i}
yi 就可以):
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
−
1
≥
0
y_{i} \cdot (\beta \cdot \overline{x_{i}}-c)-1\geq0
yi⋅(β⋅xi−c)−1≥0
这两个公式联立就可以得到一个看起来蛮有趣的结论(联立就好):
L
=
2
∣
∣
β
∣
∣
L=\frac{2}{||\beta||}
L=∣∣β∣∣2
看看这个东西,他告诉我们这个分离边缘居然和数据点没有关系!?仅仅与决策边界的法向量有关…还解决了第二个疑问。但这我是很难接受的,所以再大胆猜测一下。首先我们把一般化的模型给出(怎么写出来的大家结合上文):
m
i
n
1
2
⋅
∣
∣
β
∣
∣
2
s
.
t
.
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
−
1
≥
0
min\ \ \frac{1}{2} \cdot {||\beta||}^2\\ s.t.\quad y_{i} \cdot (\beta \cdot \overline{x_{i}}-c)-1\geq0
min 21⋅∣∣β∣∣2s.t.yi⋅(β⋅xi−c)−1≥0
可以看到目标函数是对向量
β
\beta
β 的模求最小,我们之前提到的只是方向,它的大小是不知道的或者说任意的,并且它可以无穷小代表着
L
L
L 无穷大。那么就会感觉得到约束条件是关键,而约束条件中涉及了数据集中的所有点。所以是不是可以说分离间隔是与所有数据点有关的。进一步,目标函数中法向量的模值可能是支持向量的一种表示方式而已,从这两条蓝色虚线的画出方式也就是从几何关系来看这种关系就已经固定了。总结来说,分析到这里的猜想就是:并不是直观感觉那样分离间隔与数据无关,而是与每个数据都有关系。
优化问题求解
到了这一步,我们的目的更加明确,就是要解上述的一般化模型。
该基本型是一个凸二次规划问题(这说明我们可以放心一定有解),可以采用拉格朗日乘子法对其对偶问题求解,
α
\alpha
α为每个约束的乘子,写为如下形式:
F
(
β
,
c
,
α
)
=
1
2
⋅
∣
∣
β
∣
∣
2
+
∑
α
i
[
1
−
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
]
F(\beta,c,\alpha)=\frac{1}{2} \cdot {||\beta||}^2+\sum \alpha_{i}[1-y_{i} \cdot (\beta \cdot \overline{x_{i}}-c)]
F(β,c,α)=21⋅∣∣β∣∣2+∑αi[1−yi⋅(β⋅xi−c)]
对两个未知参数
β
,
c
\beta,c
β,c 分别求偏导等于零即可得到:
β
∗
=
∑
α
i
y
i
x
i
‾
∑
α
i
y
i
=
0
\beta^{*} =\sum \alpha_{i} y_{i} \overline{x_{i}}\\ \sum \alpha_{i} y_{i} = 0
β∗=∑αiyixi∑αiyi=0
然后呢再把这结果代入朗格朗日函数:
m
a
x
∑
α
i
−
1
2
∑
∑
α
i
α
j
y
i
y
j
x
i
‾
x
j
‾
s
.
t
.
∑
α
i
y
i
=
0
,
α
i
≥
0
max \quad \sum \alpha_{i}-\frac{1}{2}\sum \sum \alpha_{i}\alpha_{j}y_{i}y_{j}\overline{x_{i}}\overline{x_{j}}\\ s.t. \quad \sum \alpha_{i} y_{i} = 0, \alpha_{i}\ge 0
max∑αi−21∑∑αiαjyiyjxixjs.t.∑αiyi=0,αi≥0
这里涉及拉格朗日对偶性,凸优化等知识,有点懒写不动了。(发现了一篇文章写得很好 点我点我)。这里涉及到一个比较重要的点还是要提一下,那就是KKT条件。笼统的说就是一个优化模型存在最优解时最优解需要满足的条件。
上面这个优化模型是我们推倒至今得到的,只要利用它去求解 α \alpha α 即可。(SMO算法用来求解这个向量,点这里完美衔接)
但是但是! 在你走之前还有个问题要讨论下:“我们前面说决策边界的确定是和训练集的所有数据相关”,在当时的学习过程原理理解应该是没有错的。但是如今我们将问题的优化模型不断等价转化真正用来求解的时候,又有了新的发现,或者说在从纯数学的角度来看待该问题就会得到一些意外的结论。将KTT约束写出如下:
{
α
i
≥
0
1
−
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
≤
0
α
i
⋅
[
1
−
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
]
=
0
\begin{cases} \alpha_{i} \ge 0\\ 1-y_{i} \cdot (\beta \cdot \overline{x_{i}}-c) \leq 0\\ \alpha_{i} \cdot [1-y_{i} \cdot (\beta \cdot \overline{x_{i}}-c)] = 0 \end{cases}
⎩⎪⎨⎪⎧αi≥01−yi⋅(β⋅xi−c)≤0αi⋅[1−yi⋅(β⋅xi−c)]=0
在这里第三个约束可以看出不是
α
i
\alpha_{i}
αi 等于
0
0
0 就是
[
1
−
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
]
[1-y_{i} \cdot (\beta \cdot \overline{x_{i}}-c)]
[1−yi⋅(β⋅xi−c)] 等于
0
0
0。要是
α
i
\alpha_{i}
αi 等于
0
0
0,那决策边界法向量
β
∗
\beta^{*}
β∗ 就要等于
0
0
0,那这意味着对决策边间无影响。而
α
i
\alpha_{i}
αi 大于
0
0
0,就要
[
1
−
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
]
[1-y_{i} \cdot (\beta \cdot \overline{x_{i}}-c)]
[1−yi⋅(β⋅xi−c)] 等于
0
0
0,也就是
y
i
⋅
(
β
⋅
x
i
‾
−
c
)
=
1
y_{i} \cdot (\beta \cdot \overline{x_{i}}-c)=1
yi⋅(β⋅xi−c)=1。那我们回顾在训练集中用到的公式(就是和
1
1
1 有关的那个),此时
α
i
\alpha_{i}
αi 对应的向量那指的就是虚线上数据点构成的向量,即支持向量。
终于,我们知道了SVM这东西只与支持向量有关。。。
学习参考
[1]. 机器学习第九期(网课),七月在线。(可不是打广告,有一次他们来我们学校推广送了我这课程就看了看)
[2]. 以及文中提到的两篇博客
那最后我也模仿下大佬写东西的感觉:
如需转载请注明出处:https://blog.csdn.net/ybybloom/article/details/94734848