机器学习 基本算法 (3(深入浅出SVM

Hard-Margin SVM

Linear SVM

如果说 在平面上 0的点 和 1的点 是可分的 那就能找出无数条线 来划分这个面
这里写图片描述

那怎么找到最好的线 这就是svm做的事 就是找到最不容易发生意外的线

这里写图片描述
就像这3条线 第1条就很容易发生意外 就是说 在左边的 x 这个地方 对分类要求的精度很高 可能一不小心就分错了 x o
而 svm 就是要找到 第3条线这样的线 在svm中 越不容易出意外 越好

什么叫不出意外 就是不轻易落在错的地方 就是 每个点都不要离线太近 那就是 求

                maxall点 到线的距离)

这边 点到线的距离是最短距离就是垂直距离

表现成数学公式 就是个最优化方程
这里写图片描述

distance 基本的数学公式
这里写图片描述

其中 : wTx+b=0
这里写图片描述

把 0,1标签加上 方程就变成了
这里写图片描述

用一个技巧

min1||w||yn(wTxn+b)

那可以把他固定到一个数 1 就是

1||w||yn(wTxn+b)=1
这是不会影响最后结果的 因为 b 和 w 都是未知数 对原来的min值 只要 b w都 变成 bminwmin 就是 1值了 那么 方程就变成了
这里写图片描述

再转换成熟悉的最优化 min
这里写图片描述

这就是qp问题
这里写图片描述

这个过程中 有个挺坑的地方 就是你光看着过程 会发现 max好像都是取到最远的点 ,但其实不是 。svm 中的support vector 是指支撑那条线的 点 ,max是看这些support vector 的距离

Dual SVM

这里写图片描述
这边的 Zn 可能就会出现问题了 Zn 的维度可能会太高了 太高维的Zn 会对计算带来麻烦

处理这个问题 可以用上一个小技巧 lagrange multiplier (拉格朗日乘子法 ) 简单说 就是个 方程 加个新参数 λ。 在SVM 中 λ 一般写成α

对 违规的 α x (正数) 就是 无穷 可以被排除
所以
这里写图片描述
这里写图片描述

下面是 另一个小技巧

交换 max min 结果不变
SVM=minb,w(maxallan>0L(b,w,a))=maxallan>0(minb,wL(b,w,a))
就是逻辑推理吧
左边 >= 右边 容易看出
右边 >= 左边 需要 是凸函数 线性条件

这里写图片描述
方程转化成了这样 就对 b w 分别求导 很容易的

L(b,w,a)b=0=Nn=1αnyn
L(b,w,a)w=0=wNn=1αnynzn

方程就变成了
这里写图片描述
还有这么多的约束条件
这里写图片描述

最下面那个条件又叫 kt条件就是是互补松弛 就2个里面最少满足一个

经过一连串数学处理 就把 条件从 Z的维度 减下到了 N 维度
这里写图片描述

但是还不不够 虽然条件是N维度了 但 Z这个大维度 跑到了 最优方程 zTnzm 这里 这个对计算也是个麻烦
引出下面的 kernel 技巧

Kernel SVM

ϕ(xn)Tϕ(xM)=zTnzm

举个例子 ϕ2
这里写图片描述
这就是把 ϕ2 分成了 3部分 每个部分对应相乘 刚好出现了这样的结果 挺神奇的
而这个就是 kernel技巧 此时的 ϕ(xn)Tϕ(xM) 就可以用x来计算出来 。 就不用去管 z里面的高维度了 ,
然后 b,w 都可以根据这个技巧 简化计算

(上述的kernel 和dual 中的 lagrange参数 都是为了 避开 z 中的高维度)
现在就可以对 poly-2 做kernel的技巧

这里写图片描述

实际效果图
这里写图片描述

更高次的也是同样的kernel技巧

这里写图片描述

那如果是 无限维呢

无限维也可以办到 我们知道

ex=xnn!

这个里面就出现了无限维 ,那就把 K(xn,xm)使劲往这边靠

那就是要出现

exnxm

刚好 exnxm2 办到了这个
这里写图片描述

这样 无限维 也可以被 N维所表示 给算出来了
这里写图片描述

这样我们就把 Zn 这个高维度给丢掉了 让SVM这个好用的分类计算也方便了 还收获了 Gaussian 这个无限维的 不管边界再奇怪 Gaussian也能解决
但还有一个 地方 : 就是前面的是 Hard-Margin 必须把 0,1完美分开 ,但实际上 好多的是错误信息,对错误信息的刻意处理 容易让你overfitting

举个例子
这里写图片描述

Soft-Margin SVM

这里写图片描述
和前面的最优化方程比 多加了一项 CNn=1ξn 这项也叫惩罚项,就是现在允许分类犯错了 但你犯错 我还是要惩罚你 惩罚的力度 就和我设的C 和你的表现ξ相关

下面就来解这个方程 同样用上 lagrange 这个技巧
这里写图片描述
同样 对 ξ,α,β 求导 很简单的
这里写图片描述
好了 这边就看出来了 ξ这个条件可以丢弃了 变成了 0<α<C 对 a
有了更高的要求
这里写图片描述
问题就变成了这样,一看 和上面的一模一样 就是对 a 有了要求
那上面的 kernel 技巧也可以用上去 Soft-SVM 这个问题就解决了

看看 它的表现怎么样
这里写图片描述
恩 确实不错 对一些错误的不处理 反而比处理它更好

综上所述 从最简单的svm慢慢深入,可以发现,确实svm效果很好,而且有Soft-Margin,对overfit也能有较好的控制。这其中 kernel占了很大的原因 kernel 让 计算 从高维度 下降到了 N维,可以看出简单的数学技巧的巨大作用

代码

#Import Library
from sklearn import svm

#X,y training dataset ,x_test test datasetet

# 建立svm模型

model = svm.svc() 
# there is various option associated with it, this is simple for classification. You can refer link, for more detail.

model.fit(X, y)
model.score(X, y)

predicted= model.predict(x_test)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值