所以我使用樣本權重函數,我不想使用默認sklearn評分函數來衡量性能。網格搜索與加權AUC
它看起來像是說Here,我可以通過GridSearchCV
字符串'roc_auc',它應該爲我計算auc,但它會計算auc它是一個加權auc或只是一個香草auc?
所以我使用樣本權重函數,我不想使用默認sklearn評分函數來衡量性能。網格搜索與加權AUC
它看起來像是說Here,我可以通過GridSearchCV
字符串'roc_auc',它應該爲我計算auc,但它會計算auc它是一個加權auc或只是一個香草auc?
感謝書呆子鷸。
我製作了一個二進制分類數據集來測試這個問題。
x y weight
0 0 1
1 1 1
<repeated 25 times>
0 1 0
1 0 0
<repeated 25 times>
使用Python:
X = np.array([[0], [1]] * 25 + [[0], [1]] * 25)
y = np.array([ 0 , 1 ] * 25 + [ 1 , 0 ] * 25)
w = np.array([ 1 , 1 ] * 25 + [ 0 , 0 ] * 25)
在此數據集,我們可以看到,如果樣本權重都存在,該模型將產生一個非常不錯的選擇,有一個非常低的日誌丟失。如果重量不存在,損失將會非常高。
然後我們可以建立使用GridSearchCV
來查看是否使用權重。
clf = LogisticRegression(solver='newton-cg', C=100)
gs = GridSearchCV(clf, {},
fit_params={"sample_weight": w},
scoring="log_loss", cv=KFold(y.shape[0],10, shuffle=True))
gs.fit(X,y)
gs.grid_scores_
[mean: -2.68562, std: 0.68038, params: {}]
我們可以看到損失相當高,這表明權重沒有被使用。
我寫了一個補丁scikit學會修復這個問題。請考慮它是實驗性的。 https://github.com/scikit-learn/scikit-learn/compare/master...dmaust:master
應用該補丁後,我們可以啓用score_sample_weight
,重複之前的測試,並可以看到我們期望從權重被考慮的日誌丟失。
gs.score_sample_weight=True
gs.fit(X,y)
gs.grid_scores_
[mean: -0.00486, std: 0.00016, params: {}]
看來'GridSearchCV'不支持'sample_weight'。你可以調整沒有權重的模型,使用'cross_val_predict',然後爲它自己加權。我猜這不是你要找的東西。 –
'GridSearchCV'通過'fit_params'選項接受樣本權重(因爲樣本權重需要傳遞給'fit'方法)。我也在使用'RandomizedSearchCV',這需要相當複雜的重複使用'cross_val_predict',所以我希望'scorer'自動處理權重,但我似乎無法在文檔中找到任何東西。 – Chris
這是否真的有效?重量也需要分成摺疊。他們不能天真地穿過適合的功能。 –