參考部落格:
所用資料如下:
**如下,有詳細注釋:
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...