2013-07-02 77 views
2

scikit-learn中有沒有處理不平衡類的標準方法?非平衡類指標和scikit學習

一個SK-學習樂趣的是,有一個統一的界面...

然而,當類是不平衡[這似乎很常見的情況),這是不是這樣的:IMO人做不希望分類,但0至1之間的連續變量,以便您可以計算auc_score(或類似的東西)

所以我可以對邏輯和其他一些分類器做auc_score(y,cf.predict_probas(X))但我沒有看到任何理由爲什麼我不能爲任何decision_function [例如RidgeClassifier ...等]做基本相同的操作,即改變我的閾值並監視虛警,命中率?

人們怎麼做到這一點?這是我在做什麼(如ogrisel還建議)

if hasattr(clf,'predict_proba'): 
    proba=clf.predict_proba(X_test)[:,1] 
    score=metrics.auc_score(y_test,proba) 

elif hasattr(clf,'decision_function'): 
    z=clf.decision_function(X_test) 
    fpr, tpr, thresholds = metrics.roc_curve(y_test, z) 
    score=metrics.auc(fpr, tpr) 
+0

如果您使用0.14-dev版本,您可以使用記分器接口btw :) http://scikit-learn.org/dev/modules/model_evaluation.html#scoring-objects-defining-your-scoring-規則 –

+0

謝謝andreas - 我打算在Linux中看看[它看起來很棒],但主要是Windows用戶和構建似乎很痛苦(例如BLAS/ATLAS)......但要確認,將grid_search.GridSearchCV和cross_validation.cross_val_score得分= roc_auc使用概率或決策函數(而不是預測輸出) – seanv507

+0

是的,這正是它的作用。 –

回答

1

使用decision_function應該工作,否則這是一個錯誤。