用sklearn中的SVM畫資料的分類面

2021-09-29 03:39:52 字數 1399 閱讀 8455

參考部落格:

所用資料如下:

**如下,有詳細注釋:

from sklearn import svm

import numpy as np

import matplotlib.pyplot as plt

dataset = np.array([[1,2,1],

[2,3,1],

[3,3,1],

[2,1,-1],

[3,2,-1]])

x_train = dataset[:,0:2] #資料

y_train = dataset[:,2] #標籤

#print(x_train)

#print(y_train)

clf_linear = svm.svc(c=100.0,kernel='linear') #線性核函式,c為分類誤差容忍程度

clf_linear.fit(x_train,y_train) #訓練

w = clf_linear.coef_[0]

b = clf_linear.intercept_[0] #訓練後分類面的引數 w[0]*x[0] + w[1]*x[1] + b = 0

s_0 = clf_linear.support_vectors_[0] #負類的支援向量

s_1 = clf_linear.support_vectors_[1] #正類的支援向量

x = np.linspace(0,4,50) #畫分類面

y = (-x*w[0] - b)/w[1]

b_0 = -(w[0]*s_0[0] + w[1]*s_0[1]) #穿過負類支撐向量的直線

f_0 = (-x*w[0] - b_0)/w[1]

b_1 = -(w[0]*s_1[0] + w[1]*s_1[1]) # 穿過正類支撐向量的線

f_1 = (-x*w[0] - b_1)/w[1]

plt.figure()

for data in dataset: #資料點

if(data[2]==1):

plt.scatter(data[0],data[1],c='red')

else:

plt.scatter(data[0],data[1],c='black')

plt.plot(x,y)

plt.plot(x,f_0,'--')

plt.plot(x,f_1,'--')

結果如下:

sklearn中的支援向量機SVM(上)

1 svm是最接近深度學習的機器學習演算法。線性svm可以看成是神經網路的單個神經元,非線性的svm可以看成兩層的神經網路,非線性svm中如果新增多個核函式,則可以模仿多層的神經網路。2 邊際很小時,模型容易在訓練集上表現很好,卻在測試集上表現糟糕,即容易 過擬合 擁有更大邊際的決策邊界在分類中的泛...

支援向量機中SVM演算法 sklearn庫的實現

直接上 了 import numpy as np from sklearn.svm import svc from sklearn.preprocessing import standardscaler from sklearn.model selection import train test s...

支援向量機中SVM演算法 sklearn庫的實現

直接上 了 import numpy as np from sklearn.svm import svc from sklearn.preprocessing import standardscaler from sklearn.model selection import train test s...