1. 程式人生 > 程式設計 >sklearn-SVC實現與類引數詳解

sklearn-SVC實現與類引數詳解

sklearn-SVC實現與類引數

對應的API:http://scikit-learn.sourceforge.net/stable/modules/generated/sklearn.svm.SVC.html

它是基於libsvm實現的。隨著樣本數量的增加,擬合時間的複雜度要高於二次,這就使得當樣板數量超過一萬個時,很難擴充套件到資料集中。

在多類處理時,是按照1對1的方案進行處理的。

函式的的定義為:

 def __init__ (self,C=1.0,kernel='rbf',degree=3,gamma='auto',coef0=0.0,verbose=False,max_iter=-1,decision_function_shape='ovr',random_state=None):

引數的含義:

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

- kernel: str引數 預設為‘rbf‘,演算法中採用的核函式型別,可選引數有:

linear:線性核函式

poly:多項式核函式

rbf:徑像核函式/高斯核

sigmod:sigmod核函式

precomputed:核矩陣

- degree :int型引數 (default=3),這個引數只對多項式核函式(poly)有用,是指多項式核函式的階數n,如果給的核函式引數是其他核函式,則會自動忽略該引數。

- gamma:float引數,預設為auto核函式係數,只對'rbf'、 ‘poly' 、 ‘sigmoid'有效。

如果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,則該類別的懲罰係數為class_weight[i]*C,如果沒有給,則會給所有類別都給C=1,即前面引數指出的引數C。

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

- verbose :bool引數 預設為False

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

- max_iter :int引數 預設為-1

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

- random_state:int型引數 預設為None

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

SVC的方法

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

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

3、predict_proba():返回每個輸入類別的概率,這與predict方法不同,predict方法返回的輸入樣本屬於那個類別,但沒有概率。使用此方法時,需要在初始化時,將 probability引數設定為True。

例如:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# we create 40 separable points
np.random.seed(0)
X = np.r_[np.random.randn(20,2) - [2,2],np.random.randn(20,2) + [2,2]]
Y = [0] * 20 + [1] * 20
# fit the model
clf = svm.SVC(kernel='linear',probability=True)
clf.fit(X,Y)
print(clf.predict_proba([[-0.1,0.7],[0.3,0.5]]))
#result
#[[ 0.41844015 0.58155985]
#[ 0.34810738 0.65189262]]

如果初始化時不適用probability引數:

clf = svm.SVC(kernel='linear')
clf.fit(X,Y)
print(clf.predict([[-0.1,0.5]]))
# get the separating hyperplane
w = clf.coef_[0]
#輸出的結果為:[1,1]

屬性有哪些:

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

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

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

以上這篇sklearn-SVC實現與類引數詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。