机器学习算法-SVM

1、SVM原理
http://blog.youkuaiyun.com/alvine008/article/details/9097105

2、python实现

#coding:gbk
#coding:utf-8
'''
Created on 2016年6月5日

@author: Administrator
'''
import numpy as np
import pylab as pl
from sklearn import svm

#创建40个线性可分的点
np.random.seed(0)#0是为了每次运行时随机产生的点不变
X = np.r_[np.random.randn(20,2) - [2,2],np.random.randn(20,2) + [2,2]]
Y = [0]*20 + [1]*20#将前20个点归类为0类,后20个点归类为1类

#建立模型
clf = svm.SVC(kernel = 'linear')
clf.fit(X,Y)

#得到可分的超平面
w = clf.coef_[0]#得到w是二维的,w0,w1
a = -w[0]/w[1]#直线的斜率
xx = np.linspace(-5,5)#在(-5,5)之间产生连续的x的值
yy = a*xx - (clf.intercept_[0]/w[1])#计算出y的值

#通过支持向量画两边的平行线
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_)

#画出线,点和最近的向量
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()

结果:
w: [ 0.90230696 0.64821811]
a: -1.39198047626
support_vectors_: [[-1.02126202 0.2408932 ]
[-0.46722079 -0.53064123]
[ 0.95144703 0.57998206]]
clf.coef_: [[ 0.90230696 0.64821811]]

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值