机器学习系列:2、支持向量机之:线性可分支持向量机

1、理论

1.1 间隔与间隔最大化

      给定训练样本样本集D={(X1,y1),(X2,y2), (X3,y3),…,(Xm,ym)},其中yi ∈ \in {-1, +1}。
      对于一个二分类问题,我们的基本思想是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。但是如下所示:
训练样本超平面

图1 存在多个超平面将二分类问题数据进行分开

      能将训练样本分开的超平面有很多,哪一个是最好的呢?
      由于我们的训练集的局限性和噪声影响,训练集外的样本可能更接近两个类的分隔,这将使许多超平面出现错误,所以最好的分离超平面应该是处于"正中间"的划分超平面,这时的分离超平面是最鲁棒的。

(1) 超平面

      在样本空间中,划分超平面的通过如下方程表示:
Θ T X + b = 0 (1) \Theta^\mathrm T X + b = 0 \tag{1} ΘTX+b=0(1)
      其中 Θ \Theta Θ= ( θ \theta θ1, θ \theta θ2, θ \theta θ3,…, θ \theta θn)为法向量,决定超平面的方向;
             b为位移项,决定超平面和原点之间的距离。

(2) 函数间隔和几何间隔

      一般来说,一个点距离分离超平面的远近可以表示分类预测的确信程度。在超平面 Θ T X + b = 0 \Theta^\mathrm T X + b = 0 ΘTX+b=0 确定的情况下,| Θ T X + b \Theta^\mathrm T X + b ΘTX+b| 能够相对的表示点x距离超平面的远近。并且 Θ T X + b \Theta^\mathrm T X + b ΘTX+b 的符号与类标记y的符号能否一致能够表示分类是否正确。
      所以最后我们可以用 y ( Θ T X + b ) y(\Theta^\mathrm T X + b) y(ΘTX+b) 来度量分类的正确性和确信度,即函数间隔
γ ^ i = y i ( Θ T X + b ) (2) \hat{\gamma}_i = y_i(\Theta^\mathrm T X + b) \tag{2} γ^i=yi(ΘTX+b)(2)
      其中定义超平面 ( Θ , b ) (\Theta, b) (Θ,b) 关于训练集D的函数间隔为超平面 ( Θ , b ) (\Theta, b) (Θ,b) 关于D中所有样本点的函数间隔中最小值,即:
γ ^ = min ⁡ i = 1 , . . . , m   γ ^ i (3) \hat{\gamma} = {\underset {i=1,...,m}{\operatorname {min} }}\, \hat{\gamma}_i \tag{3} γ^=i=1,...,mminγ^i(3)
      函数间隔可以表示分类预测的正确性及确信度,但是选择分离超平面时候,只有函数间隔是不够的。因为只要成比例的改变 Θ \Theta Θ b b b ,超平面并不会发生改变,但是间隔也成比例的改变了,不能准确的表示确信度。所以我们下面要对函数间隔进行归一化,即几何间隔
γ i = Θ ∣ ∣ Θ ∣ ∣ X i + b ∣ ∣ Θ ∣ ∣ (4) \gamma_i = \frac{\Theta}{||\Theta||}X_i + \frac{b}{||\Theta||}\tag{4} γi=ΘΘXi+Θb(4)
      其中,|| Θ \Theta Θ||为 Θ \Theta Θ L 2 L_2 L2范数。其中定义超平面 ( Θ , b ) (\Theta, b) (Θ,b) 关于训练集D的几何间隔为超平面 ( Θ , b ) (\Theta, b) (Θ,b) 关于D中所有样本点的函数间隔中最小值,即:
γ = min ⁡ i = 1 , . . . , m   γ i (5) \gamma = {\underset {i=1,...,m}{\operatorname {min} }}\, \gamma_i \tag{5} γ=i=1,...,mminγi(5)
      所以一般地,当样本点被超平面正确分类时,点 X i X_i Xi与超平面的几何距离是: γ i = y i ( Θ ∣ ∣ Θ ∣ ∣ X i + b ∣ ∣ Θ ∣ ∣ ) \gamma_i = y_i(\frac{\Theta}{||\Theta||}X_i + \frac{b}{||\Theta||}) γi=yi(ΘΘXi+Θb)

