支持向量机SVM

支持向量机SVM(Support Vector Machines)

红色的线是最好的划分,但是为什么不是蓝色是红色呢?

SVM就设置了一个算法,

设置一个划分线,分别像两边平移,直至相切,

两条线之间的距离就是边际margin,找到最大边际,就是效果最好的划分线。

向量内积:

两个向量之间的夹角小于90°,则向量内积大于0,若大于90°,则小于0。

svm分类:

一些推导:

无论是什么样的式子,都可以把它变成1,-1的那个式子,所以我们把它作为那两条虚线的基本标准式。

那两条虚线叫做支持向量。

SVM一些简单小说明:

from sklearn import svm
#直接调用svm的包就好,它内部非常复杂
x = [[3,3],[4,3],[1,1]]
y = [1,1,-1]

model = svm.SVC(kernel='linear')
model.fit(x,y)
#打印支持向量
print(model.support_vectors_)
#第2和第0个点是支持向量(在这两条虚线上的点)上下各有一个
print(model.support_)
model.predict([[4,3]])#预测新数据属于哪个分类
print(model.coef_)#超平面属性
print(model.intercept_)#超平面截距

svm算法推导 ——继续推导:

转化为凸优化问题:

凸优化问题首先分为三类:

无约束问题:直接求导,倒数等于0,即可求解。

广式拉格朗日乘子法:

为了求L的最小值,则这个点的偏导数为0。

 

Karush-Kuhn-Tucker最优化条(KTT条件)

进一步优化为对偶问题:

代价函数尽量小。所以L要尽量小,所以对于只看α的时候,求式子的最大值,因为后面部分一定是大于0的

接下来只看w,b时,求式子的最小值。(这里不是很懂,到底是求α的最大值还是整个式子的最大值

稍微算一下就知道它是怎么消除的了。

SMO算法:

 


 

松弛函数与惩罚函数

线性不可分的情况:

之前的SVM算法推导是建立在线性可分的情况下的,

但是其实许多情况是线性不可分的,之前的推导就不成立了,

所以我们做了改进,引入了松弛变量和惩罚函数。

为了使分错的点越少,那么红色的线往蓝色的线移动,蓝色的线往红色这边移动。

但这个函数并没有体现这一点,所以我们要加上一个惩罚函数。

线性不可分情形下的对偶问题:

就多了一个限制条件,


 


举个栗子:

式子中的y指的是分类标签,上面的垂直方向轴名称为x2.

α1y1+α2y2+α3y3=0,y1,y2=1,y3=-1.这是算法的约束条件,所以得到了目标函数。

当再偏导数为0的点取得的极值不是最小值时,那么最小值就应该时再边界上。

因为最小值对于连续函数只能是再极值点或者边界点。

 


 

SVM低维映射

非线性的情况:

这个需要画一个圆才能把两个样本分开来。

如何解决这些非线性问题?

下面这张图,再这个而为空间中,就可以画一条红线把两个类区分开来。

下面的两个圆圈,我们也没有办法找到一条直线把他们区分开来,所以我们把它转为三维空间。

三维空间就可以找到一个平面把两个类别分开。

同上:

二维投影视频:https://v.qq.com/x/page/k05170ntgzc.html

先将二维投影到三维,找到一个平面分割两个类别。

然后将平面与投影区域相切的曲线投影到二维空间,这个分类就完成了。

投影到高维空间:

import matplotlib.pyplot as plt
from sklearn import datasets
from mpl_toolkits.mplot3d import Axes3D

x_data,y_data = datasets.make_circles(n_samples=500,factor=.3,noise=.10)
plt.scatter(x_data[:,0],x_data[:,1],c=y_data)

z_data = x_data[:,0]**2+x_data[:,1]**2
ax = plt.figure().add_subplot(111,projection = '3d')
ax.scatter(x_data[:,0],x_data[:,1],z_data,c=y_data,s=10)#点为红色三角形
plt.show()


 


映射举例:

这样就会出现问题:

要如何解决这些问题呢?我们就引入了核函数。

核函数举例:

核函数那里是对x,y求内积,并非对f(x),f(y)求内积。

SVM优点:

 

人脸数据集:http://vis-www.cs.umass.edu/lfw/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值