参考:
时间原因, 本文内容搬运Guide on Support Vector Machine(SVM) Algorithm, 使用有道翻译机翻. 通过理解该文章中算法的推导, 我认为Support Vector Machine应该翻译为辅助向量机, 而不是支持向量机. 因为算法推导过程中使用的 x 1 x_1 x1和 x 2 x_2 x2是用来计算边际距离 d d d的辅助向量. 就像常规几何问题中常用的辅助线.
(以下内容为搬运内容, 下述文中的"我"是老外博主)
Introduction
支持向量机是一种强大的监督算法,在较小的数据集上效果最好,但在复杂的数据集上效果最好。支持向量机,简称SVM,既可以用于回归任务,也可以用于分类任务,但一般来说,它们在分类问题上效果最好。它们在20世纪90年代被创造出来的时候非常有名,并且一直是经过一点调整的高性能算法的首选方法。
到目前为止,我希望你已经掌握了决策树、随机森林、Naïve贝叶斯、k近邻和集成建模技术。如果没有,我建议你也花几分钟读一下。
在本文中,我将向您解释什么是SVM, SVM算法是如何工作的,以及这个关键ML算法背后的数学直觉。
这篇文章是作为数据科学博客马拉松的一部分发布的!
什么是支持向量机?
这是一个有监督的机器学习问题,我们试图找到一个超平面,最好地分离这两个类。注意:不要混淆SVM和逻辑回归。这两种算法都试图找到最佳的超平面,但主要区别在于逻辑回归是一种概率方法,而支持向量机是基于统计方法。
现在的问题是它会选择哪个超平面?可以有无数个超平面经过一个点,并将这两个类完美地分类。那么,哪一个是最好的呢?
支持向量机通过找到超平面之间的最大边界来实现这一点,这意味着两个类之间的最大距离。
逻辑回归vs支持向量机
根据特征的数量,你可以选择逻辑回归或支持向量机。
支持向量机在数据集小而复杂的情况下效果最好。通常建议首先使用逻辑回归,看看它的性能如何,如果它不能提供良好的精度,您可以使用没有任何核的SVM(将在后面的部分中讨论更多关于核的内容)。逻辑回归和支持向量机没有任何核具有相似的性能,但取决于您的特征,一个可能比另一个更有效。
支持向量机算法的类型
-
线性支持向量机
只有当数据是完全线性可分时,我们才可以使用线性支持向量机。完全线性可分意味着数据点可以用一条直线(如果是2D)分为两类。 -
非线性支持向量机
当数据不可线性分离时,我们可以使用非线性支持向量机,这意味着当数据点不能用直线(如果是2D)分成两类时,我们使用一些高级技术,如核技巧来对它们进行分类。在大多数实际应用中,我们找不到线性可分的数据点,因此我们使用核技巧来解决它们。
重要术语
现在让我们定义两个主要术语,这将在本文中反复出现:
支持向量:这些是离超平面最近的点。在这些数据点的帮助下,将定义一条分隔线。
边界:它是超平面和最接近超平面的观测值(支持向量)之间的距离。在支持向量机中,大的余量被认为是好的余量。有两种类型的保证金硬保证金和软保证金。我将在后面的部分中详细讨论这两个问题。
支持向量机是如何工作的?
SVM被定义为仅根据支持向量来定义,我们不必担心其他观察结果,因为边界是使用最接近超平面(支持向量)的点来创建的,而在逻辑回归中,分类器是在所有点上定义的。因此SVM有一些自然的加速。
让我们通过一个例子来理解SVM的工作原理。假设我们有一个数据集,它有两个类(绿色和蓝色)。我们想要将新数据点分类为蓝色或绿色。
为了对这些点进行分类,我们可以有许多决策边界,但问题是哪一个是最好的,我们如何找到它?注意:由于我们是在二维图中绘制数据点,所以我们称这个决策边界为直线,但如果我们有更多的维度,我们称这个决策边界为“超平面”。
最佳超平面是与两个类之间的距离最大的平面,这是支持向量机的主要目标。这是通过寻找不同的超平面来完成的,这些超平面以最好的方式对标签进行分类,然后它会选择离数据点最远的那个或有最大边界的那个。
支持向量机背后的数学直觉
许多人忽略了这个算法背后的数学直觉,因为它很难消化。在本节中,我们将尝试理解底层工作的每一个步骤。支持向量机是一个广泛的话题,人们对该算法的研究仍在进行中。如果你打算做研究,那么这里可能不适合你。
在这里,我们将只理解实现该算法所需的那一部分。你们一定听说过原始公式,对偶公式,拉格朗日乘数等等。我并不是说这些话题不重要,但如果你打算在这个领域做研究,它们就更重要了。让我们来看看这个算法背后的魔力。
在进入这个主题的细节之前,让我们先了解点积是什么。
理解点积
我们都知道矢量是一个有大小和方向的量,就像数字一样,我们可以使用加法、乘法等数学运算。在本节中,我们将尝试学习向量的乘法,它可以用两种方法来完成,点积和叉积。区别只是点积被用来得到一个标量值作为结果,而叉积被用来再次得到一个向量。
点积可以定义为一个向量与另一个向量的投影,乘以另一个向量的乘积。
这里a和b是两个向量,为了求出这两个向量的点积我们首先求出这两个向量的大小为了求出大小我们用勾股定理或者距离公式。
求出大小后,我们只需将它与两个向量之间的余弦角相乘。数学上可以写成:
A
⋅
B
=
∣
A
∣
c
o
s
θ
⋅
∣
B
∣
\mathsf A\cdot \mathsf B=|\mathsf A| cos\theta \cdot \mathsf |B|
A⋅B=∣A∣cosθ⋅∣B∣
这里
∣
A
∣
c
o
s
θ
|\mathsf A| cos\theta
∣A∣cosθ是向量
A
\mathsf A
A在
B
\mathsf B
B上的投影
现在在支持向量机中我们只需要
A
\mathsf A
A的投影而不是
B
\mathsf B
B的大小,稍后我会告诉你们为什么。为了得到投影我们可以简单地取
B
\mathsf B
B的单位向量因为它在
B
\mathsf B
B的方向上但是它的大小是
1
1
1。因此,现在方程变成了:
A
⋅
B
=
∣
A
∣
c
o
s
θ
⋅
u
n
i
t
v
e
c
t
o
r
o
f
∣
B
∣
\mathsf A\cdot \mathsf B=|\mathsf A| cos\theta \cdot \mathsf{unit\ vector\ of}\mathsf |B|
A⋅B=∣A∣cosθ⋅unit vector of∣B∣
现在让我们进入下一部分,看看我们将如何在SVM中使用它。
点积在支持向量机中的应用
考虑一个随机点X,我们想知道它是在平面的右侧还是左侧(正的还是负的)。
首先我们假设这个点是向量(X)然后我们做一个向量(w)它垂直于超平面。假设向量w从原点到决策边界的距离是c。现在我们求X向量在w上的投影。
我们已经知道任意向量的投影或者其他向量的投影叫做点积。因此,我们取x和w向量的点积。如果点积大于c,那么我们可以说该点在右边。如果点积小于c,则该点位于左侧,如果点积等于c,则该点位于决策边界上。
X
→
⋅
w
→
=
c
\overrightarrow X\cdot \overrightarrow w =c
X⋅w=c(点在边界线上)
X
→
⋅
w
→
>
c
\overrightarrow X\cdot \overrightarrow w >c
X⋅w>c(线右侧,positive samples)
X
→
⋅
w
→
<
c
\overrightarrow X\cdot \overrightarrow w <c
X⋅w<c(线左侧,negative samples)
你一定有疑问为什么我们要取这个垂直向量w到超平面?我们想要的是向量X到决策边界的距离边界上可以有无限个点来测量距离。这就是为什么我们得到标准,我们简单地取垂线,把它作为参考然后取所有其他数据点在这个垂直向量上的投影然后比较距离。
在支持向量机中,我们也有边际的概念。在下一节中,我们将看到如何找到超平面的方程,以及我们在SVM中需要优化什么
支持向量机的边际
我们都知道超平面的方程是w.x+b=0其中w是超平面的法向量b是一个偏移量。
为了将一个点划分为负或正,我们需要定义一个决策规则。我们可以将决策规则定义为:
X
→
⋅
w
→
−
c
≥
0
\overrightarrow X\cdot \overrightarrow w -c \ge 0
X⋅w−c≥0
令
b
=
−
c
b=-c
b=−c,得到:
X
→
⋅
w
→
+
b
≥
0
\overrightarrow X\cdot \overrightarrow w +b \ge 0
X⋅w+b≥0
于是有:
y
=
{
+
1
if
X
→
⋅
w
→
+
b
≥
0
−
1
if
X
→
⋅
w
→
+
b
<
0
y=\begin{cases} +1&\text{if } \overrightarrow X\cdot \overrightarrow w +b \ge 0\\ -1&\text{if } \overrightarrow X\cdot \overrightarrow w +b < 0\\ \end{cases}
y={+1−1if X⋅w+b≥0if X⋅w+b<0
如果w.x+b>0的值,那么我们可以说它是一个正点,否则它是一个负点。现在我们需要(w,b)使得边有一个最大距离。我们设这个距离是d
为了计算d,我们需要L1和L2的方程。为此,我们将做一些假设,L1的方程是w.x+b=1, L2的方程是w.x+b=-1。
现在问题来了
- 为什么大小相等,为什么不取1和-2?
- 为什么我们只取1和-1,为什么不取其他值,比如24和-100?
- 我们为什么要假设这条线?
让我们试着回答这些问题
- 我们想让平面到这两类物体的距离相等这意味着L应该经过L1和L2的中心这就是为什么我们取大小相等。
- 假设超平面的方程是2x+y=2,我们观察到,即使我们将整个方程与其他数字相乘,直线也不会改变(试着在图上作图)。因此,为了数学上的方便,我们取它为1。
- 现在主要的问题是为什么我们只需要假设这条线?为了回答这个问题,我将尝试借助图表。
假设超平面方程为2x+y=2:
我们来为这个超平面创建边距,
如果你把这些方程乘以10,我们会看到平行线(红色和绿色)越来越接近超平面。看下面这张图
我们还观察到如果把这个方程除以10这些平行线就会变大。看这张图
通过这个,我想告诉你们平行线取决于超平面的(w,b)如果我们在超平面方程中乘以一个大于1的因子那么平行线就会缩小如果我们在超平面方程中乘以一个小于1的因子,它们就会扩大。
我们现在可以说这些线会随着(w,b)的变化而移动这就是优化的方式。但是最优化函数是什么呢?我们来计算一下。
我们知道支持向量机的目标是最大化这个距离(d)。但是这个距离(d)的约束很少。让我们看看这些约束是什么。
优化函数及其约束
为了得到我们的优化函数,需要考虑的约束很少。这个约束是“我们将以这样一种方式计算距离
d
d
d,即没有正负点可以越过边界线”。让我们用数学方法来写这些约束:
对于所有红色的点
X
→
⋅
w
→
+
b
≤
−
1
对于所有绿色的点
X
→
⋅
w
→
+
b
≥
1
\text{对于所有红色的点 } \overrightarrow X\cdot \overrightarrow w +b \le -1\\ \text{对于所有绿色的点 } \overrightarrow X\cdot \overrightarrow w +b \ge 1\\
对于所有红色的点 X⋅w+b≤−1对于所有绿色的点 X⋅w+b≥1
现在,我们将尝试将这两个约束简化为一个,而不是将两个约束向前推进。我们假设负类(negative classes)的
y
=
−
1
y=-1
y=−1正类(positive classes)的
y
=
1
y=1
y=1。
我们可以说,对于每一个被正确分类的点,这个条件应该总是成立的:
y
i
(
w
→
⋅
X
→
+
b
)
≥
1
y_i( \overrightarrow w\cdot \overrightarrow X +b) \ge 1
yi(w⋅X+b)≥1
假设一个绿色点被正确分类,这意味着它将遵循 w . x + b ≥ 1 w.x+b\ge1 w.x+b≥1,如果我们将它与y=1相乘,我们得到与上面提到的相同的方程。同样地,如果我们在y=-1的红点上做这个,我们会得到这个方程。因此,我们可以说,我们需要最大化(d),以使这个约束成立。
我们取两个支持向量,一个来自负类,另一个来自正类。这两个向量x1和x2之间的距离就是(x2-x1)向量。我们需要的是,这两点之间的最短距离可以用点积中的技巧求出来。我们取一个垂直于超平面的向量w然后求向量(x2-x1)在w上的投影。注意: 这个垂直向量应该是一个单位向量,只有这样才能成立。为什么这是单位向量?这在点积部分已经解释过了。为了使w成为单位向量我们将它除以w的范数。
用点积求一个向量在另一个向量上的投影
我们已经知道如何求一个向量在另一个向量上的投影。我们通过两个向量的点积来做。我们来看看怎么做
由于x2和x1是支持向量,它们位于超平面上,因此它们遵循
y
i
∗
(
2
⋅
x
+
b
)
=
1
y_i* (2\cdot x+b)=1
yi∗(2⋅x+b)=1 ,因此我们可以将其写成:
将式(2)和式(3)代入式(1)可得:
因此我们要求最大值的方程是
我们现在已经找到了我们的优化函数,但是这里有一个问题,我们在工业中没有找到这种完全线性可分的数据,几乎没有任何情况下我们得到这种类型的数据,因此我们不能使用我们在这里证明的这个条件。我们刚刚学习的问题叫做硬边际支持向量机,还有一个优化函数叫做软边际支持向量机,它和这个很相似,但是在软边际支持向量机中有一些更有趣的技巧。