1. 写在前面
今天这篇文章是支持向量机SVM的整理,这是机器学习中非常重要的算法之一,也是面试中非常受到面试官青睐的算法, SVM的公式推导几乎是面试必备知识点, 记得之前学习这块内容的时候, 心里非常的抵触这块内容,因为这块总感觉内容极多且公式复杂,不是太想看, 这次重新阅读,同时看了几个老师的视频加以理解之后,才发现原来支持向量机是数学上如此漂亮的算法,也是形式上如此简洁清晰的算法,支持向量机的逻辑性其实是很强的,背后也仅仅只有一条主线在支撑,从表面上看,会看到SVM的种类繁多,从线性可分到线性近似可分再到线性不可分,并且每类SVM都涉及到了很复杂的公式推导, 但其实当我们静下心来之后看, 会看到背后的一条逻辑关系,那就是支持向量机的本意是在二分类的问题中找到一个最有把握把两类样本分开的一个超平面(最优超平面), 既然是最优问题,就需要先把找最优超平面的问题用数学的方式表示出来,得到了原始的优化目标(SVM原始问题),但是该原始问题对于参数会有约束,不太好求出最优超平面,于是就想着转成无约束问题,并借助凸优化的相关理论把其转成等价的对偶问题,最后通过求对偶问题的解得到了最终的超平面。
仔细想一下, 无论是上面三类里面的哪种向量机,其实都是沿着这样的一个逻辑走的, 不同点就是面临的数据可分程度不一样,从而需要调整一开始的那个优化问题
- 对于硬间隔SVM来讲, 面对的数据本身就是线性可分的, 所以只需要定义出间隔来,然后最大化这个间隔就可以定义出最终的原始问题,这是一个典型的凸二次优化问题,就可以按照上面的逻辑来求解。
- 而软间隔SVM, 面对的数据近似线性可分,但是会有几个噪声点捣乱,于是就在开始的原始问题里面引入了一个松弛项来表示这几个噪声点带来的损失,然后修改一下约束条件就得到了它的原始问题,这又是中规中矩的凸优化问题,通过上面的逻辑求解。
- 而利用核技巧的非线性SVM, 面对的初始数据没法用一条直线分割,于是乎就引入了一个非线性函数 ϕ ( x ) \phi(\boldsymbol{x}) ϕ(x)来将样本升到高维空间(就是一个非线性变换操作), 这样就使得数据在高维空间中线性可分了,而线性可分之后, 就可以采用上面的硬间隔SVM来对其操作,确定原始问题,然后走上面的逻辑。 但是这个升维操作 ϕ ( x ) \phi(\boldsymbol{x}) ϕ(x)一般没办法直接求解,这样就不能进行最终的预测。于是乎就引入了核函数的概念,通过一些变换把预测操作变得可行。
这就是SVM的逻辑关系梳理了, 所以其实这东西并不是很复杂,一开始看感觉可怕可能是知识储备不足的原因,因为想搞清楚SVM必须知道一些凸优化的理论才可以,而像西瓜书或者统计学习方法这样的神书竟然把这些东西放在了附录或者默认我们有这些储备了,于是乎读起来才这么痛苦, 这次重新阅读,花了几个晚上的学习,并通过手推的方式走了一遍, 发现SVM的数学形式非常漂亮且巧妙,时时忍不住羡慕SVM的发明者Vapnik老爷爷的头脑了,从原始问题到对偶问题, 从线性不可分到升维再到引入核技巧,看着如此漂亮的数学语言,竟有一种上头的快感了哈哈。
所以赶紧通过一篇文章把这几天的所学笔记整理下来,因为看了几个大牛老师的视频讲解,发现这几个老师讲清楚了西瓜书或者统计学习方法上的“显然”之处,又讲的各有侧重,正好互补,此时再结合西瓜书或者统计学习方法, 就能把SVM这块比较舒服的走一遍了, 首先,我会先整理凸优化的相关理论,其实我觉得这才是理解后面SVM优化问题求解的根本,当然我并没有学习过凸优化,这里的整理也仅是根据看的视频整理相关的知识点,但对于理解后面SVM是足够了,具体的细节如果以后有时间可以研究。 然后就是按照上面的逻辑整理三类支持向量机了,每一类都是按照从原始问题->对偶问题->解对偶问题的逻辑进行公式手推,并根据视频讲的整理里面的各个细节点, 最后会结合面经整理SVM这里常考的一些面试题目, 这篇文章依然会很长,因为我整理知识实在不太喜欢用类似“显然”的高大上语言(水平还不够), 喜欢先尽量知其然,然后再探索点所以然,然后通通整理下来,这样也方便后面复习的时候好复习。如果只用“显然”,篇幅可能很短,但没有意义呀,再次看的时候还是一脸懵逼,并且"显然"性的总结西瓜书和统计学习方法总结的很到位,我再花大量时间整理这种东西有啥意义? 哈哈,所以我目前的文章感觉都不太适合碎片时间看,每篇确实都会很长,基本上短时间消化不了,即使我现在看我之前写的,都会感觉可怕哈哈, 但查阅复习的时候会感觉非常舒服,所以还是各取所需即可