支持向量机无痛入门

引子

所谓传统机器学习,在一部分情况下——特别是早些年——是在解决“用平面将两类点分开”的问题。我们之所以要解决这种问题,是因为它对应了现实生活中的某种问题。

比方说,如果我想找到自己的另一半,那么首先我需要学会在心里描述一个人。例如“ta是一个女性、喜欢音乐”这就是对一个人的描述,“女性”和“喜欢音乐”就是这个人的属性。如果有需要的话,我甚至可以将人抽象为一个数据点 $x = (x_1, x_2) $ ,其中 x 1 = − 1 x_1 = -1 x1=1 表示这个人是男人, x 1 = 1 x_1 = 1 x1=1 表示这个人是一个女人。 x 2 = − 1 x_2 = -1 x2=1 表示这个人不喜欢音乐, x 2 = 1 x_2 = 1 x2=1 表示这个人喜欢音乐。

这样,地球上的14亿人可以被抽象成具有平面直角坐标系的二维空间上的数据点。

如果你是一个归纳能力比较强的人,就会清楚自己喜欢哪个象限的数据点。但有些人的归纳能力不那么强,他只知道自己喜欢哪些点,不喜欢哪些点,不知道自己喜欢的点都聚集在空间中的什么位置(特别是当数据点不只有两个属性的时候)。这时候他就需要一条直线将他喜欢的点和不喜欢的点分开,然后在这条直线的某一侧寻找自己的另一半。当然,如果这个人能够将人抽象成具有n个属性的数据点时,他需要的就是一个多维平面了。这正是当前的AI擅长做的事。

这样看来,大家能否通过这种扭曲的方法找到自己的另一半,一方面取决于数据点的表达能力,即是否有足够多且质量高的属性来描述一个人;另一方面取决于能否在空间中找到那个神奇的多维平面。

背景

我们先看看能否在空间中找到那个神奇的多维平面。

假设多维空间中存在两类点,不同类别的两点间距离较远,而相同类别的两点间距离较近。并假设一定可以找到至少一个多维平面,使得一类点在这个平面的一侧,而另一类点在这个平面的另一侧。

当这样的假设成立时,通常可以找到许多能够将两类点分开的平面。现在我们想从这些平面中找到最特殊的一个,这个平面既能将两类点分开,又保证离它们远远的。例如,在二维空间中,若两个类别各仅有一个点时,连接两点的线段的平分线就是这样一个特殊的“平面”,既能将两点分开,又离它们尽可能的远。

这样的性质有一个好处,那就是一旦某个类别出现了新的点,由于那个特殊的平面距离这类点足够的远,在较大的可能性之下,新出现的点并不会破坏那个特殊平面的性质(能将两类点分开,并且离它们尽可能的远)。

描述

为了找到那个特殊的平面,我们先要明确描述多维平面的方法。

在二维空间内,我们可以用一个方程来描述直线:

a x + b y + c = 0 ax + by + c = 0 ax+by+c=0

在三维空间内,我们也可以用一个方程来描述平面:

a x + b y + c z + d = 0 ax + by + cz + d = 0 ax+by+cz+d=0

同样的,在多维空间,或者说在n维空间内,我们同样可以用一个方程来描述平面(多维平面有时被称为超平面):

w 1 x 1 + w 2 x 2 + ⋯ + w n x n + b = 0 w_1x_1 + w_2x_2 + \cdots + w_nx_n + b = 0 w1x1+w2x2++wnxn+b=0

我们都知道,借用向量可以使多维变量的描述变得更加紧凑。比方说我们可以用行向量 w T = ( w 1 w 2 … w n ) w^T = (\begin{matrix}w_1&w_2&\dots&w_n\end{matrix}) wT=(w1w2wn) 表示 w 1 , w 2 , … , w n w_1, w_2, \dots, w_n w1,w2,,wn 这n个变量,还可以用列向量 x = ( x 1 x 2 … x n ) T x = (\begin{matrix}x_1&x_2&\dots&x_n\end{matrix})^T x=(x1x2xn)T 表示 x 1 , x 2 , … , x n x_1, x_2, \dots, x_n x1,x2,,xn 这n个变量。这样,用向量乘法就能将上述平面方程表示为

