欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Task03_SVM

程序员文章站 2024-01-18 22:22:58
...

SVM, 这里还是推荐阿泽的读书笔记。里面的内容写得很细。我还在理解当中。

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 = (a
x_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()

!Task03_SVM

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.

Task03_SVM

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()

`
Task03_SVM

推荐阅读