成本敏感的学习和班级平衡

数据挖掘 机器学习 分类 阶级失衡 成本函数
2021-09-21 23:56:11

我正面临一个分类问题,其中的类别确实不平衡(或多或少 1% 的阳性案例)。此外,假阴性(FN)的“成本”远高于假阳性(FP)的成本。

考虑到这一点,我决定将权重插入到我的分类模型中。计算这些权重的最佳方法是什么?理想情况下,权重必须同时考虑数据不平衡和错误分类成本。

我对为每条记录添加 0/1 标签不感兴趣,而只是根据输出分数对测试数据集进行排序。这个想法是联系得分最高的记录来提供产品。

我想使用这些权重,例如,sample_weights大多数 scikit-learn 分类算法中可用的参数(here the documentation)。

对数据进行过采样/下采样然后仅使用权重来控制错误分类成本是个好主意吗?或者使用能够考虑整个情况的权重会更好吗?有没有已知的方法来计算这些权重?

2个回答

不清楚您是说 FN 或 FP 的成本更高,您只在声明中提到 FN。认为您的意思是 FN 的成本更高,而正数意味着 1。

一般来说,如果对少数情况的错误预测成本更高 (FN),您应该对少数情况进行更高的采样或对多数情况进行更低的采样,以使比率更接近 1:1。在预测少数情况时,平衡将有助于提高模型的准确性。预测多数情况的准确性已经更高,因为有更多的样本可用于该情况。欠采样、过采样和 SMOTE 都是实现这种样本平衡的有用方法,并且每种方法都有自己的长处和短处。

但是,做这种样本平衡会很快增加 FP 的数量,因此即使 FP 的成本可能较低,但成本会迅速增加。例如,您每减少 1 FP,您可能会多获得 10 或 20 FN

做完这个平衡后,你就可以开始调整权重,以获得最佳的 FN 与 FP 的比率,尝试使总成本尽可能低。

最小化:总成本 = FN x cost_of_fn + FP x cost_of_fp

不确定是否有数学方程可以解决这个问题,但您可以迭代运行,更改 2 个类的权重比,并使用混淆矩阵计算总成本以获得 FN 和 FP,并绘制成本结果(y ) 与重量比 (x) 的关系,寻找最小值。我将从等于您的成本比率的比率开始。

示例:如果 FN 的成本为 10 美元,FP 的成本为 1 美元,那么少数:多数类别的比率应为 10:1

一个简单的计算显示了如何根据计算的权重 w(i) 和训练集中的示例数(在任何上采样或下采样之前)n(i) 推导出所需的 i 类组合:μ(i)。这个公式如下:

在此处输入图像描述

参考:https ://medium.com/rv-data/how-to-do-cost-sensitive-learning-61848bf4f5e7

支持唐纳德的第二个答案,我还将尝试查看预测概率(通过 scikit 学习分类器中的 predict_proba 属性)并通过选择阈值(您也可以在相应的 ROC 曲线中检查)来自定义您的预测,这给您最稳健(即最高)的预测概率分布,因此您的分类器“确定”预测的内容,例如: 在此处输入图像描述 在这里,右侧的分类器似乎给出了更稳健的预测,尽管右侧的混淆矩阵似乎是好一点)。

您还可以使用像召回这样的指标,它给出了一个不太乐观和更现实的结果(召回是一个量化所有可能做出的正面预测中正确正面预测数量的指标,来源:https://machinelearningmastery. com/roc-curves-and-precision-recall-curves-for-imbalanced-classification/ )