Sci-kit学习:应用自定义错误函数来支持误报?

时间:2014-01-31 15:54:54

标签: python optimization classification scikit-learn text-classification

虽然Scikit Learn文档很棒,但我找不到是否有办法指定自定义错误函数来优化分类问题。

备份一下,我正在研究一个文本分类问题,其中误报比假否定要好得多。这是因为我将文本标记为对用户来说很重要,而最坏的误报会浪费用户的少量时间,而假阴性会导致一些潜在的重要信息永远不会被看到。因此,我想在优化过程中向上扩展假阴性错误(或者假阳性错误,无论哪个)。

据我所知,每种算法都会优化不同的错误功能,因此在提供自定义错误功能方面没有一个通用的解决方案。但还有另一种方式吗?例如,缩放标签可能适用于将标签视为实际值的算法,但不适用于SVM,例如,因为SVM可能会将标签缩放到引擎盖下的-1,+ 1。

1 个答案:

答案 0 :(得分:1)

某些估算工具采用class_weight构造函数参数。假设你的班级是["neg", "pos"],你可以给予否定类一个比正类更高的权重,例如:

clf = LinearSVC(class_weight={"neg": 10, "pos": 1})

然后,当您使用GridSearchCV优化估算工具的超参数时,您应该将scorer更改为有利于误报的数据,例如Fᵦ的变体高β:

from sklearn.metrics import fbeta_score

def f3_scorer(estimator, X, y_true):
    y_pred = estimator.predict(X)
    return fbeta_score(y_true, y_pred, beta=3)

gs = GridSearchCV(clf, params, scoring=f3_scorer)