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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

SVC调参总结+调参实例

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

degree:int型參數 默認為3

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

如果給的核函數參數是其他核函數,則會自動忽略該參數。
##############################################
gamma:float參數 默認為auto
這個東西是哪里的呢?
e(?γ∣∣x1?x2∣∣2)e^{(-\gamma||x_1-x_2||^2)}e(?γx1??x2?2)
注意:gamma不能過大,否則會導致過擬合
過小會導致∣∣x1?x2∣∣2||x_1-x_2||^2x1??x2?2的值都很小,就分不開了(欠擬合)
核函數系數,只對‘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的值自動調整與輸入數據中的類頻率成反比的權重。

注意概念: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.”

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

來自sklearn作者的回復:
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^*ε?取值范圍縮小,導致w?和b?w^*和b^*w?b?調整,以便于滿足
w?xi+b?w·x_i+b^*w?xi?+b?從錯分數值(假定yiy_iyi?>1)小于0向大于0調整.
最終達到把錯誤數據分類正確的效果.
以上解析主要參考李航書P111頁最下方.

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

不用管的參數
####################################################
max_iter :int參數 默認為-1

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

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

總結:
對于SVC,需要調整的參數為:

核函數需要調整的參數
RBFC,gamma,tol,class_weight
polyC,gamma,tol,degree,coef0,class_weight
sigmoidC, gamma,tol,coef0,class_weight

好了,問題來了,單個參數我知道怎么調,
上面這些參數放在一起,我咋知道"一起咋調"?

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

調參實例:
https://blog.csdn.net/appleyuchi/article/details/85052665

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。