SVM支持向量机

SVM介绍

SVM支持向量机(英文全称:support vector machine)是一个分类算法, 通过找到一个分类平面, 将数据分隔在平面两侧, 从而达到分类的目的。
如下图所示, 直线表示的是训练出的一个分类平面, 将数据有效的分隔开。

SVM实现原理

SVM的分类基本思路是找到一个分类平面, 下面重点探讨下如何找到这个平面。 先梳理下SVM求解的基本思路;

在这里插入图片描述

如图SVM的推导分为5个步骤:

1、用数学来定义要求解的问题
SVM是求解一个平面S:y = wx + b, 其实就是求解参数w, b。如何来求解w, b呢? 怎么判断训练的w, b构成的平面已经足够好呢? 这就需要把问题建模成一个数学问题(称为原始问题),从而明确求解的目标以及约束条件。

2、求解原始问题转换为二次凸函数+约束条件的优化问题
原始问题很难求解出参数, 转换为二次凸函数+约束条件的优化问题, 这种转换保证两个函数取最优解时,参数是相同的。做这种转换的主要原因是二次凸函数和约束条件有成熟的计算方法和理论支撑(拉格朗日优化理论)。

3、拉格朗日优化+对偶特性构建方程
将w, b参数优化转换为对参数alpha的优化(alpah为拉格朗日约束函数的参数)

4、SMO求解alpha最优值
通过上步构建的方程, w, b可以通过alpha来表示。 SMO可以求解出alpha, 再通过alpha求出w,b。 到此平面的方程就可推导出来。

SVM的数学定义

SVM是要找到最合适的分类平面, 那么怎么才算最合适的? 最直接的评估标准:被分隔的两边数据距离平面间隔最大, 换句话,SVM就是获取最大间隔的超平面。下面介绍两个衡量样本到超平面间隔的定义。

1、函数间隔
在超平面w * x + b = 0确定的情况下,|wx+b|表示点距离超平面的距离,而超平面作为二分类器,如果wx+b>0, 判断类别y为1, 否则判定为-1。从而引出函数间隔的定义:

单样本函数间隔
其中y是训练数据的类标记值, 如果y(w^T * x + b) >0说明,预测的值和标记的值相同, 分类正确,而且值越大,说明点离平面越远,分类的可靠程度更高。这是对单个样本的函数定义, 对整个样本集来说,要找到所有样本中间隔值最小的作为整个集合的函数间隔:
在这里插入图片描述
即w和b同时缩小或放大M倍后,超平面并没有变化,但是函数间隔跟着w和b变化。所以,需要加入约束条件使得函数间隔固定, 也就是下面介绍的几何间隔。

2、几何间隔
根据点到平面的距离公式和w*x+b=0平面公式, 推导得到几何间隔定义:
在这里插入图片描述
和函数间隔类似, 为得到r的绝对值, 我们定义几何间隔:在上述公式中乘以y值, 同时也得到与函数间隔的关系:几何间隔就是函数间隔除以w的范式。
在这里插入图片描述
为方便推导和优化, 令函数间隔等于1得到最大间隔分类器的原始定义:
在这里插入图片描述
最大间隔分类器就是我们求取的分类超平面, 等于max(几何间隔), 而函数间隔假设为1,就可得到最大间隔超平面: max(1/||w||), 而约束条件是因为函数间隔是所有样本点的间隔函数中最小值。

SVM的二次凸函数和约束条件

最大间隔分类器的求解, 可以转换为上面的一个最优化问题, 即在满足约束条件:

在这里插入图片描述

求出就最大的1/||w||。
为更好的利用现有的理论和计算方法, 可以将求解1/||w||最大值, 转换为一个二次凸函数优化问题:求解 Min(1/2 * (||w||)^2 ), 两者问题是等价的。原来的问题转换为二次凸函数优化问题:

在这里插入图片描述

拉格朗日构建方程

在对二次凸函数进行优化前,先讨论下对偶性问题。 如下图所示, 假设一个函数F(x,y) = f(x, y) + a * (g(x, y) - c), 椭圆线是f(x, y)在平面上的等高线, 绿色是g(x, y)=c的轨迹。

在这里插入图片描述
从图上可以看出, F(x, y)的极值点肯定是f(x,y)和g(x,y)-c相切的点, 这点上两个曲线的法向量平行。从而可以得到如下结论:
在这里插入图片描述
类似的,可以将1/2 * ||w|| ^2优化函数和约束条件结合起来, 构建一个函数:
在这里插入图片描述
其中ai是拉格朗日乘子。
利用对偶性的结论, 对L(w,b,a)关于w和b求偏导数:

在这里插入图片描述
将上面两个等式,代入L(w, b, a)函数,最终最大间隔分类器优化文件, 就转换成如下定义(过程太过复杂,直接看下结论就可以), 注意这个公式中只涉及求解ai的极大值, 不涉及w, b参数的求解, 因为w, b都可以用ai来表示, 求出ai后, 自然就求出了w,b的值。

在这里插入图片描述

SMO算法求解alpha

上面推导的公式, 是通过SMO算法来求解的。最常见的是Platt SMO算法 , 这个算法是在1996年John Platt 发布的。SMO算法(Sequential Minimal Optimization)全称是最小序列优化。SMO的基本思路类似动态规划, 也是一种启发式算法,它将原优化问题分解为多个小优化问题来求解,并且对这些小优化问题进行顺序求解得到的结果作为作为整体的结果。

SVM的实现

因为svm的原理太复杂,只好调用sk-learn进行实现。下面是利用SVM二分类。

import numpy as np
from sklearn.svm import SVC

X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
clf = SVC()
clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
    max_iter=-1, probability=False, random_state=None, shrinking=True,
    tol=0.001, verbose=False)
print(clf.predict([[-0.8, -1]]))
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值