Task03_SVM
程序员文章站
2024-01-18 22:22:58
...
SVM, 这里还是推荐阿泽的读书笔记。里面的内容写得很细。我还在理解当中。
在下面模型得可视化中。w参数由于是2维张量,所以需要在SVC.coef_ 后面加[0]表示取第一维。
这里得问题点是:
在可视化得时候,这里在得到W参数后,a1 为什么要是W[0]/W[1]??
这是因为在二维平面上,我们考虑得决策边界得时候,为了方程的简写方便,写为了W^TX + B = 0. X为向量(X1,X2),这里X2就应该是Y。 所以我们求得的参数W[1]就应该是y的系数。 为了画图方便就需要把y的系数变为1,同时在
y1 = (ax_range - b) 同时除以W[1].
x_range = np.linspace(-3,3)
w =SVC.coef_[0]
b = SVC.intercept_
a = -w[0]
y = a*x_range - b
y1 = (a*x_range - b)/w[1]
print(SVC.coef_)
print(SVC.intercept_)
plt.figure()
plt.scatter(x_features[:,0],x_features[:,1],c = y_label,s =50, cmap='viridis')
plt.plot(x_range,y,'-c')
plt.plot(x_range,y1,'-c',color = 'r')
plt.show()
!
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets import make_blobs
X,Y = make_blobs(n_samples = 60, centers =2, random_state =0, cluster_std=0.4)
plt.scatter(X[:,0],X[:,1],c= Y, s = 50, cmap=plt.cm.Paired)
cls = SVC(kernel='linear')
cls= cls.fit(X,Y)
''获取参数
w = cls.coef_[0]
a = -w[0]/w[1]
y_3 = a*x_range - (cls.intercept_[0])/w[1]
x_range = np.linspace(0,3)
'''获得最大间隔'''
b_down =cls.support_vectors_[0] #这里的0代表的是第一种类别里面的支持向量,
#如果是N种类别,那么数字就是0 ---N-1
y_down = a*x_range + b_down[1] - a*b_down[0]
b_up = cls.support_vectors_[-1] #这里的-1代表的是最后一种类别里面的支持向量
y_up =a*x_range + b_up[1] - a*b_up[0]
plt.plot(x_range, y_3)
plt.fill_between(x_range,y_down,y_up,color='#AAAAAA')
plt.scatter(cls.support_vectors_[:,0],cls.support_vectors_[:,1],s = 80, edgecolors='b',facecolors = 'none')
plt.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets import make_blobs, make_circles
# X,Y = make_blobs(n_samples = 60, centers =2, random_state =0, cluster_std=0.9)
X,Y = make_circles(100,factor=.1, noise=.1, random_state=2020)
plt.scatter(X[:,0],X[:,1],c= Y, s = 50, cmap=plt.cm.Paired)
x_range = np.linspace(-1.5,4)
cls = SVC(C=1,kernel='rbf')
cls= cls.fit(X,Y)
ax=plt.gca()
x = np.linspace(-1,1)
y = np.linspace(-1,1)
x_1, y_1 = np.meshgrid(x,y)
P = np.zeros_like(x_1)
for i,xi in enumerate(x):
for j,yj in enumerate(y):
P[i,j] = cls.decision_function(np.array([[xi,yj]]))
ax.contour(x_1,y_1,P,colors ='k', levels =[-1,0,0.9],alpha = 0.5,
linestyles = ['--','-','--'])
plt.scatter(cls.support_vectors_[:,0],cls.support_vectors_[:,1],
edgecolors='b', s = 80, facecolors ='none')
plt.show()
`
推荐阅读