import numpy as np
import pylab as pl
from sklearn import svm
X = np.array([[3, 3], [4, 3], [1, 1]])
Y = np.array([1, 1, -1])
clf = svm.SVC(kernel="linear") # 定义分类器,核函数为线性核符合题意
clf.fit(X, Y) # 即计算出划分超平面
w = clf.coef_[0] # w 是一个二维数据,coef 就是 w = [w0,w1]
k = -w[0] / w[1] # 斜率,即w
xx = np.linspace(-6, 6) # 用于画超平面
# clf.intercept[0] 即b
yy = k * xx - (clf.intercept_[0]) / w[1] # 带入 x 的值,获得直线方程
b = clf.support_vectors_[0]
yy_down = k * xx + (b[1] - k * b[0]) # 计算下界
b = clf.support_vectors_[-1]
yy_up = k * xx + (b[1] - k * b[0]) # 计算上界
print("支持向量,即最大间隔边界上的点", clf.support_vectors_)
print("属于支持向量的点在原数据集中的索引", clf.support_)
print("在每一个类中属于支持向量的个数:", clf.n_support_)
print("(4,4)的预测值为", clf.predict([[4, 4]]))
print("超平面的w", w)
print("超平面的b", clf.intercept_[0])
# 绘制划分超平面,边际平面和样本点
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)
pl.axis('tight')
pl.show()
n
在这里插入代码片
SVM线性调包
最新推荐文章于 2023-02-07 10:16:43 发布