基于源代碼:《機器學習——支持向量機SVM之python實現簡單實例一》進行講解
1、線性模型
這里以二特征三類,一對多策略為案例
kernel = “linear”:線性核,參數有w,b
線性模型的決策邊界是:w0iTx0i + w1iTx1i + bi = 0
注:w0iTx0i + w1iTx1i + bi = 1和w0iTx0i + w1iTx1i + bi = -1是穿過支持向量的決策面,邊界
i的大小由類別的個數決定,i = n,說明決策函數有n個,因此查看參數的時候,w為一個nx2的數組,2代表的是特征的個數
classifier=svm.SVC(C=100,kernel='linear',gamma=100,decision_function_shape='ovr') # ovr:一對多策略
classifier.coef_#參數w
#[[-6.28425012 5.14207649][-8.45820407 6.92112224][-0.99813811 -2.00212539]]
classifier.intercept_#參數b
# [-0.07076934 -0.08011805 0.12861107]
圖中實線為分界面,虛線為決策邊界,穿過支持向量的邊界
#繪制邊界和分界面
def plot_boundary(w,b):plot_x1 = np.linspace(x[:, 0].min(), x[:, 0].max(), 200)#分界面w0x0 + w1x1 + b = 0plot_x21 = -w[0][0] / w[0][1] * plot_x1 - b[0] / w[0][1]plot_x31 = -w[1][0] / w[1][1] * plot_x1 - b[1] / w[1][1]plot_x41 = -w[2][0] / w[2][1] * plot_x1 - b[2] / w[2][1]#上邊界w0x0 + w1x1 + b = 1plot_up_x21 = -w[0][0] / w[0][1] * plot_x1 - b[0] / w[0][1] + 1/w[0][1]plot_up_x31 = -w[1][0] / w[1][1] * plot_x1 - b[1] / w[1][1] + 1/w[1][1]plot_up_x41 = -w[2][0] / w[2][1] * plot_x1 - b[2] / w[2][1] + 1/w[2][1]#下邊界w0x0 + w1x1 + b = -1plot_down_x21 = -w[0][0] / w[0][1] * plot_x1 - b[0] / w[0][1] - 1/w[0][1]plot_down_x31 = -w[1][0] / w[1][1] * plot_x1 - b[1] / w[1][1] - 1/w[1][1]plot_down_x41 = -w[2][0] / w[2][1] * plot_x1 - b[2] / w[2][1] - 1/w[2][1]#分界面plt.plot(plot_x1, plot_x21, c="black")plt.plot(plot_x1, plot_x31, "r")plt.plot(plot_x1, plot_x41, c="b")#上邊界plt.plot(plot_x1, plot_up_x21, "g--")plt.plot(plot_x1, plot_up_x31, "r--")plt.plot(plot_x1, plot_up_x41, "b--")#上邊界plt.plot(plot_x1, plot_down_x21, "g--")plt.plot(plot_x1, plot_down_x31, "r--")plt.plot(plot_x1, plot_down_x41, "b--")plot_boundary(w,b)
其中:
w=ceof_:
[[-6.28425012 5.14207649][-8.45820407 6.92112224][-0.99813811 -2.00212539]]
b=intercept_:
[17.45202353 23.14272776 11.8943489 ]
2、非線性模型
非線性模型使用的是高斯核,kernel = “rbf”,參數有:b
,w不需要計算
classifier=svm.SVC(C=100,kernel='rbf',gamma=100,decision_function_shape='ovr') # ovr:一對多策略
classifier.intercept_#參數b
# [-0.07076934 -0.08011805 0.12861107]
?