sklearn包中的svm详解(coef_和intercept_)


这里讲解我以二维空间为例。首先定义两个数组:

c = [[2, 0], [1, 1], [2, 3]]
c1 = [0, 0, 1] 

简单分析下:分别有三个点(2,0),(1,1)(2,3):
(2,0)和(1,1)对应于0类,(2,3)对应于1类。
边界点分别为(1,1)和(2,3)
sklearn包中的svm详解(coef_和intercept_)_第1张图片


画出边界线y1,y2
w1y1+w0x1+b1=0
y1= -w0/w1*x1-b1/w1
假设斜率为a,a=-w0/w1

w = clf.coef_  # 获取w
a = -w[0] / w[1]  # 斜率

知道斜率后,我们可以根据方程y=ax+b求出b来,带入点(2,3)b = 3-2a
y2原理和y1一样

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])#上边界

画出分割线y3
同理,斜率仍然为a,

clf.intercept_[0]#用来获得截距(这里共有两个值,分别为到x和到y的)

根据y1= -w0/w1*x1-b1/w1
我们得到截距b1和w1后,就可以求出所需要的公式

yy = a * xx - (clf.intercept_[0]) / w[1]

源代码:

from skleran import svm 
import numpy as np 
import matplotlib.pyplot as plt
x = [[2,0], [1, 1], [2, 3]]
y = [0, 0, 1]
clf = svm.SVC(kerner='linear')
clf.fit(x, y)
w = clf.coef_[0]
a = -w[0]/w[1]
xx = np.linspace(-5, 5)
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])
plt.figure(figsize=(8, 4))
plt.plot(xx, yy)
plt.plot(xx, yy_down)
plt.plot(xx, yy_up)
plt.scatter(clf.support_vectors_[:, 0], clf.support_vectors_[:, 1], s=80)
plt.axis('tight)
plt.show()```

你可能感兴趣的:(sklearn)