【发布时间】:2013-06-29 17:33:10
【问题描述】:
在 scikit-learn 中有处理不平衡类的标准方法吗?
sk-learn 的一大好处是界面一致……
但是,当类不平衡时(这似乎是一个非常常见的用例),情况并非如此:IMO 不想要分类,而是想要一个介于 0 和 1 之间的连续变量,这样您就可以计算 auc_score (或类似的东西)
所以我可以在逻辑和其他一些分类器上做 auc_score(y,cf.predict_probas(X)) 但我看不出有任何理由为什么我不能对任何决策函数做基本相同的事情[例如 RidgeClassifier .. .etc],即改变我的阈值并监控误报、命中率?
人们如何做到这一点?这就是我正在做的事情(正如 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.14-dev 版本,你可以使用记分器接口 btw :) scikit-learn.org/dev/modules/…
-
谢谢 andreas - 我确实计划在 Linux 中查看 [从文档中看起来很棒],但主要是 windows 用户和构建似乎很痛苦(例如 BLAS/ATLAS)......但是确认,grid_search.GridSearchCV 和 cross_validation.cross_val_score 是否会使用评分 =roc_auc 使用概率或决策函数(而不是预测输出)
-
是的,这正是它的作用。
标签: scikit-learn