更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython
scikit-learn庫之支持向量機
在scikit-learn庫中針對數據是否線性可分,主要將支持向量機分爲如下三種分類模型LinearSVC
、SVC
和NuSVC
;還有三種迴歸模型LinearSVR
、SVR
和NuSVR
。算法
接下來將會討論上述六者的區別,因爲SVC
應用場景較爲普遍,主要細講SVC
,其餘的只講與SVC
的區別。因爲是從官方文檔翻譯而來,翻譯會略有偏頗,有興趣的也能夠去scikit-learn官方文檔查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.svm數組
1、SVC
1.1 使用場景
SVC
模型基於較爲靈活,既能夠支持線性可分數據,又能夠支持線性不可分數據的分類。緩存
1.2 代碼
import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
clf = SVC(gamma='auto')
clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto', kernel='rbf',
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
print(clf.predict([[-0.8, -1]]))
[1]
print(clf.fit_status_)
0
1.3 參數詳解
- C:懲罰係數,float類型。若是C越大,懲罰程度越大,模型泛化能力下降;若是C越小,則允許訓練樣本中有一些誤分類錯誤樣本,泛化能力強,通常噪聲較多推薦C小點。默認爲1。
- kernel:核函數,str類型。默認爲'rbf',可選核函數有
- 'linear':線性核函數
- 'poly':多項式核函數
- 'rbf':徑向核函數(高斯核)
- 'sigmoid':Sigmoid核函數
- 'precomputed':核矩陣,即本身不使用核函數的狀況下已經計算了核函數矩陣
- degree:核函數參數,int類型。只有當kernel='poly'時纔有用,即表示多項式核函數的階數,對應核函數中的\(d\)。默認爲3。
- gamma:核函數參數,float類型。只有當kernel={'rbr','poly','sigmoid'}時纔有用,對應核函數中的\(\gamma\)。默認爲'auto',即表示其值爲樣本特徵數的倒數。
- coef0:核函數參數,float類型。只有當kernel={'poly','sigmoid'}時纔有用,對應核函數中的\(r\)。默認爲0。
- shrinking:啓發式收縮,bool類型。是否採用啓發式收縮方式。默認爲True。
- probability:機率估計,bool類型。是否啓用機率估計,必須得在fit()以前設置爲True,會使得fit()速度變慢。默認爲False。
- tol:偏差精度,float類型。支持向量機中止訓練的偏差精度。默認爲1e-3。
- cache_size:緩存大小,float類型。指定訓練所須要的內存大小。默認爲200,單位爲MB。
- class_weight:樣本類別權重,{dict類型,'balanced'}。給每一個類別指定不一樣的權重,'balanced'將自動分配不一樣類別樣本的權重。可選參數。
- verbose:日誌冗長度,int類型。verbose=0,不輸出訓練過程;verbose=1,輸出部分訓練過程;verbose>1,輸出全部的訓練過程。默認爲0。
- max_iter:迭代次數,int類型。算法迭代次數,算法迭代到必定次數會收斂。默認爲-1,表示不限制。
- decision_function_shape:決策函數,str類型。決可選參數'ovo'和'ovr','ovo'表示一對一,'ovr'表示一對多。默認爲'ovr'。
- random_state:隨機數種子,int類型。使用後能夠保證隨機數不會隨着時間的變化而變化。默認爲None。
1.4 屬性
- support_:array-like類型。全部支持向量的索引。
- support_vectors_:array-like類型。全部的支持向量。
- n_support_:array-like類型。每一個類有多少個支持向量。
- dual_coef_:array類型。決策函數中支持向量的係數。
- coef_:array類型。原始問題中特徵的係數,只可用於線性核中。
- intercept_:array類型。決策函數的截距。
- fit_status_:int類型。若是訓練模型成功返回0,失敗返回1並報警。
- probA_:array類型。
- probB_:array類型。若是probability=True,則能夠估計A和B類各自在決策函數中的機率大小;若是probability=False,則返回空數組。不支持多分類問題的輸出打印。
1.5 方法
- decision_functino(X):求出樣本X的決策函數。
- fit(X,y):把數據放入模型中訓練模型。
- get_params([deep]):返回模型的參數,能夠用於Pipeline中。
- predict(X):預測樣本X的分類類別。
- score(X,y[,sample_weight]):基於報告決定係數\(R^2\)評估模型。
- set_prams(**params):建立模型參數。
2、LinearSVC
LinearSVC
模型即普通的線性可分支持向量機,即對線性不可分的數據不能使用。由於該模型不須要調參,而且速度快,因此若是很是明確數據必定是線性可分的狀況下可使用該模型,不然模型準確度反倒會變得很低,。數據結構
3、NuSVC
NuSVC
模型基於SVC
模型,它增長了nu參數能夠控制模型的錯誤率。dom
4、LinearSVR
LinearSVR
限制了只能使用線性核函數,相比較於LinearSVM
不一樣之處在於損失函數的度量,其中它的損失函數參數loss='epsilon_insensitive'時,爲相似於線性支持向量機的有鬆弛因子的損失度量,損失度量知足
\[ -\epsilon-\xi_i\geq{y_i}-\omega\phi(x_i)-b\leq\epsilon+\xi_i \]
而loss='squared_epsilon_insensitive',爲少了鬆弛因子的損失度量方式,即損失度量知足
\[ ({y_i}-\omega\phi(x_i)-b)^2\leq\epsilon+\xi_i \]
通常狀況下使用'epsilon_insensitive'足夠了。機器學習
5、SVR
SVR
模型相較於LinearSVR
模型可使用核函數,既能夠對線性不可分數據作迴歸。函數
6、NuSVR
NuSVR
模型相較於SVR
模型,增長了nu參數能夠控制模型的錯誤率。學習