查看原文
其他

交了3年的女朋友不理我了,她说我连SVM都不会?

柯广 大数据技术派 2022-10-15


跟女朋友一直没有闹过矛盾,可是这一次,她竟然不理我了。我问她为什么,她说:你连SVM都不会,不配跟我交往!


一气之下,我找来资料,运用我专业的数学知识,从线性回归开始学习,再到SVM知识,这下总算明朗了!


我去找到女朋友,给她讲了我对SVM监督式算法的理解,她说我这么短的时间内理解的还不错,就原谅我了,还说今天6.1儿童节,她准备给我一个大惊喜,准备把她最宝贵的东西给我。。。


我很高兴,所高兴的不是她认可我了,而是我通过自己的努力,又学习了一门算法。


分类算法支持向量机(SVM),它是一种监督式学习算法。SVM算法是将原始数据特征转换至另一个高维度,并基于构建一个或多个超平面,使得训练数据中不同类别的数据得以尽可能的分开,同时该超平面需要尽可能地远离各类别中最靠近超平面的数据点。那么就有这样的疑问了:对于线性可分情况能不能像简单神经网络感知机那样找到一条直线将所有点分类?该超平面怎么定才为尽可能地远离各类别中最靠近超平面的数据点呢?什么情况下需要转换至高维度呢?


在神经网络的简单感知机模型里,简单感知机可以实现“逻辑与”预算,也就是线性分类,多个感知机并联也就是带有隐含层可以实现“逻辑异或”运算,也就是非线性分类,带有反馈型的BP神经网络更是强大。那么作为后起之秀的支持向量机确为什么可以表现的那么好呢,它们的工作机理又是怎样呢?

神经网络文章可以看一下这两篇文章:


神经网络的概念和基本用法

人工神经网络实现简单的逻辑运算

01

支持向量机的引入

比如我们有一些训练数据D = {Xi,Yi |,Yi  = {1,-1},i = 1~m},这些数据Xi在N维度空间中,呈现某种有序分布,yi表示xi的类别,为了便于后面构建模型,类别即为1或者-1,需要找到一个超平面尽可能地将其分类。

图中有两类点,红色和黑色我们可以看到,能把它们分开的超平面其实有无数个,紧挨着紫色平面的点,实际上坐标是N维度的,可以看作向量,称作支持向量。假设已经找到一个满足尽可能地远离各类别中最靠近超平面的数据点条件的超平面,如图中的蓝色直线代表的超平面,那么这个超平面满足方程:

wx+b = 0

怎么理解呢,我们初中都学过二维平面方程:

ax+by+c = 0或者ax1+bx2+c = 0

可以把看作w = [a,b],x = [x1,x2],一式的b相当于上面二式的c,那么根据向量的点乘运算就是wx+b = 0了。

那么,图中两条紫色直线代表的超平面恰好是临界平面,假设上面一条正截距的满足方程:

w'x+b' = k'

我们两边同时除以k'得到

(w'/k')x+(b'/k') = 1

那么,我们可以将它们记为:

wx+b = 1

wx+b = -1

这样,两个超平面的距离就是2/||w||,理想情况下,我们需要所有数据点落在两个超平面之外。那么,对任意数据点x应该满足

wx+b >= 1,yi = 1

wx+b <= -1,yi = -1

分别两边同乘以yi与对应的值就得到一个普遍适用的式子

yi(wx+b)>=1

那么,我们就可以得到如下优化问题:

高数告诉我们,利用拉格朗日乘数法,将目标函数表示为目标与条件的线性组合,然后分别求偏倒函数零点,就可以得到:


觉得公式太多不好,不够通俗易懂,不过有时候还是必须的,这里就简单介绍到这里。其实,这只是线性可分情况,还有线性不可分情况,仍然是假设一条满足大多数分类的误差下的平面,主要是目标函数加上误差,约束条件加上松弛变量,后面仍然可以用拉格朗日法求解。


关于条件优化问题还有TK条件,《运筹学》这门学科上面有讲到。推荐一篇CSDN博客,写的很不错,可以参考一下。http://blog.csdn.net/on2way/article/details/47729419


02

为什么转换至高纬度


我们都知道,一般处理数据是高维的,都需要想方设法降维,尤其在构建大型的用户~项目时遇到的稀疏矩阵。常用的经典降维方法比如:主成分分析、因子分析、矩阵分解等,都是想一步一步降维,化繁为简,从而简化每一步的计算。


而支持向量机有时候缺需要映射到高维空间,难道低维不好吗?


就算是神经网络的逻辑异或运算其实还是线性运算,它是用多条直线来进行区域的切分。下面是两个圆,我们暂且把它们看成两类,红色的“+”、蓝色的“o”。那么,这两类圆形形状点该怎么切分呢?



这里是二维平面,显然,不能找到一条直线去区分它们。对,确实不行。


但是,我们盯着它多看上几秒,眼睛一花,好像看出了3D效果,好像它们之间有距离,可以加上一个平面似的。这就需要把它们转换到高维空间去,这里是三维就够了。

比如,我们做一个函数映射:

z = f(x,y) = xy

做出它们的3D图就是这样:



我简单做出了一个特殊的分类曲面如图:

隐隐约约看起来好像是可以分开了,不过确实好像还是看不清!

这些图用Matlab做的


我加细、旋转了一下,好像还是看不怎么清楚!


图中可能看不出3D效果,但是实际上,这个平面是可以把两个三维曲线分开的,这样就通过将低维度映射到高维度的方法达到了数据分类的目的。

猜你可能喜欢

基于最小二乘法的线性回归拟合

文本分析朱自清写《匆匆》的情感状态

多元线性回归、逐步回归、逻辑回归的总结

基于梯度下降法的——线性回归拟合

Python系列之——好用的Python开发工具


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存