如何处理 python 中的不平衡数据集和异常值?

How to handle Imbalanced Datatset and outliers in python?

我有两个疑问:

  1. 如果我们有一个 class 数据框的化问题,该数据框具有大量特征(列 > 100),并且假设其中 20/30 高度相关并且目标列 (y) 非常偏向一个 class ; 我们应该首先使用 Imblearn 消除不平衡还是应该删除高度相关的列?
  2. 在class化问题中,我们应该首先标准化数据还是处理异常值?

您的问题没有 "true" 答案 - 采用的方法在很大程度上取决于您的设置、应用的模型和手头的目标。

class失衡的话题已经在其他地方讨论过(例如here and here)。

oversampling/undersampling 您的正面或负面 class 训练示例的一个正当理由可能是知道正面实例的真实发生率高于(低于)您的训练数据表明的。然后,您可能希望应用采样技术来实现与该先验知识相匹配的 positive/negative class 平衡。

虽然没有真正处理标签分布的不平衡,但您的特定设置可能需要为误报和漏报分配不同的成本(例如,错误class将癌症患者视为健康的成本可能更高反之亦然)。这你可以通过例如处理调整成本函数(例如,假阴性比假阴性产生更高的成本)或在训练后执行某种阈值优化(例如在交叉验证中达到某个 precision/recall)。

高度相关特征的问题发生在假设特征之间没有相关性的模型中。例如,如果您的特征 space 中的 multicollinearity 存在问题,逻辑回归中的参数估计可能会关闭。例如,您可以使用方差 inflation 因子 (VIF) 检查是否存在多重共线性。但是,并非所有模型都具有这样的假设,因此根据您的设置,您可能会忽略该问题。

同样适用于标准化:这可能不是必需的(例如树class化器),但其他方法可能需要它(例如PCA)。

是否处理异常值是一个难题。首先,您必须定义异常值是什么 - 它们是例如人为错误的结果?您希望在野外看到类似的实例吗?如果你可以确定你的模型在移除异常值的情况下进行训练时表现更好(在保持验证或测试集上),那么:当然,去做吧。但是,如果您计划将模型应用于可能产生类似异常值的数据流,请保留潜在的异常值以进行验证。