python代码:
import numpy as np
import pylab as pl
from sklearn import svm
#创建点
np.random.seed(0)
X = np.r_[ np.random.rand( 10 ,2 )*10 - [ 10,10] , np.random.rand( 10 ,2 )*10 + [ 10,10] ]
Y = [0] * 10 + [1] *10
# 训练模型
clf = svm.SVC(kernel="linear")
clf.fit(X,Y)
#获取分割超平面
w = clf.coef_ # 得到回归系数
intercept = clf.intercept_[0] # 得到截距
a = - w[0][0] / w[0][1] # 得到斜率
xx = np.linspace(-50,50) # 初始化 -5 到 5 的一个等差数列
yy = a * xx - ( intercept / w[0][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] ) # 得到最上边的超平面
#用 pylab画图
pl.plot(xx,yy)
pl.plot(xx,yy_down)
pl.plot(xx,yy_up)
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()
预测结果: