手撕代码教程 (svm公式推导过程)

支持向量机

❝ 由于理解支持向量机(Support Vector Machines,SVM)需要掌握一些理论知识,而这对读者来说有一定难度,于是建议读者直接*载下**LIBSVM使用。 好,SVM讲解完毕,完结撒花!!! ❞

开个玩笑(2333),下面来让我们进入SVM的详细数学推导。

前言

什么是SVM?

在机器学习中,支持向量机 (英语: support vector machine,常简称为SVM,又名支持向量网络) 是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。

SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。 除了进行线性分类之外,SVM还可以使用所谓的核技巧有效地进行非线性分类,将其输入隐式映射到高维特征空间中。 当数据末被标记时,不能进行监督式学习,需要用非监督式学习,它会尝试找出数据到簇的自然聚类,并将新数据映射到这些已形成的簇。将支持向量机改进的聚类算法被称为支持向量聚类,当数据末被标记或者仅一些数据被标记时,支持向量聚类经常在工业应用中用作分类步骤的预处理。

从逻辑回归引出SVM

回顾Logistic

回归Logistic回归目的是从特征学习出一个0/1分类模型, 而这个模型是将特性的线性组合作为自变量, 由于自变量的取值范围是负无穷到正无穷。因此, 使用logistic函数(或称作sigmoid 函数) 将自变量映射到 上, 映射后的值被认为是属于 的概率。形式化表示就是假设函数

其中 维特征向量, 函数 就是logistic函数。

它的图像为:

svm的优化算法推导,手撕jvm源码

图1

可以看到,将无穷映射到了。

而假设函数就是特征属于 的概率。

svm的优化算法推导,手撕jvm源码

当我们要判别一个新来的特征属于哪个类时, 只需求 , 若大于 就是 的类, 反之属于 类。 再审视一下 , 发现 只和 有关, ,那么 只不过是用来映射, 真实的类别决定权还在 。还有当 时, , 反之

如果我们只从 出发, 希望模型达到的目标无非就是让训练数据中 的特征 , 而是 的特征 。 Logistic回归就是要学习得到 , 使得正例的特征远大于0 , 负例的特征远小于0 , 强调在全部训练实例上达到这个目标。 图形化表示如下:

svm的优化算法推导,手撕jvm源码

图2

中间那条线是 , logistic回归强调所有点尽可能地远离中间那条线。学习出的结果也就中间那条线。考虑上面3个点 。从图中我们可以确定 类别的, 然而 我们是不太确定的, 还算能够确定。这样我们可以得出结论, 我们更应该关心靠近中间分割线的点, 让他们尽可能地远离中间线, 而不是在所有点上达到最优。因为那样的话, 要使得一部分点靠近中间线来换取另外一部分点更加远离中间线。我想这就是支持向量机的思路和logistic 回归的不同点, 一个考虑局部 (不关心已经确定远离的点)(支持向量机), 一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离)(逻辑回归)。

SVM形式化表示

我们这次使用的结果标签是 ,替换在logistic回归中使用的 ,同时将 替换成 。以前的 , 其中认为 。现在我们替换 , 后面替换 (即 )。这样, 我们让 , 进一步 。也就是说除了 变为 , 只是标记不同外, 与logistic回归的形式化表示没区别。再明确下假设函数

只需考虑 的正负问题, 而不用关心 , 因此我们这里将 做 一个简化, 将其简单映射到 上。映射关系如下:

接下来,先让我们看一下SVM的直观理解。

SVM直观解释

以下面这个故事来理解SVM。在很久以前的情人节,大侠要去救他的爱人,但魔鬼和他玩了一个游戏。

魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。”

svm的优化算法推导,手撕jvm源码

图3

于是大侠这样放,干的不错

svm的优化算法推导,手撕jvm源码

图4

然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。

svm的优化算法推导,手撕jvm源码

图5

「SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。」

svm的优化算法推导,手撕jvm源码

图6

现在即使魔鬼放了更多的球,棍仍然是一个好的分界线。

svm的优化算法推导,手撕jvm源码

图7

然后,在SVM工具箱中有另一个更加重要的 「trick」 。 魔鬼看到大侠已经学会了一个trick,于是魔鬼给了大侠一个新的挑战。

svm的优化算法推导,手撕jvm源码

图8

现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。

svm的优化算法推导,手撕jvm源码

图9

现在,从魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了

svm的优化算法推导,手撕jvm源码

图10

再之后,无聊的大人们,把这些球叫做 「「data」」 ,把棍子叫做 「「classifier」」 , 最大间隙trick 叫做 「「optimization」」 , 拍桌子叫做 「「kernelling」」 , 那张纸叫做 「「hyperplane」」