支持向量机(support vector machine)作为一种流行了足足十多年的机器学习算法,其拥有的可解释性,常常在面试中被用来考察面试者对于机器学习算法的理解。对于支持向量机的介绍、深入理解的书籍、论文和文章多如牛毛,其中不乏大牛的著作,本文并不会详细阐述SVM的详细推导过程,而是试图从SVM的出现、发展、演变过程来提炼出一套对于发明机器学习算法的一般思路。对于本文来说,SVM的提出过程中,重要的并不是SVM本身,而是在这个过程中给人们的启示。本文要求读者对于SVM和其他的机器学习算法有一定的认识。
首先简要阐述一下SVM的流程。对于给定的数据集D,假设存在一个分离超平面
w
x
+
b
=
0
wx+b=0
wx+b=0可以在这个超平面上将正负样本分开(这里只考虑二分类问题),易知对于正样本
w
x
+
b
>
0
wx+b>0
wx+b>0,负样本
w
x
+
b
<
0
wx+b<0
wx+b<0,那么我们的分类决策函数为
f
(
x
)
=
s
i
g
n
(
w
x
+
b
)
f(x) = sign(wx+b)
f(x)=sign(wx+b)。我们选择使正负样本的label分别为+1和-1,那么我们可以通过分类决策函数与样本label的符号是否一致来判断对当前样本的分类是否正确,即使用
y
i
(
w
x
i
+
b
)
y_i(wx_i+b)
yi(wxi+b)的正负来表示分类正确与否,绝对值表示分类的确信度(实质为样本点到分类超平面的距离,越远越好)。
现在我们有了分类超平面,可是符合条件的超平面是无穷无尽的,我们需要找到一个最优的分类超平面,那么在所有符合条件的超平面中,什么样的才是最优的呢?参考其他分类模型,决策树中ID3和C4.5都是选择使得结点切分后信息增益最大化,增大信息量的过程实际上是一个熵减的过程,也是一个减少不确定性的过程,换言之,使得节点划分后能够在当前的所有划分可能性中每一个子结点中的类别数尽可能少。类似的,CART算法选择使用基尼指数最小化作为数的生成准则,一个或者多个数据集或者数据子集的基尼指数表示了这个数据集或者数据子集中样本类别的纯度,换言之,也是希望结点划分后的子结点中尽量含有少的样本种类。对于knn算法来说,样本之间的距离成为度量样本是否是同一类别可能的指标。对于LDA来说更是如此,它将样本投影到一条直线上,要求同类样本的距离尽可能小,同时不同类样本之间的距离尽可能大。而对于朴素贝叶斯来说,计算的则是最大后验概率,作为一种生成模型,它需要估计样本的分布的先验概率,条件概率,选择最有可能的输出作为最终的输出。由此可见,这里SVM的分离超平面需要在将正负样本划分正确的情况下,使不同类别的样本尽可能远离此分类超平面,已达到足够大的分类正确置信度。
继续分析,在确定了分类超平面之后,假设正负样本已经被正确的分割在平面两边,那么所有样本与分类超平面的距离可能有近有远,我们只要使得距离最近的正负样本之间的距离最大就能够以足够高的置信度分割开。这里我们设距离最近的正负样本分别为
x
+
x^+
x+和
x
−
x^-
x−,那么分别满足
w
x
+
b
=
1
,
w
x
−
+
b
=
−
1
wx^+b=1,wx^-+b=-1
wx+b=1,wx−+b=−1,则之间的距离为
w
(
x
+
−
x
−
)
∣
∣
w
∣
∣
\frac{w(x^+-x^-)}{||w||}
∣∣w∣∣w(x+−x−),化简即为
2
∣
∣
w
∣
∣
\frac{2}{||w||}
∣∣w∣∣2,此时我们得到优化目标,通过等价转换为最小化
∣
∣
w
∣
∣
2
2
\frac{||w||^2}{2}
2∣∣w∣∣2,使得
w
x
i
+
b
>
1
wx_i+b>1
wxi+b>1,即在满足正负样本都在支持向量之外的同时,最大化支持向量之间的距离,转换为一个凸二次规划问题,可以轻松使用凸优化相关知识解决。
综上所述,要提出一种新的分类算法,首先需要给出决策边界,进而给出决策函数,然后提出最优分类准则,转换为优化问题进行求解。SVM的时间复杂度为
O
(
N
)
3
O(N)^3
O(N)3,可以看做一种损失函数为hinge loss、只有一层的神经网络,可以使用tf、Keras轻松实现。不同的机器学习模型拥有不同的决策边界,比如决策树的决策边界平行于坐标轴,神经网络的决策边界是非线性的。
然而我认为SVM最重要的是其提出的核方法,几乎完美巧妙的解决了SVM对于高维数据线性不可分的情况,由此可以一窥数学的美妙。而核方法也不仅仅局限于SVM,更是作为一种独立的方法在其他方面大放异彩。此处简单探讨一下关于核方法。在对上述我们得到的优化目标利用拉格朗日乘子法进行优化求解之后,将得到的
w
∗
w^*
w∗带入到拉格朗日函数中,得到一个优美的公式,代入到决策函数中,也得到一个优美的公式,在这两个及其重要的式子中都出现了内积。本来对于线性不可分的情况,我们需要寻找映射函数将输入空间映射到高维特征空间,在进行运算,而这个映射函数很难寻找,现在我们假设了映射函数,并在高维空间计算其内积,实际上我们不需要知道这个映射函数,而是使用核方法直接模拟其映射和内积两步运算,即免除了寻求映射函数的步骤,又免除了在高维空间进行计算内积的步骤。比如,映射函数将输入从低维空间(如二维空间)变换到高维空间(如无穷维),之后通过点乘运算求得一个实数,相当于回到了一维空间(?)。下面给出核的定义:核定义为从低维到高维变换后样本两两点乘的结果。
支持向量机学习笔记
最新推荐文章于 2022-07-15 17:22:27 发布