作者|Soner Yıldırım
編譯|VK
來源|Towards Datas Science
支持向量機(SVM)是一種應用廣泛的有監督機器學習算法。它主要用於分類任務,但也適用於回歸任務。
在這篇文章中,我們將深入探討支持向量機的兩個重要超參數C和gamma,並通過可視化解釋它們的影響。所以我假設你對算法有一個基本的理解,並把重點放在這些超參數上。
支持向量機用一個決策邊界來分離屬於不同類別的數據點。在確定決策邊界時,軟間隔支持向量機(soft margin是指允許某些數據點被錯誤分類)試圖解決一個優化問題,目標如下:
-
增加決策邊界到類(或支持向量)的距離
-
使訓練集中正確分類的點數最大化
顯然,這兩個目標之間有一個折衷,它是由C控制的,它為每一個錯誤分類的數據點增加一個懲罰。
如果C很小,對誤分類點的懲罰很低,因此選擇一個具有較大間隔的決策邊界是以犧牲更多的錯誤分類為代價的。
當C值較大時,支持向量機會盡量減少誤分類樣本的數量,因為懲罰會導致決策邊界具有較小的間隔。對於所有錯誤分類的例子,懲罰是不一樣的。它與到決策邊界的距離成正比。
在這些例子之后會更加清楚。讓我們首先導入庫並創建一個合成數據集。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.svm import SVC
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=200, n_features=2,
n_informative=2, n_redundant=0, n_repeated=0, n_classes=2,random_state=42)
plt.figure(figsize=(10,6))
plt.title("Synthetic Binary Classification Dataset", fontsize=18)
plt.scatter(X[:,0], X[:,1], c=y, cmap='cool')
我們先訓練一個只需調整C的線性支持向量機,然后實現一個RBF核的支持向量機,同時調整gamma參數。
為了繪制決策邊界,我們將使用Jake VanderPlas編寫的Python數據科學手冊中SVM一章中的函數:https://jakevdp.github.io/PythonDataScienceHandbook/
我們現在可以創建兩個不同C值的線性SVM分類器。
clf = SVC(C=0.1, kernel='linear').fit(X, y)
plt.figure(figsize=(10,6))
plt.title("Linear kernel with C=0.1", fontsize=18)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='cool')
plot_svc_decision_function(clf)
只需將C值更改為100即可生成以下繪圖。
當我們增加C值時,間隔會變小。因此,低C值的模型更具普遍性。隨着數據集的增大,這種差異變得更加明顯。
線性核的超參數只達到一定程度上的影響。在非線性內核中,超參數的影響更加明顯。
Gamma是用於非線性支持向量機的超參數。最常用的非線性核函數之一是徑向基函數(RBF)。RBF的Gamma參數控制單個訓練點的影響距離。
gamma值較低表示相似半徑較大,這會導致將更多的點組合在一起。對於gamma值較高的情況,點之間必須非常接近,才能將其視為同一組(或類)。因此,具有非常大gamma值的模型往往過擬合。
讓我們繪制三個不同gamma值的支持向量機的預測圖。
clf = SVC(C=1, kernel='rbf', gamma=0.01).fit(X, y)
y_pred = clf.predict(X)
plt.figure(figsize=(10,6))
plt.title("Predictions of RBF kernel with C=1 and Gamma=0.01", fontsize=18)
plt.scatter(X[:, 0], X[:, 1], c=y_pred, s=50, cmap='cool')
plot_svc_decision_function(clf)
只需更改gamma值即可生成以下繪圖。
隨着gamma值的增加,模型變得過擬合。數據點需要非常接近才能組合在一起,因為相似半徑隨着gamma值的增加而減小。
在gamma值為0.01、1和5時,RBF核函數的精度分別為0.89、0.92和0.93。這些值表明隨着gamma值的增加,模型對訓練集的擬合度逐漸增加。
gamma與C參數
對於線性核,我們只需要優化c參數。然而,如果要使用RBF核函數,則c參數和gamma參數都需要同時優化。如果gamma很大,c的影響可以忽略不計。如果gamma很小,c對模型的影響就像它對線性模型的影響一樣。c和gamma的典型值如下。但是,根據具體應用,可能存在特定的最佳值:
0.0001 < gamma < 10
0.1 < c < 100
參考引用
https://jakevdp.github.io/pythondastaciencemanual/05.07-support-vector-machines.html
原文鏈接:https://towardsdatascience.com/svm-hyperparameters-explained-with-visualizations-143e48cb701b
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/