日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

SVC调参总结+调参实例

發(fā)布時間:2023/12/20 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SVC调参总结+调参实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

degree:int型參數(shù) 默認為3

這個參數(shù)只對多項式核函數(shù)有用,是指多項式核函數(shù)的階數(shù)n

如果給的核函數(shù)參數(shù)是其他核函數(shù),則會自動忽略該參數(shù)。
##############################################
gamma:float參數(shù) 默認為auto
這個東西是哪里的呢?
e(?γ∣∣x1?x2∣∣2)e^{(-\gamma||x_1-x_2||^2)}e(?γx1??x2?2)
注意:gamma不能過大,否則會導(dǎo)致過擬合
過小會導(dǎo)致∣∣x1?x2∣∣2||x_1-x_2||^2x1??x2?2的值都很小,就分不開了(欠擬合)
核函數(shù)系數(shù),只對‘rbf’,‘poly’,‘sigmod’有效。
如果gamma為auto,代表其值為樣本特征數(shù)的倒數(shù),即1/n_features.
############################################

coef0:float參數(shù) 默認為0.0

核函數(shù)中的獨立項,只有對‘poly’和‘sigmod’核函數(shù)有用,是指其中的參數(shù)c
############################################

probability:bool參數(shù) 默認為False

是否啟用概率估計。 這必須在調(diào)用fit()之前啟用,并且會fit()方法速度變慢。
############################################
shrinking:bool參數(shù) 默認為True
是否采用啟發(fā)式收縮方式

這個就是加速代碼運行速度,一般不用管這個參數(shù)
############################################
tol: float參數(shù) 默認為1e^-3
svm停止訓(xùn)練的誤差精度

這個對泛化能力有影響,可以適當(dāng)調(diào)大,但是不能太大,太大就變成欠擬合了.
############################################
cache_size:float參數(shù) 默認為200
指定訓(xùn)練所需要的內(nèi)存,以MB為單位,默認為200MB。
這個參數(shù)基本上不用管
#####################下面的參數(shù)還沒有搞懂#######################
class_weight:字典類型或者‘balance’字符串。默認為None

給每個類別分別設(shè)置不同的懲罰參數(shù)C,如果沒有給,則會給所有類別都給C=1,即前面參數(shù)指出的參數(shù)C.

如果給定參數(shù)‘balance’,則使用y的值自動調(diào)整與輸入數(shù)據(jù)中的類頻率成反比的權(quán)重。

注意概念:C>0時,我們稱為軟間隔SVM,出處為:
https://martin-thoma.com/svm-with-sklearn/

同理,如果C=0,就是硬間隔SVM.

我們通常使用軟間隔SVM多一些.

Quotation:
“An SVM with C>0 is also called a soft-margin SVM.”

注意:
這個參數(shù)是需要調(diào)整的,一般選擇balance較佳,但是最好是使用SVC前讓數(shù)據(jù)集各個類別保持平衡.

來自sklearn作者的回復(fù):
For how class_weight works: It penalizes mistakes in samples of class[i] with class_weight[i] instead of 1. So higher class-weight means you want to put more emphasis on a class. From what you say it seems class 0 is 19 times more frequent than class 1. So you should increase the class_weight of class 1 relative to class 0, say {0:.1, 1:.9}. If the class_weight doesn’t sum to 1, it will basically change the regularization parameter.
鏈接:
https://stackoverflow.com/questions/30972029/how-does-the-class-weight-parameter-in-scikit-learn-work

C過大會過擬合,C太小會欠擬合
如果使用class_weight,那么0<αi\alpha_iαi?<CiC_iCi?
也就是說CiC_iCi?限定了αi\alpha_iαi?的取值范圍.
由于kkt條件要求μ?ε?\mu^*\varepsilon^*μ?ε?=0(李航書P111)
C上升,αi\alpha_iαi?的取值范圍擴大,μ?\mu^{*}μ?取值范圍擴大,
ε?\varepsilon^*ε?取值范圍縮小,導(dǎo)致w?和b?w^*和b^*w?b?調(diào)整,以便于滿足
w?xi+b?w·x_i+b^*w?xi?+b?從錯分數(shù)值(假定yiy_iyi?>1)小于0向大于0調(diào)整.
最終達到把錯誤數(shù)據(jù)分類正確的效果.
以上解析主要參考李航書P111頁最下方.