(3) 间隔最大化

      支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间距最大的分离超平面。
      对线性可分的训练数据集而言,线性可分分离超平面有无穷多个,但是几何间距最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。(与将要讨论的训练数据集近似线性可分时的软间隔最大化相对应)
      间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分的确信度对训练数据进行分类。即找到支持向量对应的几何距离即可。
      假设超平面( Θ \Theta Θ, b b b)能将训练样本正确分开,即对应( X i X_i Xi, y i y_i yi),若 y i = + 1 y_i = +1 yi=+1,则有 Θ T X i + b ⩾ + 1 \Theta^TX_i + b \geqslant +1 ΘTXi+b+1;若有 y i = − 1 y_i = -1 yi=1,则有 Θ T X i + b ⩽ − 1 \Theta^TX_i + b \leqslant -1 ΘTXi+b1。其中支持向量表示为: Θ T X i + b = + − 1 \Theta^TX_i + b ={\underset {-}{+}} 1 ΘTXi+b=+1。两个异类支持向量到超平面的距离为: γ = 2 ∣ ∣ Θ ∣ ∣ (6) \gamma = \frac{2}{||\Theta||}\tag{6} γ=Θ2(6)
      此时欲找到"最大间隔"的划分超平面,即满足: max ⁡ Θ , b   2 ∣ ∣ Θ ∣ ∣ s . t . y i ( Θ T X + b ) ⩾ 1 , i = 1 , 2 , . . . , m (7) {\underset {\Theta, b}{\operatorname {max} }}\,\frac{2}{||\Theta||} \\ \\s.t.y_i(\Theta^\mathrm T X + b){\geqslant1, i=1,2,...,m} \tag{7} Θ,bmaxΘ2s.t.yi(ΘTX+b)1,i=1,2,...,m(7)
      等价于:
min ⁡ Θ , b   1 2 ∣ ∣ Θ ∣ ∣ 2 s . t . y i ( Θ T X + b ) ⩾ 1 , i = 1 , 2 , . . . , m (8) {\underset {\Theta, b}{\operatorname {min} }}\,\frac{1}{2}||\Theta||^2 \\ \\s.t.y_i(\Theta^\mathrm T X + b){\geqslant1}, {i=1,2,...,m} \tag{8} Θ,bmin21Θ2s.t.yi(ΘTX+b)1,i=1,2,...,m(8)
      这是一个凸二次规划问题。

1.2 拉格朗日对偶问题

      为了求解线性可分支持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。

(1) 拉格朗日对偶函数

      我们的原始问题为:
min ⁡ Θ , b   1 2 ∣ ∣ Θ ∣ ∣ 2 s . t . y i ( Θ T X + b ) ⩾ 1 , i = 1 , 2 , . . . , m (9) {\underset {\Theta, b}{\operatorname {min} }}\,\frac{1}{2}||\Theta||^2 \\ \\s.t.y_i(\Theta^\mathrm T X + b){\geqslant1, i=1,2,...,m} \tag{9} Θ,bmin21Θ2s.t.yi(ΘTX+b)1,i=1,2,...,m(9)
      我们将这个问题一般化:
min ⁡ x ∈ R n   f ( x ) s . t . c i ( x ) ⩽ 0 , i = 1 , 2 , . . . , m h j ( x ) = 0 , j = 1 , 2 , . . . , n (10) {\underset {x \in R^n}{\operatorname {min} }}\, f(x) \\ \\s.t.c_i(x){\leqslant0, i=1,2,...,m} \\ h_j(x) = 0, j= 1,2,...,n\tag{10} xRnminf(x)s.t.ci(x)0,i=1,2,...,mhj(x)=0,j=1,2,...,n(10)
      首先构建拉格朗日函数。为此,对每一个不等式约束,引进拉格朗日乘子 α i ⩾ 0 , i = 1 , 2 , . . . , m \alpha_i \geqslant 0, i=1,2,...,m αi0,i=1,2,...,m β j , j = 1 , 2 , . . . , n \beta_j, j=1,2,...,n βj,j=1,2,...,n,定义拉格朗日函数为:
