机器学习必备算法之(二)支持向量机(SVM)及Python实现

什么是支持向量机

从定义上来说是在特征空间上的间隔最大化的线性分类器。…(好像很复杂的样子)…简单的来说,特征空间内,有一些数据点,我们想用一个超平面把他们分成两半,且正类和反类到这个超平面的距离要最大,这种分类模型就是支持向量机。比如,二维空间中,我找一条直线把数据点们划分为两部分,如图,B是但AC都不是。在这里插入图片描述
那什么是超平面呢?数学意义上是 w T x + b = 0 , x ∈ R n w^Tx+b=0,x\in R^n wTx+b=0,xRn,对于一条线来说,一个点是超平面;对于二维平面来说,一条线就是超平面;对于三位空间来说,一个平面就是超平面(一个大西瓜,一个刀面切两半~)…n维空间来说的超平面是n-1维的。

支持向量机分类

那么接下来我们来聊一聊具体的模型,基本思想:写出优化模型 → \to 用拉格朗日乘子法求出对偶问题 → \to 聊一聊KKT条件。(求对偶问题及KKT条件不太会的同学可以查一查袁亚湘院士的最优化理论与方法那本书或者直接搜索一下,想深入学数学优化的可以看看王宜举和修乃华老师编的非线性最优化理论与方法那本黄皮书哦~)
我们的分类决策是 f ( x ) = s g n ( w T x + b ) f(x)=sgn(w^Tx+b) f(x)=sgn(wTx+b)

线性可分之最大化硬间隔模型

什么是线性可分呢? 简单来说就是字面意思,真的存在先行超平面能把特征空间上的数据分开。那么怎么分呢?如图,我们想把这个星星和圆圈分开,那么实际上在两条虚线之间的任意一条直线好像都可以做到,但中间这条红线最好,因为他对于数据的扰动包容性最强,专业一点就是最鲁棒的,对未知数据集泛化能力更强。
举个例子,如果我不取红线作为分类决策,而是取穿过红点的虚线作为决策,目前看来也是可以的,但当我们把他用于测试集(未知的新数据)的时候,假设有一个点是红点,离右侧虚线很近,但就是超过了一点点,但我们的决策还是会把它分到蓝色星星里去,这就是分错了!

在这里插入图片描述

所以我们要寻找星星和圆圈到超平面距离最大的那个超平面。那么求间隔就是图上两次平行线之间求距离啦,这里不细推啦哈~直接给出这个距离是
γ = 2 ∣ ∣ w ∣ ∣ \gamma=\frac{2}{||w||} γ=w2
那么目标就是最大化这个间隔,约束呢就是它要满足能分开这些数据,也就是当 y i = 1 y_i=1 yi=1时(比如星星),它要满足 w T x i + b ≥ 1 w^Tx_i+b\ge 1 wTxi+b1,即在穿过蓝色星星的上面;红色就有 y i = − 1 y_i=-1 yi=1 w T x i + b ≤ 1 w^Tx_i+b\le 1 wTxi+b1,我们写出这个标准的问题:
max ⁡ w , b 2 ∣ ∣ w ∣ ∣ s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , … , m \begin{aligned} \max_{w,b} \quad & \frac{2}{||w||}\\ s.t. \quad & y_i(w^Tx_i+b)\ge 1,i=1,\dots,m \end{aligned} w,bmaxs.t.w2yi(wTxi+b)1,i=1,,m

为了方便,我们变化一下得到SVM的基本模型
min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , … , m \begin{aligned} \min_{w,b} \quad & \frac{1}{2}||w||^2\\ s.t. \quad & y_i(w^Tx_i+b)\ge 1,i=1,\dots,m \end{aligned} w,bmins.t.21w2yi(wTxi+b)1,i=1,,m

这是一个有约束的凸二次规划模型,我们可以通过对偶去求解,首先写出拉格朗日函数,拉格朗日乘子为 μ \mu μ:
L ( w , b , μ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m μ i ( 1 − y i ( w T x i + b ) ) L(w,b,\mu)=\frac{1}{2}||w||^2+\sum^m_{i=1}\mu_i(1-y_i(w^Tx_i+b)) L(w,b,μ)=21w2+i=1mμi(1yi(wTxi+b))
用其分别对 w , b w,b w,b求偏导令其为0
∂ L ∂ w = w − ∑ i = 1 m μ i y i x i = 0 ∂ L ∂ b = ∑ i = 1 m μ i y i = 0 \begin{aligned} \frac{\partial L}{\partial w}&=w-\sum_{i=1}^m\mu_iy_ix_i=0\\ \frac{\partial L}{\partial b}&=\sum_{i=1}^m\mu_iy_i=0 \end{aligned} wLbL=wi=1mμiyixi=0=i=1mμiyi=0

带入到拉格朗日函数中我们就得到了其对偶问题:
min ⁡ μ ∑ i = 1 m ∑ j = 1 m μ i μ j y i y j x i T x j − ∑ i = 1 m μ i s . t . μ i ≥ 0 , i = 1 , … , m ∑ i = 1 m μ i y i = 0 \begin{aligned} \min_{\mu} \quad &\sum_{i=1}^m\sum_{j=1}^m\mu_i\mu_jy_iy_jx_i^Tx_j-\sum_{i=1}^m\mu_i\\ s.t. \quad & \mu_i\ge0,i=1,\dots,m\\ &\sum_{i=1}^m\mu_iy_i=0 \end{aligned}

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值