sklearn-SVC實現與類參數
SVC繼承了父類BaseSVC
SVC類主要方法:
★__init__() 主要參數:
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_:各類所有的支持向量
# -*- coding:utf-8 -*-
from sklearn.svm import SVC
import matplotlib.pyplot as plt
import numpy as np
X=np.array([[1,1],[1,2],[1,3],[1,4],[2,1],[2,2],[3,1],[4,1],[5,1],
[5,2],[6,1],[6,2],[6,3],[6,4],[3,3],[3,4],[3,5],[4,3],[4,4],[4,5]])
Y=np.array([1]*14+[-1]*6)
T=np.array([[0.5,0.5],[1.5,1.5],[3.5,3.5],[4,5.5]])
svc=SVC(kernel='poly',degree=2,gamma=1,coef0=0)
svc.fit(X,Y)
pre=svc.predict(T)
print pre
print svc.n_support_
print svc.support_
print svc.support_vectors_
運行結果:
[ 1 1 -1 -1] #預測結果
[2 3] #-1類和+1類分別有2個和3個支持向量
[14 17 3 5 13] #-1類支持向量在元訓練集中的索引為14,17,同理-1類支持向量在元訓練集中的索引為3,5,13
[[ 3. 3.] #給出各支持向量具體是哪些,前兩個是-1類的
[ 4. 3.]
[ 1. 4.] #后3個是+1的支持向量
[ 2. 2.]
[ 6. 4.]]
結果如圖所示。