关于支持向量机(SVM)

来源:互联网 发布:js正则匹配网址 编辑:程序博客网 时间:2024/05/18 14:24

前一段时间空下来准备整理一下springmvc的东西谁知没多久就又被分配到数据处理组去了,就只好拿起大学书本重温了一下数学然后看了一下机器学习的相关书籍,稍微有点儿心得写在这里,一是怕自己用代码实现时间久了就忘了算法的内容,二来也是重新捋一遍思路,把每一个环节都搞清楚,中间涉及到很多数学公式,我尽量打出来。

首先给这个东西断个句,支持向量-机,我一开始读的是支持-向量-机然后会在理解上带来偏差。他是根据支持向量(支持向量是个名次)来确定权重的一个算法。至于支持向量是什么我们后面会讲到,废话不多说,正式开始

首先阐述一下为什么为什么要用SVM,再SVM之前已经有一些分类算法比如逻辑回归(logistic regression),但是如果你还记得逻辑回归的话应该会注意,再逻辑回归中我们只是对每一个输入数据改变了变量的权重,是完全基于历史数据的,并没有做足够好的优化。相当于我在两个村子之间挖了一口井,这口井保证了村子里每一个人都能喝上水,但是现在我们要考虑让更多的村民距离这口井更近,当然再svm中我们是让点和线的距离更远。啊。。。。我不想画图啊,可是还是要画啊
支持向量

首先改造一下逻辑回归表达式,让y{1,1},假设函数

h(x⃗ )=g((w⃗ )Tx⃗ +b)

假设公式唯一要注意的就是各个向量的维度,嗯还有一点关于假设函数的,假设函数在一开始是代表训练数据中的输出值的,但是在分类问题中我们把输出值分成了几类,所以假设函数的输出值变成了整数,特别的在二分问题中经常会变成0,1,-1这样的整数,这里z>=0g(z)=1,否则g(z)=1

在分类问题上,假设函数永远都是第一要点,上面做的工作就是把假设模型建立出来了,本质上跟逻辑回归的区别不大,现在我们来考虑优化问题,回顾一下逻辑回归的假设函数图像,在变量的值越往正方向靠拢,函数输出值越接近1,越往负方向靠拢,函数值越接近0.也就是我们期望变量的值离原点越远越好。但是在现在的假设函数中我们是无法根据函数的输出值来定量的判定可能性的,所以他们就想出了间隔,通过间隔来定量的分析可能性的大小

函数间隔(functional margin)
先把定义表达式写出来

γ^(i)=y(i)((w⃗ )Tx⃗ (i)+b)

yi((w⃗ )Tx⃗ (i)+b)同号,且yi的绝对值恒等于1(假设函数决定的)所以函数间隔的大小取决于|((w⃗ )Tx⃗ (i)+b)|的大小(((w⃗ )Tx⃗ (i)+b)),并且值离y轴越远,函数间隔越大。一切看起来很完美,然而还有一个问题,我们的目的要使间隔尽量大,但是如果我们任意缩放w⃗ 或者b⃗ ,具体来讲比如放大为2w⃗ 2b⃗ 函数间隔就会变大,所以我们无限放大w⃗ 我们就可以获得无限大的函数间隔,这样存在两个问题,第一我们找不到最大间隔,因为它可以被放到无限大,第二w⃗ b⃗ 没有存在的意义,因为它可以取无限多个值。这个时候,几何间隔就出来了

几何间隔(geometry margin)
还是老规矩,先上表达式

γ(i)=((w⃗ )Tx⃗ (i)+b||w⃗ ||)=(w⃗ ||w⃗ ||)Tx(i)+b||w⃗ ||

表达式里边儿已经看的很明显了,几何间隔把函数间隔里边儿的放大倍数给抵消了(线性代数里边儿是带矩阵的一种运算,具体叫什么我忘了)

在确定了定量分析间隔的表达式之后,接下来就是熟悉的求最值问题,本来打算今天写完了的,结果因为第一次用latex花了不少时间,下次再补吧