何时考虑目标变量不平衡?

数据挖掘 分类 阶级失衡
2022-02-13 21:48:04

我正在执行二进制分类任务,在检查目标变量后,我看到我有 69% 的 0 和 31% 的 1,所以,我的问题是,在这种情况下我是否有不平衡的目标变量?有人可以告诉我,是否有阈值,或者何时考虑目标变量不平衡?

谢谢大家

2个回答

对于什么比率被认为是不平衡的,没有严格的阈值。但总的来说,30% 通常不是分类不平衡的标志。

您可以尝试不同的方法来检查您的分类方法是否准确并且预测是否正确,例如重采样、过采样、欠采样

  1. 以较少的频率增加类中记录(样本)的数量。

  2. 从具有较高频率的类中随机删除样本。

...

from sklearn.utils import resample 

一般来说,不平衡数据集没有严格的定义,但在你的情况下,我建议你使用非敏感算法、损失函数和评估指标。

有许多有用的指标被引入作为损失函数,也用于评估不平衡数据集的分类方法的性能。其中一些是KappaCENMCENMCCDP

如果您使用 python,PyCM模块可以帮助您找出这些指标。

这是一个从该模块获取推荐参数的简单代码:

>>> from pycm import *

>>> cm = ConfusionMatrix(matrix={"Class1": {"Class1": 1, "Class2":2}, "Class2": {"Class1": 0, "Class2": 5}})  

>>> print(cm.recommended_list)
["Kappa", "SOA1(Landis & Koch)", "SOA2(Fleiss)", "SOA3(Altman)", "SOA4(Cicchetti)", "CEN", "MCEN", "MCC", "J", "Overall J", "Overall MCC", "Overall CEN", "Overall MCEN", "AUC", "AUCI", "G", "DP", "DPI", "GI"]

之后,您想用作损失函数的每个参数都可以按如下方式使用:

>>> y_pred = model.predict      #the prediction of the implemented model

>>> y_actu = data.target        #data labels

>>> cm = ConfusionMatrix(y_actu, y_pred)

>>> loss = cm.Kappa             #or any other parameter (Example: cm.SOA1)