w T x + b = 0 w^Tx + b = 0 wTx+b=0

除了描述这个平面的方程,我们还要描述平面的性质。

第一个性质是:平面能将两类点分开

那么,首先要明确点该如何表示。n维空间中的点有n个坐标,n维向量正好有n个分量。因此我们可以利用这点,将每个点表示为一个向量。假设n维空间中有m个点,那么我们可以令他们对应的向量分别为(向量右上角的数字i表示这是第i个点)

x ( 1 ) , x ( 2 ) , … , x ( m ) , 其 中 x ( i ) = ( x 1 ( i ) x 2 ( i ) … x n ( i ) ) T x^{(1)}, x^{(2)}, \dots, x^{(m)},其中 x^{(i)} = (\begin{matrix}x_1^{(i)}&x_2^{(i)}&\dots&x_n^{(i)}\end{matrix})^T x(1),x(2),,x(m)x(i)=(x1(i)x2(i)xn(i))T

其次要明确点的类别该如何表示。类别是离散的概念,因此可以用一个整数来描述,那么我们将m个点的类别记为

y ( 1 ) , y ( 2 ) , … , y ( m ) y^{(1)}, y^{(2)}, \dots, y^{(m)} y(1),y(2),,y(m)

不妨令 y ( i ) = 1 y^{(i)} = 1 y(i)=1 表示第i个点属于第一类,令 y ( i ) = − 1 y^{(i)} = -1 y(i)=1 表示第i个点属于第二类。

然后,要知道我们可以用平面 w T x + b = 0 w^Tx + b = 0 wTx+b=0把整个空间划分为的三个部分:

  • 所有满足 w T x + b > 0 w^Tx + b > 0 wTx+b>0 的点x在平面的一侧,构成空间的第一个部分
  • 所有满足 w T x + b < 0 w^Tx + b < 0 wTx+b<0 的点x在平面的另一侧,构成空间的第二个部分
  • 所有满足 w T x + b = 0 w^Tx + b = 0 wTx+b=0 的点x在平面上,构成空间的第三个部分

也就是说满足“能将两类点分开”性质的平面是能够让两类点分属于空间的第一、二个部分的平面(当然,反过来让它们分属于空间的第二、一个部分也行,这里这么做只是为了方便后面的运算罢了)。

最后,根据上述描述和约定,我们可以说满足“能将两类点分开”性质的平面是满足以下数学性质的平面:

平面 w T x + b = 0 w^Tx + b = 0 wTx+b=0 y ( i ) = 1 y^{(i)} = 1 y(i)=1 的点 x ( i ) x^{(i)} x(i) 满足 w T x ( i ) + b > 0 w^Tx^{(i)} + b > 0 wTx(i)+b>0 ,令 y ( i ) = − 1 y^{(i)} = -1 y(i)=1 的点 x ( i ) x^{(i)} x(i) 满足 w T x ( i ) + b < 0 w^Tx^{(i)} + b < 0 wTx(i)+b<0

利用一个小小的数学技巧甚至能将这个数学性质描述得更加紧凑:

平面 w T x + b = 0 w^Tx + b = 0 wTx+b=0 y ( i ) = ± 1 y^{(i)} = \pm 1 y(i)=±1 的点 x ( i ) x^{(i)} x(i) 满足 y ( i ) ( w T x ( i ) + b ) > 0 y^{(i)}(w^Tx^{(i)} + b) > 0 y(i)(wTx(i)+b)>0

y ( i ) y^{(i)} y(i) 的值分类讨论可明确上述两个性质是等价的。

第二个性质是:平面离这两类点尽可能的远

首先,我们要定义什么是“远”。“远”是一种对于距离的描述,在多维空间中有很多种定义距离的方式(例如曼哈顿距离、欧几里得距离、切比雪夫距离等),这里不妨用最常用的欧几里得距离。对于单个点来说,我们有点 x ( i ) x^{(i)} x(i) 到平面 w T x + b = 0 w^Tx+b=0 wTx+b=0 的欧几里得距离的公式(分母 ∥ w ∥ \|w\| w 表示向量w的长度,长度也是根据欧几里得距离定义的):

