机器学习推导合集02-SVM简明入门1-硬边界SVM的建模过程

版权声明:博客为个人原创,如需转载请注明出处 https://blog.csdn.net/liubai01/article/details/82017964

1 前序

第一次遇到SVM,是在写爬虫作验证码的识别。做完预处理将数字弄成特征向量后,发现SVM能将其正确分类,从此对ML感兴趣。我第一步就想自己将sklearn实现的东西自己去写一遍,体会其中的精妙。结果过了一年半,即将步入本三,才敢说自己对机器学习,支持向量机有了浅显的认知。

基于SVM的验证码识别

当时在翻阅网上SVM的教程,发现到处充满了优化的痕迹:KKT, Slater强对偶条件,等等。现在认为混杂了太多优化和数学知识,门槛较高,会强迫读者去接受一些无法证明的结论。其中最有趣的,就是看各个教程各显神通从几何角度解释KKT条件了。然而,从建模角度看SVM,而非触及数值优化的部分,可以让读者清晰的知道SVM在做些什么。

2 介绍

本教程基于Learning from data一书第8章(电子版)整理所得。看懂教程需要:

  1. 基本的解析几何知识(例如知道三维空间平面可以表示为ax+by+c=0等)
  2. 线性代数简单的运算操作(向量内积,矩阵乘法等)
  3. 证明中逻辑学的基本符号(因为所以等):\forall, \exists,\therefore, \cdots

 在本节教程你会学/不会学到:

  1. SVM的数学建模与推理√
  2. QP问题的数值求解方法×
  3. KKT条件Slater强对偶情形×
  4. 使用python与cvxopt库的QP-solver去实现简单的SVM分类器√
  5. 步步推导,步步为营√

 由于QP问题的数值解法(如内点法)学习门槛过高,也非我们主要关注对象。我引用布鲁斯·布坎南(Bruce G.Buchanan)对于计算机科学领域的分类方式,来说服你们:先别碰这些了。真要学,也不应该从SVM切入。

计算机科学的划分

由于教程事先用letax格式书写,有些不方便迁移的部分用图片表示,敬请谅解。

思维导图

3 SVM问题引入

3.1 SVM针对什么问题?

 3.2数学记号

4 SVM问题建模 

4.1可行超平面

4.2 支持向量(support vector)和分类间隔(margin)

4.3 SVM优化目标

算法总结Summury

3 SVM问题引入

3.1 SVM针对什么问题?

若读者学过PLA(perceptron learning algorithm),那么说明你能写一个可行的二元分类器了。若你没学过,问题不大。他们只比你们能多完成一件事:有一堆线性可分的数据,他们能寻找到一个超平面将数据分开。特别地,在二维情况下,超平面就是一根直线。让我们观察以下数据:

“舞动”的数据点

你发现什么?尽管都是行得通的分类器,然而他们给数据点舞动的空间不同。直觉上,若分类器能接受更大半径的噪音而不出错,那个分类就更鲁棒(robust),我们更喜欢。这里我们给出分类间隔直觉的上的定义:

Definition3.1.1 分类间隔(margin)直觉形式定义:给定有球形噪音的正负线性可分(linear sperable)样本,分类间隔为目标分类器所能接受的最大噪音半径。


基于直觉,给出最优分类器的两个基本假设:

  1. 能分类不出错(本博客介绍的Hard-Margin SVM只能分类线性可分的数据)
  2. 分类间隔最大

 3.2数学记号

对于二元分类的问题,我们定义:

  1. 超平面对应的参数和偏置$\displaystyle (\textbf{b},\textbf{w})\in \mathbb{R}\times \mathbb{R}^d$
  2. 第n个数据点/训练样本(data point, sample):\displaystyle \vecc{x} \in \mathbb{R}^d(维度为d),y\in\{-1, +1\}
  3. 线性分类器对应超平面为\displaystyle \textbf{w}^t\textbf{x}+b=0
  4. 分类器输出:\displaystyle h(x)=sign(w^tx+b),sign(x)为符号函数。特别地,为避免混淆,定义sign(0)=-1。h(x)=+1我们认为分类器视x为正样本,h(x)=-1我们认为分类器视x为负样本。当h(\textbf {x})=y,我们就说分类器对于该样本分类正确。

