2016-01-07 29 views
4

所以我使用樣本權重函數,我不想使用默認sklearn評分函數來衡量性能。網格搜索與加權AUC

它看起來像是說Here,我可以通過GridSearchCV字符串'roc_auc',它應該爲我計算auc,但它會計算auc它是一個加權auc或只是一個香草auc?

+0

看來'GridSearchCV'不支持'sample_weight'。你可以調整沒有權重的模型,使用'cross_val_predict',然後爲它自己加權。我猜這不是你要找的東西。 –

+0

'GridSearchCV'通過'fit_params'選項接受樣本權重(因爲樣本權重需要傳遞給'fit'方法)。我也在使用'RandomizedSearchCV',這需要相當複雜的重複使用'cross_val_predict',所以我希望'scorer'自動處理權重,但我似乎無法在文檔中找到任何東西。 – Chris

+0

這是否真的有效?重量也需要分成摺疊。他們不能天真地穿過適合的功能。 –

回答

3

感謝書呆子鷸。

我製作了一個二進制分類數據集來測試這個問題。

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: {}] 
+1

暫時還沒有計劃在很短的時間內 –

+1

是的,您可能會更換兩個交叉驗證模塊中的方法暫時爲 –

+0

很酷,謝謝,我非常感謝。 – Chris