机器学习(支持向量机-SVM)

一、深度学习的一般框架:
训练集->提取特征向量->结合一定算法(分类器:比如决策树,KNN)->得到结果

二、向量机的概念:
这里写图片描述
如图所示,就是一个二维几何空间中的分类。中间那条直线就是这个分类的超平面。我们不难发现,用来确定这条直线其实只需要两条虚线上的三个点就够了,其他距离很远的点,虽然是训练样本,但是因为特征太明显,不会引起歧义,也对我们分类的超平面的确定意义并不大。所以只要找到最靠近分类平面的这些点,我们就能够很好的确定出所需要的超平面。而这些点,在几何空间中也表示向量,那么就把这些能够用来确定超平面的向量称为支持向量(直接支持超平面的生成),于是该算法就叫做支持向量机了。所以这个算法的好处就很明显了,任你训练样本如何庞大,我只需要找到支持向量就能很好的完成任务了,计算量就大大缩小了。

SVM寻找区分两类的超平面,使边际最大,选取使边际最大的超平面,要做到超平面到一侧最近点的距离等于到另一侧最近点的距离,两侧两个超平面平行。

SVM分为线性可区分和线性不可分

三、定义与公式建立
1.超平面定义:
这里写图片描述
W = {w1,w2,w3…..wn}
W为权重向量,n是特征值的个数,X是训练实例,b是截距

2.线性分类
在训练数据中,每个数据都有n个的属性和一个二类类别标志,我们可以认为这些数据在一个n维空间里。我们的目标是找到一个n-1维的超平面,这个超平面可以将数据分成两部分,每部分数据都属于同一个类别。
其实这样的超平面有很多,我们要找到一个最佳的。因此,增加一个约束条件:这个超平面到每边最近数据点的距离是最大的。也成为最大间隔超平面。这个分类器也成为最大间隔分类器,支持向量机是一个二类分类器。

3.假设二维特征向量:X=(x1,x2)
把b想象为额外的weigh

超平面方程变为:
w0+w1*x1+w2**x2=0

所有超平面右上方的点满足:
w0+w1*x1+w2**x2>0

所有超平面左下方的点满足:
w0+w1*x1+w2**x2<0

调整weight,使超平面定义边际的两边:
H1:w0+w1*x1+w2**x2>=1 for y1=+1,
H1:w0+w1*x1+w2**x2<=-1 for y1=-1

综合以上两式,得:
yi(w0+w1*x1+w2**x2)>=1

所有坐落在边际两边的超平面上的被称作“支持向量”,分界的超平面和H1或H2上任意一点的距离为:
1/||w||
所以最大边际距离为:
2/||w||

3.如何找出最大边际的超平面:
利用一些数学推导,以上公式可变为有限制的凸优化问题
利用KKT条件和拉格朗日公式

使用sklearn模块中的svm调用支持向量机分类器:
(1)少量训练集:

# -*- coding:utf-8 -*- 
from sklearn import svm

X = [[2,0],[1,1],[2,3]]#平面上的三个点
y = [0,0,1]#标记,第一个点和第二点属于第0类,第三个点属于第一类

clf = svm.SVC(kernel='linear')#linear为小写,线性核函数

clf.fit(X,y)#创建向量机模型

print(clf)
print(clf.support_vectors_)#打印出支持向量
print(clf.support_)#打印出给出的向量中属于支持向量的向量的index下标

print(clf.n_support_)#打印出两个类中各自找出的支持向量的个数

print(clf.predict([[2,0],]))#必须传入一个嵌套列表

运行结果:

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape='ovr', degree=3, gamma='auto', kernel='linear',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
[[ 1.  1.]
 [ 2.  3.]]
[1 2]
[1 1]
[0]

2.训练集多的支持向量机代码实现:

# -*- coding:utf-8 -*-

print(__doc__)

import numpy as np
import matplotlib.pyplot as pl  #python中的绘图模块
from pylab import show

from sklearn import svm

np.random.seed(
  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值