4 SVM问题建模 

4.1可行超平面

通过简单分类讨论,我们能得到:

Definition 4.1.1 可行超平面(separating hyperplane)全称量词定义形式:(b,\textbf {w})表示的超平面为可行超平面,当且仅当\forall n \in [N]

y_n(\vecc{w}^T \vecc{x}_n + b)>0, ([N]=\{1,2,\cdots,N\}) ...(1)

由于这一定义方式用到了任意\forall符号。在逻辑学中是全称量词,为了方便记忆,称这种定义法为全称量词定义形式。这一定义基于的事实是:h(x)=\vecc{w}^Tx_{n}+by_n同号时,分类视为正确

根据命题4.1.3,我们给出可行超平面存在量词定义形式:

结合这一结论,可以通过分类讨论得到:

Proposition4.1.6:对于任一可行超平面h和数据\{(\vecc{x}_i, y_i)\}^{N}_{i=1}

\text{dist}(\textbf{x}_n,h)=\frac{y_n (\textbf{w}^T \textbf{x}+b)}{\lVert\textbf{w}_n\rVert_2}

4.2 支持向量(support vector)和分类间隔(margin)

4.3 SVM优化目标

现在问题是,我们该如何将问题求解。在这里,我们希冀将问题转换为特定的标准QP问题。这样,我们实际coding时可以借助cvxopt框架求解。首先,我们介绍下有线性约束的QP优化问题:

\min_{\textbf{u}\in \mathbb{R}^2} \frac{1}{2}\textbf{u}^T\textbf{Q}\textbf{u} + \textbf{p}^T\textbf{u}s.t.\, \textbf{a}^T_m \textbf{u} \geqslant c_m (m = 1,2,\cdots, M)

若定义:\textbf{A}=\left[ \begin{matrix} - & \vecc{a}_1 & - \\ - & \vecc{a}_2 & - \\ & \cdots &\\ - & \vecc{a}_m & - \\ \end{matrix} \right] , \textbf{c}=\left[ \begin{matrix} c_1\\ c_2\\ \cdots\\ c_m\\ \end{matrix} \right],上述约束条件通过广义不等号等价于:\textbf{A}\textbf{u}\preceq \textbf{c}。往后的教程,我们定义一个Magic Box: u^\star \leftarrow QP(\textbf{Q}, \textbf{p}, \textbf{A}, \textbf{c}), 视作我们计算出了该问题。

Proposition 4.3.3将(4.3.2)化成QP标准型:

\textbf{u}=\left[ \begin{matrix} b \\ \textbf{w} \\ \end{matrix} \right], \textbf{Q}=\left[ \begin{matrix} 0 & \textbf{0}_d^T \\ \textbf{0}_d & \textbf{I}_d \\ \end{matrix} \right], \textbf{p}=\textbf{0}_d, \textbf{A}=\left[ \begin{matrix} y_1&|&-&y_1\textbf{x}_1&-\\ \cdots&|&&\cdots&\\ y_n&|&-&y_n\textbf{x}_n&-\\ \end{matrix} \right], \textbf{c}=\textbf{1}_d

至此,我们完成了最简单的hard-margin SVM算法的建模过程,并用QP问题能够解决。

5 算法总结Summury

以下截图摘自LFD(Learning from data):

总结

TBD用cvxopt实现SVM的Jupyter notebook正在完工中,敬请期待

Acknowledgement

1. Learning from data: Yaser S. Abu-Mostafa, Malik Magdon-Ismail, and Hsuan-Tien Lin

2. 《人工智能简史》尼克

猜你喜欢

转载自blog.csdn.net/liubai01/article/details/82017964