L ( x , α , β ) = f ( x ) + ∑ i = 1 m α i c i ( x ) + ∑ j = 1 n β j h j ( x ) (11) L(x, \alpha, \beta) = f(x) + \sum_{i=1}^m\alpha_i c_i(x) + \sum_{j=1}^n\beta_jh_j(x)\tag{11} L(x,α,β)=f(x)+i=1mαici(x)+j=1nβjhj(x)(11)
      其中我们令:
Θ p ( x ) = max ⁡ α , β , α i ⩾ 0   L ( x , α , β ) (12) \Theta_p(x) = {\underset {\alpha, \beta,\alpha_i\geqslant0}{\operatorname {max} }}\, L(x, \alpha, \beta) \tag{12} Θp(x)=α,βαi0maxL(x,α,β)(12)
      这个函数 Θ p ( x ) \Theta_p(x) Θp(x) 对于满足原始问题约束条件的那些 x x x 来说,其值等于 f ( x ) f(x) f(x)。因为满足约束条件的 x x x 会使得 h j ( x ) = 0 h_j(x)=0 hj(x)=0 ,因此最后一项消掉了,而 c i ( x ) ≤ 0 c_i(x)≤0 ci(x)0 ,并且我们要求了 α i ⩾ 0 \alpha_i\geqslant0 αi0 ,因此 α i c i ( x ) ⩽ 0 \alpha_ic_i(x) \leqslant0 αici(x)0 ,所以最大值只能在它们都取零的时候得到,这个时候就只剩下 f ( x ) f(x) f(x) 了。因此,对于满足约束条件的那些 x x x 来说, Θ p ( x ) = f ( x ) \Theta_p(x) = f(x) Θp(x)=f(x) 。这样一来,原始的带约束的优化问题其实等价于如下的无约束优化问题:
min ⁡ x ∈ R n   Θ p ( x ) 即 : min ⁡ x ∈ R n   max ⁡ α , β , α i ⩾ 0   L ( x , α , β ) (13) {\underset {x \in R^n}{\operatorname {min} }}\, \Theta_p(x) \\ 即:{\underset {x \in R^n}{\operatorname {min} }}\,{\underset {\alpha, \beta,\alpha_i\geqslant0}{\operatorname {max} }}\, L(x, \alpha, \beta) \tag{13} xRnminΘp(x)xRnminα,βαi0maxL(x,α,β)(13)
      我们把上述式子称为原始问题的,下面等式为原始问题的对偶问题:
max ⁡ α , β , α i ⩾ 0   min ⁡ x ∈ R n   L ( x , α , β ) (14) {\underset {\alpha, \beta,\alpha_i\geqslant0}{\operatorname {max} }}\, {\underset {x \in R^n}{\operatorname {min} }}\,L(x, \alpha, \beta) \tag{14} α,βαi0maxxRnminL(x,α,β)(14)

(2) KKT条件推导

      求解上面的对偶问题,我们同样可以使用等式约束条件的求解思路,对所有的参数进行求导,但是对于求解出的最优解,必须满足KKT条件 (Karush-Kuhn-Tucker)。
      我们令:
g ( α , β ) = min ⁡ x ∈ R n   L ( x , α , β ) (15) g(\alpha, \beta) = {\underset {x \in R^n}{\operatorname {min} }}\,L(x, \alpha, \beta)\tag{15} g(α,β)=xRnminL(x,α,β)(15)
      求解析式可先将 L L L 看成是关于 x x x 的函数,而将拉格朗日乘子看作常数,求出 L L L 的极小值点,再将该点代入 L L L ,得到的关于 α \alpha α β \beta β 的表达式就是对偶函数。