d ( w , b , x ( i ) ) = ∣ w T x ( i ) + b ∣ ∥ w ∥ d(w, b, x^{(i)}) = \frac{|w^Tx^{(i)}+b|}{\|w\|} d(w,b,x(i))=wwTx(i)+b

前面已经说过,在二维空间中,直线方程是 ax + by + c = 0,那么点到平面距离公式在二维空间下就变成了点到直线距离公式:

d ( a , b , c , x , y ) = ∣ a x + b y + c ∣ a 2 + b 2 d(a, b, c, x, y) = \frac{|ax+by+c|}{\sqrt{a^2+b^2}} d(a,b,c,x,y)=a2+b2 ax+by+c

这个初中学过的式子也许会让人感到更熟悉些。

其次,我们要定义什么是平面到两类点的距离。也就是平面到一个点集的距离。想象一下,你正站在两军对垒的前线,面前有千军万马向你杀来。你会如何向将军报告你相对于一整支军队的距离?一种最有意义的方式是,计算敌军冲在最前面的人和你的距离。我们就用这个概念来定义平面到点集的距离。也就是说,我们会把离平面最近的点到平面的距离当作平面到点集的距离:

D ( w , b ) = min ⁡ i d ( w , b , x ( i ) ) = min ⁡ i ∣ w T x ( i ) + b ∣ ∥ w ∥ D(w, b) = \min\limits_i d(w, b, x^{(i)}) = \min\limits_i\frac{|w^Tx^{(i)}+b|}{\|w\|} D(w,b)=imind(w,b,x(i))=iminwwTx(i)+b

最后,“平面离这两类点尽可能的远”就可以用数学语言描述为“D(w, b)尽可能的大”了。

优化

现在,已经明确了那个特殊平面的性质。但是别忘了,我们的目标是找到那个平面,也就是找到那个平面方程的参数w和b。在数学中,在给定限制下选择恰当的参数,使得某个值尽可能的大,这正是最优化问题的范式。

在我们正在解决的问题中,上述第一个性质正是一系列限制条件:

∀ i ,   y ( i ) ( w T x ( i ) + b ) > 0 \forall i,\ y^{(i)}(w^Tx^{(i)} + b) > 0 i, y(i)(wTx(i)+b)>0

上述第二个性质正是优化目标:

max ⁡ w , b D ( w , b ) \max\limits_{w, b} D(w,b) w,bmaxD(w,b)

综上所述,我们要解决的实际上是一个最优化问题:

max ⁡ w , b min ⁡ i ∣ w T x ( i ) + b ∣ ∥ w ∥ \max\limits_{w, b} \min\limits_i\frac{|w^Tx^{(i)}+b|}{\|w\|} w,bmaximinwwTx(i)+b

s . t .   ∀ i ∈ [ 1 , m ] ,   y ( i ) ( w T x ( i ) + b ) > 0 s.t.\ \forall i\in[1,m],\ y^{(i)}(w^Tx^{(i)} + b) > 0 s.t. i[1,m], y(i)(wTx(i)+b)>0

(数学语言中常见的“s.t.”是subject to的缩写,其后列出的是限制条件)

求解

接下来,我们将一步步化简上面提出的最优化问题,将其化简成好用计算机处理的形式。

首先要知道,虽然我们要找的直线是唯一的,但其对应的w, b却不是唯一的。

假设在二维空间中,我们要找的直线是 2 x 1 + x 2 + 1 = 0 2x_1 + x_2 + 1 = 0 2x1+x2+1=0 。将w, b乘2后不难发现, 4 x 1 + 2 x 2 + 2 = 0 4x_1 + 2x_2 + 2 = 0 4x1+2x2+2=0 仍然是那条直线的方程。怎么办呢?这其实都是w, b太自由所致。既然它们太自由,就要限制它们。对于变量而言,用等式限制它们即可。比方说上面那条直线,如果我们强行限制 w 1 + w 2 + b = 4 w_1 + w_2 + b = 4 w1+w2+b=4 的话,就只有 2 x 1 + x 2 + 1 = 0 2x_1 + x_2 + 1 = 0 2x1+x2+1=0 这个方程是合法的方程了。

