更新時間:2023年07月28日10時40分 來源:傳智教育 瀏覽次數(shù):
SVM具有良好的魯棒性,對未知數(shù)據(jù)擁有很強的泛化能力,特別是在數(shù)據(jù)量較少的情況下,相較其他傳統(tǒng)機器學習算法具有更優(yōu)的性能。
使用SVM作為模型時,通常采用如下流程:
1. 對樣本數(shù)據(jù)進行歸一化。
2. 應(yīng)用核函數(shù)對樣本進行映射(最常采用和核函數(shù)是RBF和Linear,在樣本線性可分時,Linear效果要比RBF好)。
3. 用cross-validation和grid-search對超參數(shù)進行優(yōu)選。
4. 用最優(yōu)參數(shù)訓練得到模型。
5. 測試
sklearn中支持向量分類主要有三種方法:SVC、NuSVC、LinearSVC,擴展為三個支持向量回歸方法:SVR、NuSVR、LinearSVR。
SVC和NuSVC方法基本一致,唯一區(qū)別就是損失函數(shù)的度量方式不同
• NuSVC中的nu參數(shù)和SVC中的C參數(shù);
• LinearSVC是實現(xiàn)線性核函數(shù)的支持向量分類,沒有kernel參數(shù)。
SVC
class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3,coef0=0.0,random_state=None)
C: 懲罰系數(shù),用來控制損失函數(shù)的懲罰系數(shù),類似于線性回歸中的正則化系數(shù)。
C越大,相當于懲罰松弛變量,希望松弛變量接近0,即對誤分類的懲罰增大,趨向于對訓練集全分對的情況,這樣會出現(xiàn)訓練集測試時準確率很?,但泛化能力弱,容易導致過擬合。
C值小,對誤分類的懲罰減小,容錯能力增強,泛化能力較強,但也可能欠擬合。
kernel: 算法中采用的核函數(shù)類型,核函數(shù)是用來將非線性問題轉(zhuǎn)化為線性問題的?種方法。
參數(shù)選擇有RBF, Linear, Poly, Sigmoid或者自定義一個核函數(shù)。
默認的是"RBF",即徑向基核,也就是高斯核函數(shù);
而Linear指的是線性核函數(shù),
Poly指的是多項式核,
Sigmoid指的是雙曲正切函數(shù)tanh核;。
degree:
當指定kernel為'poly'時,表示選擇的多項式的最高次數(shù),默認為三次多項式;
若指定kernel不是'poly',則忽略,即該參數(shù)只對'poly'有用。
多項式核函數(shù)是將低維的輸入空間映射到高維的特征空間。
coef0: 核函數(shù)常數(shù)值(y=kx+b中的b值), 只有‘poly’和‘sigmoid’核函數(shù)有,默認值是0。
NuSVC
class sklearn.svm.NuSVC(nu=0.5)
nu: 訓練誤差部分的上限和?持向量部分的下限,取值在(0,1)之間,默認是0.5
LinearSVC
class sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, C=1.0)
penalty:正則化參數(shù),L1和L2兩種參數(shù)可選,僅LinearSVC有。
loss:損失函數(shù),
有hinge和squared_hinge兩種可選,前者?稱L1損失,后者稱為L2損失,默認是squared_hinge,
其中hinge是SVM的標準損失,squared_hinge是hinge的平方
dual:是否轉(zhuǎn)化為對偶問題求解,默認是True。
C:懲罰系數(shù),
用來控制損失函數(shù)的懲罰系數(shù),類似于線性回歸中的正則化系數(shù)