对偶函数具有如下两条重要性质
i. 对偶函数一定是凹函数,其凹性与原目标函数和约束函数凹凸与否无关。
ii. 对 ∀ α ⩾ 0 , ∀ β \forall\alpha\geqslant0, \forall\beta α0,β(泛指向量中的每个分量),如果原问题最优解对应的目标函数值为 p ∗ p^* p ,则 g ( α , β ) ≤ p ∗ g(\alpha, \beta)\le p^* g(α,β)p

1 slater条件

      对于对偶函数的重要性质 ii ,对 ∀ α ⩾ 0 , ∀ β \forall\alpha\geqslant0, \forall\beta α0,β ,对偶函数 g ( α , β ) ≤ p ∗ g(\alpha, \beta)\le p^* g(α,β)p 是原问题最优值 p ∗ p^* p 的一个下界,最好的下界就是最大化对偶函数,因此构造原问题的对偶问题:式(13)和式(14)。
      由于对偶函数是凹函数,故拉格朗日对偶问题一定是凸优化问题,其对应的最优解为 α ∗ , β ∗ \alpha^*, \beta^* α,β(最优拉格朗日乘子),若对应的最优值为 d ∗ d^* d ,则总有 d ∗ ≤ p ∗ d^* \le p^* dp
其中:
1、当 d ∗ ≤ p ∗ d^* \le p^* dp时,称为弱对偶(weak duality)
2、当 d ∗ = p ∗ d^* = p^* d=p 时,称为强对偶(strong duality)
3、将 p ∗ − d ∗ p^* - d^* pd 称为对偶间隙(duality gap)。
注:在解存在的情况下,弱对偶总是成立的。满足强对偶时,可以通过求解对偶问题来得到原始问题的解。
      Slater 条件用于判断什么情况下强对偶是成立的。在原问题是凸问题的情况下,若 ∃ x ∈ r e l i n t ( D ) \exists x\in relint(D) xrelint(D) ,使得约束条件满足:
c i ( x ) < 0 , h j ( x ) = 0 i = 1 , 2 , 3 , . . . n    j = 1 , 2 , 3... m (16) c_i(x)< 0, h_j(x) = 0\\ i= 1,2,3,...n\,\,j=1,2,3...m\tag{16} ci(x)<0,hj(x)=0i=1,2,3,...nj=1,2,3...m(16)
      则强对偶成立。
      其中 r e l i n t ( D ) relint(D) relint(D) 表示原始凸问题定义域的相对内部,即在定义域上除了边界点以外的所有点。只要能找到一个这样的点使原凸问题等式约束依然成立且不等式约束都严格小于 0 0 0 即可。对大多数一般的原凸问题,强对偶都是成立的。

2 KKT条件

c i ( x ∗ ) ≤ 0 ,     i = 1 , 2 , 3 , . . . , n h j ( x ∗ ) = 0 ,     j = 1 , 2 , 3 , . . . , m α i ≥ 0 ,     i = 1 , 2 , 3 , . . . , n α i c i ( x ∗ ) = 0 ∂ f ( x ) ∂ x ∗ + ∑ i = 1 n α i ∂ c i ( x ) ∂ x ∗ + ∑ j = 1 m β i ∂ h j ( x ) ∂ x ∗ = 0 (17) c_i(x^*)\le 0, \,\,\,i=1,2,3,...,n \\ h_j(x^*) = 0, \,\,\,j=1,2,3,...,m \\ \alpha_i\ge 0,\,\,\,i=1,2,3,...,n \\ \alpha_ic_i(x^*)=0 \\ \frac{\partial f(x)}{\partial x^*} + \sum_{i=1}^n \alpha_i \frac{\partial c_i(x)}{\partial x^*} + \sum_{j=1}^m \beta_i \frac{\partial h_j(x)}{\partial x^*} = 0\tag{17} ci(x)0,i=1,2,3,...,nhj(x)=0,j=1,2,3,...,mαi0,i=1,2,3,...,nαici(x)=0xf(x)+i=1nαixci(x)+j=1mβixhj(x)=0(17)
      如果原始问题是一个凸优化问题,且存在 x ∗ x^* x ( α ∗ , β ∗ ) (\alpha^*,\beta^*) (α,β) 满足 KKT 条件,那么它们分别是 原始问题 和 对偶问题 的极值点并且强对偶性成立。(因为SVM是一个凸二次规划问题,且满足KKT条件,所以可以用对偶问题进行解决。)