既然明确了这点,接下来就应该为w, b设置一个约束条件。比方说以参数为变量的线性方程式就是不错的选择,例如刚才提到的 w 1 + w 2 + b = 4 w_1 + w_2 + b = 4 w1+w2+b=4 ,就是这种形式。既然如此,不如找一个现成的点 x ( i ) x^{(i)} x(i) 的坐标来当这种线性方程的系数吧。但是我们有 x ( 1 ) , x ( 2 ) , … , x ( m ) x^{(1)}, x^{(2)}, \dots, x^{(m)} x(1),x(2),,x(m) 这么多点,选哪个比较好呢?不如就选择一个 y ( i ) ( w T x ( i ) + b ) y^{(i)}(w^Tx^{(i)}+b) y(i)(wTx(i)+b) 这个值最小的点吧,我们用下面这个等式来限制w, b:

min ⁡ i ( y ( i ) ( w T x ( i ) + b ) ) = 2 \min\limits_i(y^{(i)}(w^Tx^{(i)}+b)) = 2 imin(y(i)(wTx(i)+b))=2

为什么要用这个点呢?为什么要令等式右边的常数为2呢?让我们暂且寄下疑惑,看看增加了这个限制条件后,最优化问题会变成什么样。由于有了这个限制, min ⁡ i ∣ w T x ( i ) + b ∣ ∥ w ∥ = min ⁡ i ∣ y ( i ) ( w T x ( i ) + b ) ∣ ∥ w ∥ = 2 ∥ w ∥ \min\limits_i\frac{|w^Tx^{(i)}+b|}{\|w\|} = \min\limits_i\frac{|y^{(i)}(w^Tx^{(i)}+b)|}{\|w\|} = \frac{2}{\|w\|} iminwwTx(i)+b=iminwy(i)(wTx(i)+b)=w2 成立。再通过取倒数将最外层的max化为min,原来的优化目标就变成了:

min ⁡ w 1 2 w T w \min\limits_{w} \frac{1}{2}w^Tw wmin21wTw

在这个新限制条件下,原先的限制条件 ∀ i ,   y ( i ) ( w T x ( i ) + b ) > 0 \forall i,\ y^{(i)}(w^Tx^{(i)} + b) > 0 i, y(i)(wTx(i)+b)>0 也就是多余的了。因为“数集的最小值等于2”显然比“数集中所有值大于0”还要更苛刻些。但是为了之后的计算方便,仿照原先限制条件的形式,我们将 min ⁡ i ( y ( i ) ( w T x ( i ) + b ) ) = 2 \min\limits_i(y^{(i)}(w^Tx^{(i)}+b)) = 2 imin(y(i)(wTx(i)+b))=2 改写成:

∀ i ∈ [ 1 , m ] ,   y ( i ) ( w T x ( i ) + b ) ≥ 2 \forall i\in[1,m],\ y^{(i)}(w^Tx^{(i)} + b) \ge 2 i[1,m], y(i)(wTx(i)+b)2

这样,我们就得到了一个新的最优化问题:

min ⁡ w 1 2 w T w \min\limits_{w} \frac{1}{2}w^Tw wmin21wTw

s . t .   ∀ i ∈ [ 1 , m ] ,   y ( i ) ( w T x ( i ) + b ) ≥ 2 s.t.\ \forall i\in[1,m],\ y^{(i)}(w^Tx^{(i)} + b) \ge 2 s.t. i[1,m], y(i)(wTx(i)+b)2

现在,来澄清一下为什么使用 min ⁡ i ( y ( i ) ( w T x ( i ) + b ) ) = 2 \min\limits_i(y^{(i)}(w^Tx^{(i)}+b)) = 2 imin(y(i)(wTx(i)+b))=2 这个限制条件。

