Python-SVM实践上

首先调用sklearn实现上篇末尾的例子:

from sklearn import svm

x = [[2,0], [1,1], [2,3]]
y = [0, 0, 1]
clf = svm.SVC(kernel = 'linear')
#kernel是核函数,后文中详细介绍
clf.fit(x, y)
#将点和相应类别标记分别传入clf.fit() 建立SVM

#print clf

print clf.support_vectors_
#打印支持向量 输出[[1 ,1], [2 ,3]]

print clf.support_
#打印支持向量在传入的列表x中的下标  输出[1, 2]

print clf.n_support_
#两侧打印支持向量的个数 输出[1, 1]

print clf.predict([10, 0])
#调用predict进行预测,传入点,输出类别  输出[1]

下面是一个更复杂的例子,用随机函数产生40个点,20个一组分为两组,建立SVM用工具画出点和超平面。

import numpy as np
import pylab as pl
from sklearn import svm
#导入科学计算相关的numpy包和画图要用的pylab包,命名别名np,pl,以及svm

np.random.seed(0)
#seed里面的数字不变每次运行产生的随机数将是同一组
x = np.r_[np.random.randn(20, 2) - [2, 2], np.random.randn(20, 2) + [2, 2]]
y = [0] * 20 + [1] * 20
#产生两组随机数,和他们的classlabel标记,+-[2,2]是正态分布保证他们的线性可区分

clf = svm.SVC(kernel = 'linear')
clf.fit(x, y)
#将x,y传入fit建立svm模型
#print(clf.coef_)

w = clf.coef_[0]  
#调用coef_取得w值    
a = -w[0] / w[1]
xx = np.linspace(-5, 5)
#linspace取得-5到5之间的值用于画线
yy = a * xx - (clf.intercept_[0] / w[1]) 
#点斜式方程这样就取得了yy的值
#后面就利用xx, 和yy的值画出分界的直线  

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])
#得到分界线上方和下方与之平行的边际直线的xx和yy后面一并画出

#print "w: ", w
#print "a: ", a

#print "suport_vectors_ :", clf.support_vectors_
#print "clf.coef:  ", clf.coef_

pl.plot(xx, yy, 'k-')
pl.plot(xx, yy_down, 'k--')
pl.plot(xx, yy_up, 'k--')
#用plot画出3条线,第三个参数设置实线和虚线

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)
#用scatter将支持向量单独圈出来

pl.axis('tight')
pl.show()

运行结果如下
这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值