1.3 求解对偶问题

      根据拉格郎日问题对偶性,原始问题的对偶问题是极大极小问题: max ⁡ α , α i ⩾ 0   min ⁡ Θ , b   L ( Θ , b , α ) {\underset {\alpha,\alpha_i\geqslant0}{\operatorname {max} }}\, {\underset {\Theta,b}{\operatorname {min} }}\,L(\Theta, b, \alpha) ααi0maxΘ,bminL(Θ,b,α)
      其中:
L ( Θ , b , α ) = 1 2 ∣ ∣ Θ ∣ ∣ 2 − ∑ i = 1 n α i y i ( Θ x i + b ) + ∑ i = 1 n α i (18) L(\Theta, b, \alpha) =\frac{1}{2}||\Theta||^2 - \sum_{i=1}^n \alpha_iy_i(\Theta x_i + b) + \sum_{i=1}^n\alpha_i\tag{18} L(Θ,b,α)=21Θ2i=1nαiyi(Θxi+b)+i=1nαi(18)
      所以,为了得到对偶问题的解,需要先求 L ( Θ , b , α ) L(\Theta, b, \alpha) L(Θ,b,α) Θ 和 b \Theta和b Θb 的极小,然后再求对 α \alpha α的极小。

(1) 求 min ⁡ Θ , b   L ( Θ , b , α ) {\underset {\Theta,b}{\operatorname {min} }}\,L(\Theta, b, \alpha) Θ,bminL(Θ,b,α)

      将拉格朗日函数 L ( Θ , b , α ) L(\Theta, b, \alpha) L(Θ,b,α)分别对 Θ 和 b \Theta和b Θb求偏导数并令其等于0。
∂ L ( Θ , b , α ) ∂ Θ = Θ − ∑ i = 1 n α i y i x i = 0 ∂ L ( Θ , b , α ) ∂ b = − ∑ i = 1 n α i y i = 0 (19) \frac{\partial L(\Theta, b, \alpha)}{\partial \Theta} = \Theta - \sum_{i=1}^n\alpha_iy_ix_i = 0 \\ \frac{\partial L(\Theta, b, \alpha)}{\partial b} = - \sum_{i=1}^n\alpha_i y_i= 0 \tag{19} ΘL(Θ,b,α)=Θi=1nαiyixi=0bL(Θ,b,α)=i=1nαiyi=0(19)
      最后得:
Θ = ∑ i = 1 n α i y i x i ∑ i = 1 n α i y i = 0 (20) \Theta = \sum_{i=1}^n\alpha_iy_ix_i \\ \sum_{i=1}^n\alpha_iy_i = 0 \tag{20} Θ=i=1nαiyixii=1nαiyi=0(20)
      将式(19)代入式(18),并利用式(20),即得:
L ( Θ , b , α ) = 1 2 ∑ i = 1 n ∑ i = 1 n α i α j y i y j ( x i x j ) − ∑ i = 1 n α i y i ( ( ∑ j = 1 n α j y j x j ) x i + b ) + ∑ i = 1 n α i = − 1 2 ∑ i = 1 n ∑ i = 1 n α i α j y i y j ( x i x j ) + ∑ i = 1 n α i (21) L(\Theta,b,\alpha) = \frac{1}{2}\sum_{i=1}^n\sum_{i=1}^n\alpha_i\alpha_jy_iy_j(x_ix_j) - \sum_{i=1}^n\alpha_iy_i((\sum_{j=1}^n\alpha_jy_jx_j)x_i+b) + \sum_{i=1}^n \alpha_i \\ = -\frac{1}{2}\sum_{i=1}^n\sum_{i=1}^n\alpha_i\alpha_jy_iy_j(x_ix_j) + \sum_{i=1}^n \alpha_i \tag{21} L(Θ,b,α)=21i=1ni=1nαiαjyiyj(xixj)i=1nαiyi((j=1nαjyjxj)xi+b)+i=1nαi=21i=1ni=1nαiαjyiyj(xixj)+i=1nαi(21)
      即:
min ⁡ Θ , b   L ( Θ , b , α ) = − 1 2 ∑ i = 1 n ∑ i = 1 n α i α j y i y j ( x i x j ) + ∑ i = 1 n α i (22) {\underset {\Theta,b}{\operatorname {min} }}\,L(\Theta,b,\alpha)= -\frac{1}{2}\sum_{i=1}^n\sum_{i=1}^n\alpha_i\alpha_jy_iy_j(x_ix_j) + \sum_{i=1}^n \alpha_i \tag{22} Θ,bminL(Θ,b,α)=21i=1ni=1nαiαjyiyj(xixj)+i=1nαi(22)

(2) 求 min ⁡ Θ , b   L ( Θ , b , α ) {\underset {\Theta,b}{\operatorname {min} }}\,L(\Theta,b,\alpha) Θ,bminL(Θ,b,α) α \alpha α的极大,即是对偶问题:

max ⁡ α , α i ⩾ 0   − 1 2 ∑ i = 1 n ∑ i = 1 n α i α j y i y j ( x i x j ) + ∑ i = 1 n α i s . t .     ∑ i = 1 n α i y i = 0 ,     α i ≥ 0 , i = 1 , 2.. , n (23) {\underset {\alpha,\alpha_i\geqslant0}{\operatorname {max} }}\,-\frac{1}{2}\sum_{i=1}^n\sum_{i=1}^n\alpha_i\alpha_jy_iy_j(x_ix_j) + \sum_{i=1}^n \alpha_i \tag{23} \\ s.t. \,\,\,\sum_{i=1}^n\alpha_iy_i = 0, \,\,\,\alpha_i \ge0,i=1,2..,n ααi0max21i=1ni=1nαiαjyiyj(xixj)+i=1nαis.t.i=1nαiyi=0,αi0,i=1,2..,n(23)
      考虑原始最优化问题和对偶最优化问题,原始问题满足强对偶条件,所以存在 Θ ∗ , b ∗ , α ∗ \Theta^*, b^*,\alpha^* Θ,b,α,使 Θ ∗ 和 b ∗ \Theta^*和b^* Θb是原始问题的解, α ∗ \alpha^* α是对偶问题的解。
      对线性可分训练数据集,假设对偶最优化问题对 α \alpha α的解为 α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α n ∗ ) T \alpha^* = (\alpha_1^*,\alpha_2^*,...,\alpha_n^*)^T α=(α1,α2,...,αn)T
      根据KKT条件,有:
∂ L ( Θ , b , α ) ∂ Θ ∗ = Θ − ∑ i = 1 n α i y i x i = 0 ∂ L ( Θ , b , α ) ∂ b ∗ = − ∑ i = 1 n α i y i = 0 α i ∗ ( y i ( Θ ∗ x i + b ∗ ) − 1 ) = 0 y i ( Θ ∗ x i + b ∗ ) − 1 ≥ 0 α i ∗ ≥ 0 ,     i = 1 , 2 , . . . , n \frac{\partial L(\Theta,b,\alpha)}{\partial \Theta^*} = \Theta - \sum_{i=1}^n\alpha_iy_ix_i = 0 \\ \frac{\partial L(\Theta, b, \alpha)}{\partial b^*} = - \sum_{i=1}^n\alpha_iy_i = 0 \\ \alpha_i^*(y_i(\Theta^*x_i + b^*) - 1) = 0\\ y_i(\Theta^*x_i + b^*) - 1\ge 0 \\ \alpha_i^*\ge0, \,\,\,i=1,2,...,n ΘL(Θ,b,α)=Θi=1nαiyixi=0bL(Θ,b,α)=i=1nαiyi=0αi(yi(Θxi+b)1)=0yi(Θxi+b)10αi0,i=1,2,...,n
      由此得:
Θ ∗ = ∑ i α i y i x i (24) \Theta^* = \sum_{i}\alpha_iy_ix_i \tag{24} Θ=iαiyixi(24)
      其中至少有一个 α j ∗ > 0 \alpha_j^* > 0 αj>0(用反证法,假设 α ∗ = 0 \alpha^* =0 α=0,由上式可得 Θ ∗ = 0 \Theta^*=0 Θ=0,而 Θ ∗ = 0 \Theta^*=0 Θ=0不是原始最优化问题的解,产生矛盾),对此 j j j有:
y j ( Θ ∗ x j + b ∗ ) − 1 = 0 (25) y_j(\Theta^*x_j + b^*) - 1 = 0 \tag{25} yj(Θxj+b)1=0(25)
      将式24代入式25中,且注意到 y j 2 = 1 y_j^2 = 1 yj2=1可得:
b ∗ = y j − ∑ i = 1 n α i ∗ y i ( x i x j ) (26) b^* = y_j - \sum_{i=1}^n\alpha_i^*y_i(x_ix_j) \tag{26} b=yji=1nαiyi(xixj)(26)
      最后根据式24和式26可得,分离超平面可以写成:
∑ i n α i y i x i + b ∗ = 0 (27) \sum_{i}^n\alpha_iy_ix_i + b^* = 0 \tag{27} inαiyixi+b=0(27)
      分类决策函数可以写成:
f ( x ) = s i g n ( ∑ i = 1 n α i ∗ y i ( x x i ) + b ∗ ) (28) f(x) = sign(\sum_{i=1}^n\alpha_i^*y_i(xx_i) + b^*) \tag{28} f(x)=sign(i=1nαiyi(xxi)+b)(28)
      我们可以得知,分类决策函数只依赖于输入 x x x和训练样本输入的内积。

2、实践

# 导入numpy
import numpy as np
# 导入画图工具
import matplotlib.pyplot as plt
# 导入支持向量机svm
from sklearn import svm
# 导入数据集生成工具
from sklearn.datasets import make_blobs

# 先创建50个数据点,让他们分为两类
X, y = make_blobs(n_samples=50, centers=2, random_state=6)
# 创建一个线性内核的支持向量机模型
clf = svm.SVC(kernel='linear', C=1000)
clf.fit(X, y)
# 把数据点画出来
plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=plt.cm.Paired)

# 建立图像坐标
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# 生成两个等差数列
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)

# 把分类的决定边界画出来
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
ax.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=100, linewidth=1, facecolors='none')
plt.savefig('./svm.png')
plt.show()

      最后输出的图为:
svm

图2 线性可分SVM图

3、面试算法题之剑指offer1:找出数组中重复的数字

3.1 题目描述

      给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
      注意:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1;
      样例:给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。

解题思路:遍历数组,然后将每个数字放在改放的位置,如nums[0]=0,nums[1]=1,....。
                 时间复杂度:O(N)
from collections import defaultdict
class Solution(object):
    def duplicateInArray(self, nums):
        """
        :type nums: List[int]
        :rtype int
        """
        counters = defaultdict(lambda:0)
        range_right = len(nums)
        res = -1        # save duplicate num
        for num in nums:
            if num not in range(range_right):
                return -1   # none legal num in range 0 ~ n-1
            if counters[num] > 0:
                res = num
            else:
                counters[num] += 1
        return res

4、参考文献

(1)《统计学习方法》
(2)《机器学习》
(3) Python-SVM
(4)《剑指offer》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值