1.引言
大千世界各种数据类型无奇不有,假设我们手上有一份非线性数据或者高维数据并且想要进行一个分类预测,然而遇到此类型的数据时我们之前介绍的逻辑回归算法的表现并不好,从左图上可以明显看出我们想要将数据分成内部点集和外部圆圈两类,但是使用逻辑回归的效果如图上红色的线可以明显看出并不能有效的分类;由此提出了支持向量机,支持向量机(Support Vector Machine)简称SVM,通过SVM我们可以清晰的分成外圈红色的点和内部黄色的点两类,同时右图是上升到三维空间时分类的效果,我们发现分类效果依旧很好,基本上来说SVM是最好的有监督学习算法,在2012年之前通常使用此算法进行图像的分类任务,为什么SVM在2012年之后逐渐淡出图像分类领域呢?当然不是因为世界末日我们才不使用SVM了,在2012年相当于“横空出世”了卷积神经网络,自此终结了SVM在图像分类领域的霸权模式,对于卷积神经网络在此不多叙述,之后会单独进行介绍。
2.支持向量机
SVM算法主要思想是找到一条最好的决策边界,使得决策边界进行分类时两边的样本点到决策边界的距离尽可能的远,如下图所示,黑色的线即为我们的决策边界(我是在第一个图上自己加工的,并没有在跑一个决策边界,理解一下电脑慢)
接下来我们对距离计算的方式进行推导,首先我们看下图,我们想要计算x到阴影平面的距离用dist表示,在三维空间中直接计算距离十分困难,我们进行一个转化,在阴影平面内随机找一个点x',由此dist = (x-x')在竖直方向上的投影,紧接着我们知道任何一个平面都会有法向量w,因为x'在阴影平面上所以有公式1,将该式子整理将b诺到等号右侧,接下来我们计算dist,公式2为我们的计算公式,将公式2括号展开并将公式1整理后的式子代入公式2得到最终公式3。
分析公式3发现公式中绝对值符号放在那里显得特别突兀而且我也不喜欢这个符号,每当数学出现这个符号就代表着又要分类讨论非常讨厌,怎么办我们发现一个有趣的现象,我们添加一个判别值y,为正例时置y = 1,想对的为负例时置y = -1,而判断样本点正负的方法就是带入到wTx' + b中计算结果当结果大于0时为正例,所以可得公式4。
公式5为我们的优化目标,但是此公式看着特别繁琐,不喜欢,进一步化简,我们将公式5中括号部分进行放缩,使此部分大于等于1,由此得到我们的优化目标公式6,但是吧我这个人毛病比较多不喜欢看到分数形式,没关系难不倒我们,求分数的最大值等于求其倒数形式的最小值,由此得到最终公式7,到此我们的目标函数得到,同时条件函数(公式8)也有了,通过使用拉个朗日乘子法进行求解,到这里有的同志会问拉格朗日乘子法是个什么东东,通俗点来说就是高数下册学的条件极值吧,最终的拉格朗日函数形式如公式9。
接下来就是一系列的计算问题,通过对w和b分别求导并将两者结果反代入原式得到L',接着在对L'求α的导数,得到的公式仅关于α、y和x,再使用一个拉格朗日乘子法求出α,最后将α反代回式子求出最终结果(这一块计算特别繁琐,个人感觉重在理解求解方法,计算的问题交给数学家)。经过总结发现边界点的α ,≠0,非边界点的α = 0,我们称a ≠ 0(边界点)的点为支持向量。
3.软间隔
对于某些数据集, 并不能找到一个超平面把它们分开, 也就是说不能找到一组w, b, b, 满足上一模块的公式8,由此我们提出添加一个软间隔,软间隔的实际意义由公式1知,当不能够满足初始条件即大于1时,我们人为的添加一个松弛因子,减弱条件。最终得到优化后的目标函数如公式2所示,接着依旧使用拉格朗日乘子法求解。观察式中C参数的作用,其效果图如下所示,当取C = 10,因为参数取值大只要松弛因子变化一点目标函数的值就会有很大变化,所以松弛因子的变化范围相对来说很小,所以分类依旧很严格;但是当取C = 0.1时当松弛因子增大很多时乘上前面的参数目标函数整体值变化不大,所以松弛因子的变化范围就会大很多,造成的分类就不严格。同时观察右图可以发现当软间隔增大时会有许多点落入间隔区间内,造成许多的样本点分类错误,因此在实际中对罚参数C的设定时需要谨慎选取。
4.总结
到此支持向量机(SVM)基本上已经介绍完毕,最后还剩下一个核变换方法,此方法主要是用来升维的,也就是当我们遇到第三部分所说的不可分情况时,我们将低维不可分的数据提升的高维,进而对其分类,此部分也就是一个计算公式直接使用计算即可,最后说明一下支持向量机支持不同的内积函数,使用不同的函数会生成不同的算法,目前主要有以下三类:
1.采用多项式形式的内积函数
2.采用核函数形式的内积函数
3.采用S形函数形式的内积函数
总体来说前两种用的比较多,对于第三种我目前没有见过使用的,第一种用于常规的分类算法,对于第二种核函数我们常用以分类本文图中展示的圆形数据。
写在最后的话:到此为止我已经介绍了部分的算法,下一篇将会介绍降维算法,此部分主要用于数据预处理部分,此外还有一个聚类算法,这两个方法完成后就要进入到神经网络部分,神经网络目前打算写一个人工神经网络和卷积神经网络,对于循环神经网络我并不是特别想介绍,网络模型有些复杂以我的水平可能不能够清晰的表达出来,此外循环神经网络大多用于自然语言处理(个人认为此部分是整个机器学习和深度学习中最难得部分.........)。