y ( i ) ( w T x ( i ) + b ) y^{(i)}(w^Tx^{(i)}+b) y(i)(wTx(i)+b) 由两个因子构成, ( w T x ( i ) + b ) (w^Tx^{(i)}+b) (wTx(i)+b) 的作用是,限制w, b的同时将 ∣ w T x ( i ) + b ∣ ∥ w ∥ \frac{|w^Tx^{(i)}+b|}{\|w\|} wwTx(i)+b 的分子简化,并将内层的min符号给脱掉。 y ( i ) y^{(i)} y(i) 的作用是将新限制条件构造成同旧限制条件一样的形式。等号右侧的2的作用在之后会说明。

总之这样以来,不仅使问题仅有唯一解,还让式子得到了简化。更重要的是,我们成功将这个问题构造成了一个具有成熟解决方案的“二次优化”问题(梯度下降解决不了带约束的优化问题)。这样以来,我们只需在计算机上调用现成的二次优化工具就能解得w, b了。

如何调用呢?先让我们看一下二次优化的标准形式(新限制条件等号右侧的2的作用是为了构造二次优化的标准形式):

min ⁡ u 1 2 u T Q u + p T u \min\limits_u \frac{1}{2}u^TQu+p^Tu umin21uTQu+pTu

s . t .   ∀ i ∈ [ 1 , m ] ,   a ( i ) T u ≥ c ( i ) s.t.\ \forall i\in[1,m],\ a^{(i)T}u \ge c^{(i)} s.t. i[1,m], a(i)Tuc(i)

将行向量 a ( i ) T a^{(i)T} a(i)T 纵向排列可以得到一个矩阵A,将实数 c ( i ) c^{(i)} c(i) 纵向排列可以得到一个列向量c,二次优化工具通常会提供一个函数u <- QP(Q, p, A, c),只要将矩阵Q, A,向量p, c当作参数传入这个函数,就能解出对应的u。

下面给出将我们的最优化问题构造成二次规划问题的方法:

二次规划的参数在本问题中对应的量维度
u ( b w 1 w 2 … w n ) T (\begin{matrix}b&w_1&w_2&\dots&w_n\end{matrix})^T (bw1w2wn)T ( n + 1 ) × 1 (n+1)\times1 (n+1)×1
Q ( 0 0 0 … 0 0 1 0 … 0 0 0 1 … 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 … 1 ) \left(\begin{matrix}0&0&0&\dots&0\\0&1&0&\dots&0\\0&0&1&\dots&0\\\vdots&\vdots&\vdots&\ddots&\vdots\\0&0&0&\dots&1\end{matrix}\right) 0000010000100001 ( n + 1 ) × ( n + 1 ) (n+1)\times(n+1) (n+1)×(n+1)
p ( 0 … 0 ) T (\begin{matrix}0&\dots&0\end{matrix})^T (00)T ( n + 1 ) × 1 (n+1)\times1 (n+1)×1
A ( y ( 1 ) y ( 1 ) x 1 ( 1 ) … y ( 1 ) x n ( 1 ) ⋮ ⋮ ⋱ ⋮ y ( m ) y ( m ) x 1 ( m ) … y ( m ) x n ( m ) ) \left(\begin{matrix}y^{(1)}&y^{(1)}x^{(1)}_1&\dots&y^{(1)}x^{(1)}_n\\\vdots&\vdots&\ddots&\vdots\\y^{(m)}&y^{(m)}x^{(m)}_1&\dots&y^{(m)}x^{(m)}_n\end{matrix}\right) y(1)y(m)y(1)x1(1)y(m)x1(m)y(1)xn(1)y(m)xn(m) m × ( n + 1 ) m\times(n+1) m×(n+1)
c ( 2 … 2 ) T (\begin{matrix}2&\dots&2\end{matrix})^T (22)T m × 1 m\times1 m×1

变换

之前我们讨论了如何在空间中找到那个神奇的多维平面。接下来讨论是否有足够多且质量高的属性来描述一个人,如果有的话,在属性非常非常多的情况下,又如何能够高效地找到那个神奇的多维平面。

(未完待续……)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值