作者|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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/174048.html
標籤:其他
上一篇:Python正則運算式簡介
下一篇:使用Python進行例外檢測
