当前位置: 首页 > news >正文

ML_SVM算法

支持向量机(support vector machine)

背景;

  深度学习(2012)出现之前,SVM被认为机器学习中近十几年来最成功的,表现最好的算法

机器学习的一般框架;

  训练集=>提取特征向量=>结合一定的算法(分类器:比如决策树,KNN)=>得到结果

 

SVM寻找区分两类的超平面(hyper plane),使边际(margin)最大

  总共可以有多少个可能的超平面?无数条

  如何选取使边际(margin)最大的超平面(max margin hyperplane)MMH

  超平面到一侧最近点的距离等于到另一侧最近点点的距离,两侧的两个超平面平行

线性可区分(linear separable)和线性不可区分(linear inseparable)

定义与公式建立

  超平面可以定义为:

   

n是特征值的个数

    X:训练实例

    b:bias偏向

假设2维特征向量:X=(X1,X2)

把b想象成额外的weight

超平面方程变为:

             

所有超平面右上方的点满足;

              

所有超平面左下方的点满足;

            

  调整weight,使超平面定义边际的两边;

  综合以上两式,得到;(1)

 

  所有坐落在边际的两边的超平面上的点被称作“支持向量(support vectors)”

  分界的超平面和H1或H2上任意一点的距离为

 

SVM如何找出最大边际的超平面呢(MMH)?

  

 

     

其中,yi是支持向量点Xi的类别标记    XT是要测试的实例

  l是支持向量点的个数

  根据得出符号的正负决定测试实例的归类

 

 

 

from sklearn import svm

x=[[2,0],[1,1],[2,3]]
y=[0,0,1]           #向量点的类别标记
clf=svm.SVC(kernel='linear')
clf.fit(x,y)           #算出超平面,保存在clf

print clf

#get support vectors
print clf.support_vectors

#get indices of support vectors   索引
print clf.support_

#get number of support vectors for each class
print clf.n_suppoart_

print clf.predict([2,0])

 

 

 

import numpy as np
import pylab   as pl
from sklearn import svm

#we creat 40 separable points 
np.random.seed(0)                     #让下次还随机产生同样的点
x=np.r_[np.random.randn(20,2)-[2,2],np.random.randn(20,2)+[2,2]]
y=[0]*20+[1]*20            

#fit the model
clf=svm.SVC(kernel='linear')
clf.fit(x,y)           #算出超平面,保存在clf

#get the separating hyperplane
w=clf.coef_[0]
a=-w[0]/w[1]         #直线的斜率
xx=np.linspace(-5,5)  #从-5到5产生连续的x的值
yy=a*xx-(clf.intercept_[0])/w[1]


#plot the parallels to the separating hyperplane that pass through the support vectors
b=clf.support_vectors[0]
yy_down=a*xx+(b[1]-a*b[0])
b=clf.support_vectors[-1]
yy_up=a*xx+(b[1]-a*b[0])


print "w: ",w
print "a: ",a
print "support_vectors_: ”,clf.support_vectors_
print "clf.coef_; ”,clf.coef_



#plot the line,the points, and the nearest vectors to the plane
pl.plot(xx,yy,'k-')
pl.plot(xx,yy_down,'k--')
pl.plot(xx,yy_up,'k--')

pl.scatter(clf.support_vectors_[:,0],clf.support_vectors_[:,1],
               s=80,facecolors='none')
pl.scatter(x[:. 0],x[:, 1],c=Y,cmap=pl.cm.paired)

pl.ais('tight')
pl.show()
        

 

SVM算法下:

1.1 训练好的模型的算法复杂度是由支持向量的个数决定的,而不是由数据的维度决定的。所以SVM不太容易产生overfitting

1.2 SVM训练出的模型完全依赖于支持向量,即使训练集里面所有非支持向量的点都被去除,重复训练过程,结果仍然会得到完全一样的模型。

1.3 一个SVM如果训练得出得支持向量个数比较小,SVM训练出的模型比较容易被泛化。

2. 线性不可分的情况(linearly inseparable case)

2.1 数据集在空间中对应的向量不可被一个超平面区分开

2.2 两个步骤来解决:

  2.2.1 利用一个非线性的映射把原数据集中的向量点转化到一个更高维度的空间中

  2.2.2 在这个高维度的空间中找一个线性的超平面来根据线性可分的情况处理

 

 

4. SVM扩展可解决多个类别分类问题

  对于每个类,有一个当前类和其他类的二类分类器(one-vs-rest)

 

 

 

 

            

转载于:https://www.cnblogs.com/wuweixiong/p/10436270.html

相关文章:

  • 第一周作业
  • 来一局紧张刺激的吃鸡——浅谈装饰者模式
  • python爬虫之selenium,谷歌无头浏览器
  • 100道C#面试题(.net开发人员必备)
  • P1601 A+B Problem(高精)
  • redis、mysql、mongdb的比较
  • PAT基础6-12
  • bzoj3684: 大朋友和多叉树(拉格朗日反演+多项式全家桶)
  • 关于 RESTful API 中 HTTP 状态码的定义
  • 第一章:打印直方图
  • 第九届蓝桥杯省赛--方格计数
  • 数列分块(数据结构)学习笔记
  • 程序员:想知道你每天按了多少次键盘吗?
  • 分布式和集群的区别
  • Android中 Git 使用中几个概念
  • 【5+】跨webview多页面 触发事件(二)
  • 【Amaple教程】5. 插件
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • HashMap ConcurrentHashMap
  • JS专题之继承
  • MQ框架的比较
  • mysql 5.6 原生Online DDL解析
  • nodejs实现webservice问题总结
  • NSTimer学习笔记
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • text-decoration与color属性
  • Vue 重置组件到初始状态
  • 服务器从安装到部署全过程(二)
  • 聊聊hikari连接池的leakDetectionThreshold
  • 前端_面试
  • 我的面试准备过程--容器(更新中)
  • 我有几个粽子,和一个故事
  • 写给高年级小学生看的《Bash 指南》
  • 译米田引理
  • MyCAT水平分库
  • 阿里云服务器如何修改远程端口?
  • 如何在招聘中考核.NET架构师
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (3)nginx 配置(nginx.conf)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (算法)求1到1亿间的质数或素数
  • (五)网络优化与超参数选择--九五小庞
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (译)计算距离、方位和更多经纬度之间的点
  • (转载)Linux网络编程入门
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net IOC框架入门之一 Unity
  • .NET构架之我见
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理