做者|Soner Yıldırım
編譯|VK
來源|Towards Datas Sciencehtml
支持向量機(SVM)是一種應用普遍的有監督機器學習算法。它主要用於分類任務,但也適用於迴歸任務。python
在這篇文章中,咱們將深刻探討支持向量機的兩個重要超參數C和gamma,並經過可視化解釋它們的影響。因此我假設你對算法有一個基本的理解,並把重點放在這些超參數上。git
支持向量機用一個決策邊界來分離屬於不一樣類別的數據點。在肯定決策邊界時,軟間隔支持向量機(soft margin是指容許某些數據點被錯誤分類)試圖解決一個優化問題,目標以下:github
增長決策邊界到類(或支持向量)的距離算法
使訓練集中正確分類的點數最大化dom
顯然,這兩個目標之間有一個折衷,它是由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.0一、1和5時,RBF核函數的精度分別爲0.8九、0.92和0.93。這些值代表隨着gamma值的增長,模型對訓練集的擬合度逐漸增長。
對於線性核,咱們只須要優化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/