机器学习:支持向量机

本文围绕支持向量机(SVM)展开,介绍其基本思路是在样本空间找划分超平面分开不同类别样本,使边际最大。还阐述了求解凸优化问题的方法,如拉格朗日乘子法和SMO算法。此外,讲解了核函数可简化运算,最后说明了SVM不易过拟合、依赖支持向量及易泛化等优点。

1 间隔与支持向量

基本思路:基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开。
在这里插入图片描述
直观上看,应该找位于两类训练样本“正中间”的划分超平面,即上图中红色那个。这样划分超平面所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强。
超平面的线性方程:
在这里插入图片描述
其中w=(w1,w2,⋯,wN)为法向量,决定了超平面的方向,b为位移项,决定了超平面与原点之间的距离。
目标:SVM寻找区分两类的超平面(hyper plane), 使边际(margin)最大。
在这里插入图片描述
? ∙ ? + ? = 1
? ∙ ? + ? = −1
为什么是正负一?因为进行同比例缩放,例如:假设? ∙ ? + ? = 2,等式左右两边同除以2后变为0.5*(? ∙ ? + ?)= 1,这里的w和b还是变量直接就等价于? ∙ ? + ? = 1
推导:? =2/||w|| (||w|| 为模)
方法一:
? ∙ ?1 + ? = 1
? ∙ ?2 + ? = −1
? ∙ (?1 − ?2) = 2
||w||(?1 − ?2) cos ? = 2
||?| *d=2
d=2/||w||
方法二:
由于超平面由w和b唯一确定,故可以将超平面函数记为(w,b)
又根据,点到平面的距离公式可得,任一点x到超平面(w,b)的距离表示为:
在这里插入图片描述
在这里插入图片描述

2 svm的简单例子

from sklearn import 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_)
# 有几个支持向量
print(model.n_support_)
model.predict([[4,3]])
model.coef_
model.intercept_

3 对偶问题

求??? 0.5*||w||*||w||,现在已经将问题变为求解凸优化问题,求解凸优化问题有三种方法。
在这里插入图片描述
拉格朗日乘子法
在这里插入述
进一步简化为对偶问题
在这里插入图片描述
在这里插入图片描述
由此可以求出最优解?∗,求出该值后将其带入可以得到:
在这里插入图片描述

SMO算法

Microsoft Research的John C. Platt在1998年提出针对线性SVM和数据稀疏时性能更优
在这里插入图片描述
基本思路是先根据约束条件随机给?赋值。然后每次选取两个?,调节这两个?使得目标函数最小。然后再选取两个?,调节?使得目标函数最小。以此类推

4 核函数

我们可以构造核函数使得运算结果等同于非线性映射,同时运算量要远远小于非线性映射。
在这里插入图片描述
核函数举例:
假设定义两个向量: x = (x1, x2, x3); y = (y1, y2, y3)
定义高维映射方程:f(x) = (x1x1, x1x2, x1x3, x2x1,
x2x2, x2x3, x3x1, x3x2, x3x3)
假设x = (1, 2, 3),y = (4, 5, 6).
f(x) = (1, 2, 3, 2, 4, 6, 3, 6, 9)
f(y) = (16, 20, 24, 20, 25, 36, 24, 30, 36)
求内积<f(x), f(y)> = 16 + 40 + 72 + 40 + 100+ 180 + 72 + 180 + 324 = 1024
定义核函数:K(x,y) = (<f(x), f(y)>)^2
K(x,y) = (4 + 10 + 18)^2 = 1024
同样的结果,使用核方法计算容易得多。

5 SVM的优点

  1. 训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的维度决定的。所以SVM不太容易产生过拟合。
  2. SVM训练出来的模型完全依赖于支持向量(Support Vectors), 即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍然会得到完全一样的模型。
  3. 一个SVM如果训练得出的支持向量个数比较小,SVM训练出的模型比较容易被泛化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值