1. 程式人生 > >SVM基本概要與sklearn.svm.svc 引數說明

SVM基本概要與sklearn.svm.svc 引數說明

SVM的基本概念

先介紹一些簡單的基本概念:

分隔超平面:將資料集分割開來的直線叫做分隔超平面。

超平面:如果資料集是N維的,那麼就需要N-1維的某物件來對資料進行分割。該物件叫做超平面,也就是分類的決策邊界。

間隔

一個點到分割面的距離,稱為點相對於分割面的距離。

資料集中所有的點到分割面的最小間隔的2倍,稱為分類器或資料集的間隔。

最大間隔:SVM分類器是要找最大的資料集間隔。

支援向量:坐落在資料邊際的兩邊超平面上的點被稱為支援向量

為什麼要求最大間隔
是因為幾何間隔與樣本的誤分次數間存在關係:

誤分次數 這裡寫圖片描述

其中的δ是樣本集合到分類面的間隔,R=max ||xi|| i=1,…,n,即R是所有樣本中(xi是以向量表示的第i個樣本)向量長度最長的值(也就是說代表樣本的分佈有多麼廣)。先不必追究誤分次數的具體定義和推導過程,只要記得這個誤分次數一定程度上代表分類器的誤差。而從上式可以看出,誤分次數的上界由幾何間隔決定!(當然,是樣本已知的時候)

sklearn.svc 引數

sklearn中的SVC函式是基於libsvm實現的,所以在引數設定上有很多相似的地方。(PS: libsvm中的二次規劃問題的解決演算法是SMO)。

對於SVC函式的引數解釋如下:(主要翻譯的sklearn 文件)

C: float引數 預設值為1.0

錯誤項的懲罰係數。C越大,即對分錯樣本的懲罰程度越大,因此在訓練樣本中準確率越高,但是泛化能力降低,也就是對測試資料的分類準確率降低。相反,減小C的話,容許訓練樣本中有一些誤分類錯誤樣本,泛化能力強。對於訓練樣本帶有噪聲的情況,一般採用後者,把訓練樣本集中錯誤分類的樣本作為噪聲。

kernel:

str引數 預設為‘rbf’

演算法中採用的核函式型別,可選引數有:

‘linear’:線性核函式

‘poly’:多項式核函式

‘rbf’:徑像核函式/高斯核

‘sigmod’:sigmod核函式

‘precomputed’:核矩陣

precomputed表示自己提前計算好核函式矩陣,這時候演算法內部就不再用核函式去計算核矩陣,而是直接用你給的核矩陣。核矩陣為如下形式:
這裡寫圖片描述
還有一點需要說明,除了上面限定的核函式外,還可以給出自己定義的核函式,其實內部就是用你自己定義的核函式來計算核矩陣。

degree: int型引數 預設為3

這個引數只對多項式核函式有用,是指多項式核函式的階數n

如果給的核函式引數是其他核函式,則會自動忽略該引數。

gamma: float引數 預設為auto

核函式係數,只對‘rbf’,‘poly’,‘sigmod’有效。

如果gamma為auto,代表其值為樣本特徵數的倒數,即1/n_features.

coef0: float引數 預設為0.0

核函式中的獨立項,只有對‘poly’和‘sigmod’核函式有用,是指其中的引數c

probability: bool引數 預設為False

是否啟用概率估計。 這必須在呼叫fit()之前啟用,並且會fit()方法速度變慢。

shrinking: bool引數 預設為True

是否採用啟發式收縮方式

tol: float引數 預設為1e^-3

svm停止訓練的誤差精度

cache_size: float引數 預設為200

指定訓練所需要的記憶體,以MB為單位,預設為200MB。

class_weight: 字典型別或者‘balance’字串。預設為None

給每個類別分別設定不同的懲罰引數C,如果沒有給,則會給所有類別都給C=1,即前面引數指出的引數C.

如果給定引數‘balance’,則使用y的值自動調整與輸入資料中的類頻率成反比的權重。

verbose : bool引數 預設為False

是否啟用詳細輸出。 此設定利用libsvm中的每個程序執行時設定,如果啟用,可能無法在多執行緒上下文中正常工作。一般情況都設為False,不用管它。

max_iter : int引數 預設為-1

最大迭代次數,如果為-1,表示不限制

random_state: int型引數 預設為None

偽隨機數發生器的種子,在混洗資料時用於概率估計。

fit() 方法用於訓練SVM,具體引數已經在定義SVC物件的時候給出了,這時候只需要給出資料集X和X對應的標籤y即可。

predict() 方法: 基於以上的訓練,對預測樣本T進行類別預測,因此只需要接收一個測試集T,該函式返回一個數組表示個測試樣本的類別。

屬性有哪些:

svc.n_support_:各類各有多少個支援向量

svc.support_:各類的支援向量在訓練樣本中的索引

svc.support_vectors_:各類所有的支援向量