支持向量机(一)

svm学习(1)

支持向量机(Support Vector Machine),简称svm,属于监督学习模型,可以分析数据,识别模式,用于分类和回归分析。

线性可分:

支持向量机用于最大间隔的分割数据,这体现了对于分类的新方法,相对于knn更有效,更准确的将一个未知的点分到正确的地方。但是也面临着一些问题,首先svm处理的数据是线性可分的,就是可以通过一条线来划分界限,而svm就是来求这条分界线,举个例子:

             

图一 

                                      

 图二

比较图一和图二可知,图一不可以通过一条线来讲整个图分为两部分,属于线性不可分;而图二已经明显的给出了区分,属于线性可分。

分割超平面,间隔:

所谓分割超平面就是分割线,将这两类点分成两部分。

了解了svm的应用范围就对于接下来的学习更方便了,看到图二有没有想过这个问题,分割两点的线有很多,可以想图三,或者是图四,

   

图三 


  图四

但是对于正常人来说图三才是最好的选择。此时就涉及到一个知识点就是间隔,图三图四中超平面和点的间隔几乎为零,所有看着不是很标准,而图二就好多了,间隔比较大,所有图二是最好的选择。

支持向量:

 

图五

图五中的A,B两个点就是支持向量,离分割平面最近的点。

算法:

现在的问题是怎么求这条线了,通常用来表示超平面,

 显然,如果 f(x)=0,那么 x 是位于超平面上的点。我们不妨要求对于所有满足f(x)<0 的点,其对应的 y =-1 ,而f(x)<0 则对应y=1的数据点。

一般的求法还是通过A,B两点的中点来确定超平面,涉及到太多数学方面的知识。

机器学习普通的展示代码:

from sklearn import svm

X = ([2,2],[1,1],[2,3])
Y = (1, 0 , 1)
#引用svm中的库进行建模
clf = svm.SVC(kernel='linear')
clf.fit(X, Y)
#预测结果
print clf.predict([2,5])

#参考网站http://scikit-learn.org/stable/modules/svm.html

用于打印图形的代码:

# coding=utf-8
print(__doc__)

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

#随机种子
np.random.seed(0)
#randn(x,y)+[σ,μ]返回一个样本,具有标准正态分布,x组y维,σ标准差,μ期望
X = np.r_[np.random.randn(20,2)-[2,2], np.random.randn(20,2)+[2,2]]
Y = [0]*20 + [1]*20
#http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
clf = svm.SVC(kernel='linear')#线性的
clf.fit(X, Y)

w = clf.coef_[0]#分配给特征的权重(原始问题中的系数)。
a = -w[0]/w[1]
xx = np.linspace(-5,5)#在指定的间隔内返回均匀间隔的数字。返回数字间隔均匀的样本,按间隔 [start, stop]计算。
yy = a*xx - (clf.intercept_[0])/w[1]

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 'xx:',xx
print 'yy',yy
print 'b',b

#插入线k-是实线,k--是虚线
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.axis('tight')
pl.show()


 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值