##################上面的參數(shù)還沒有搞懂##########################
verbose :bool參數(shù) 默認為False
是否啟用詳細輸出。 此設(shè)置利用libsvm中的每個進程運行時設(shè)置,如果啟用,可能無法在多線程上下文中正常工作。

不用管的參數(shù)
####################################################
max_iter :int參數(shù) 默認為-1

不用管的參數(shù)
####################################################
最大迭代次數(shù),如果為-1,表示不限制
random_state:int型參數(shù) 默認為None
偽隨機數(shù)發(fā)生器的種子,在混洗數(shù)據(jù)時用于概率估計。

不用管的參數(shù)
####################################################
★fit()方法:用于訓(xùn)練SVM,具體參數(shù)已經(jīng)在定義SVC對象的時候給出了,這時候只需要給出數(shù)據(jù)集X和X對應(yīng)的標(biāo)簽y即可。

總結(jié):
對于SVC,需要調(diào)整的參數(shù)為:

核函數(shù)需要調(diào)整的參數(shù)
RBFC,gamma,tol,class_weight
polyC,gamma,tol,degree,coef0,class_weight
sigmoidC, gamma,tol,coef0,class_weight

好了,問題來了,單個參數(shù)我知道怎么調(diào),
上面這些參數(shù)放在一起,我咋知道"一起咋調(diào)"?

首先,為了減少調(diào)參的麻煩,在數(shù)據(jù)進入SVM前最好做好數(shù)據(jù)平衡,這樣你就不需要調(diào)整C和class_weight,可以使用的辦法有上采樣和下采樣.
tol是迭代的容忍錯誤,放在最后調(diào)整.
對于RBF:
gamma必須放在最先調(diào)整.在你的sklearn底層的核矩陣看看輸出.
gama的作用是讓相近的點更近,相遠的點離得更遠.可以根據(jù)核矩陣輸出來判斷當(dāng)前效果如何.
###############其他##################
'LinearSVC’是SVC只用linear核的速度上優(yōu)化的版本
‘LinearSVR’,是SVR只用linear核的速度上優(yōu)化的版本
########################################################
‘NuSVC’:
‘NuSVR’, 限制支持向量的數(shù)量,暫時感覺沒啥用,參考鏈接如下:
https://stackoverflow.com/questions/20507809/nusvr-vs-svr-in-scikit-learn
#########################################################
‘OneClassSVM’, 這個除非數(shù)據(jù)集非常龐大(已經(jīng)包含了必要的特征和必要的特征組合),用來識別外來數(shù)據(jù)是否現(xiàn)有數(shù)據(jù)集的成分相似,否則對于小數(shù)據(jù)集而言,應(yīng)該沒有這個必要.
一言以概之:對比賽沒幫助
可以參考:
https://zhuanlan.zhihu.com/p/32784067
#########################################################
SVM只考慮分類面上的點,而LR考慮所有點,SVM中,在支持向量之外添加減少任何點都對結(jié)果沒有影響,而LR則是每一個點都會影響決策。
Linear SVM不直接依賴于數(shù)據(jù)分布,分類平面不受一類點影響
LR則是受所有數(shù)據(jù)點的影響,所以受數(shù)據(jù)本身分布影響的,如果數(shù)據(jù)不同類別strongly unbalance,一般需要先對數(shù)據(jù)做balancing。?

調(diào)參實例:
https://blog.csdn.net/appleyuchi/article/details/85052665

總結(jié)

以上是生活随笔為你收集整理的SVC调参总结+调参实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。