如何比错误的正例更多地惩罚错误的负例

从商业角度来看,错误的负例(漏报)导致的成本大约是错误的正例(误报)的十倍(真实金钱)。鉴于我使用的是标准的二元分类模型(逻辑回归、随机森林等),我如何将这一因素纳入我的模型中?

我是否需要调整(加权)损失函数以偏向于“优选”的错误(FP)?如果需要,如何操作?


回答:

您有几个选择:

  • 如评论中所建议,class_weight应能增强损失函数对优选类的偏向。这种选项被多种估计器支持,包括sklearn.linear_model.LogisticRegressionsklearn.svm.SVCsklearn.ensemble.RandomForestClassifier等。请注意,权重比没有理论上的限制,所以即使1比100对您来说不够强,您可以继续使用1比500等。

  • 您也可以在交叉验证期间选择非常低的决策阈值,以挑选出具有最高召回率的模型(尽管精确度可能较低)。接近1.0的召回率实际上意味着false_negatives接近0.0,这是您想要的。为此,请使用sklearn.model_selection.cross_val_predictsklearn.metrics.precision_recall_curve函数:

    y_scores = cross_val_predict(classifier, x_train, y_train, cv=3,                             method="decision_function")precisions, recalls, thresholds = precision_recall_curve(y_train, y_scores)

    如果您将precisionsrecalls相对于thresholds绘制成图,您应该会看到类似这样的图表:

    precision-recall-tradeoff

    在选择最佳阈值后,您可以使用classifier.decision_function()方法的原始分数进行最终分类。

最后,请尽量不要过度优化您的分类器,因为您很容易得到一个琐碎的常数分类器(显然永远不会出错,但毫无用处)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注