处理“麻烦制造者”样本

机器算法验证 假设检验 物流 造型 异常值 大数据
2022-03-03 18:57:39

我有一个相当大的数据集(约 300 个案例,具有约 40 个连续属性,二进制标记),我用它来创建几个替代预测模型。为此,该集合被分为训练和验证子集(分别约为 60:40%)。

我注意到有几个样本(在训练和验证子集中)被我测试的所有或大部分替代模型错误分类。

我怀疑这些“麻烦制造”的样本有什么特别之处。发现模型在特定样本上的不当行为背后的可能原因的一般准则是什么?

更新 1我正在为此任务使用逻辑回归。参数选择是通过详尽搜索多达 4 个预测变量的组合和 10 倍交叉验证来完成的。值得一提的是,模型为错误分类样本计算的 p 值通常与默认的分类阈值 0.5 有很大差异。换句话说,模型不仅对那些案例是错误的,而且对自己也很有信心。

更新 2 - 我已经做了什么。

我同意来自研究领域的见解至关重要,但迄今为止我们还没有发现任何重要的东西。此外,我试图从训练集中删除“坏”样本,并保持验证集和参数选择算法不变。这导致训练集的性能更好(自然),但也显着提高了验证集的性能。这是否表明“坏”样本实际上是“坏”?

3个回答

我认为这需要领域专业知识。如果我是你,我会花时间检查这些样本及其来源,找出它们(如果有的话)有什么问题。如果样本是由在某个应用程序领域工作的同事收集的,他们可能会在这方面为您提供帮助。

有时,样本确实可能是“坏的”。例如,它们可能被贴错标签、在与其他情况不同的情况下收集、使用未校准的设备收集,或者可能有许多其他原因导致它们成为异常值。但是,您不应该只说“这些可能不好”并删除它们;更好地识别它们的问题,以便您可以验证它们是否存在问题并证明它们的删除是合理的。

谨慎的一个原因是它们实际上可能并不坏,只是从数据中没有很好地表示的部分样本空间中提取的。在这种情况下,你不应该把它们扔掉,你应该(如果可能的话)收集更多像它们一样的东西。

另一个原因是,位于概念末端的样本可能是最难正确分类的样本,但如果它们实际上并不坏并且您将它们删除,那么您最终会在末端得到新的样本。举一个人为的例子,假设您将样本分类为 Hot/NotHot,并且 50 度以上的所有东西都应该是热的。49.9 度和 50.1 度的样本非常相似,即使它们是决策边界的不同侧,所以它们很难分类,它们不是应该丢弃的异常值。此外,如果您删除它们,您可能会发现以前正确分类的两个新样本(49.8 度和 50.2 度)现在被错误分类。

最后一点:当您说训练集中的样本通常被错误分类时,您是指在交叉验证方案下还是字面意思是当您对训练数据进行测试时它们被错误分类?如果是后者,则可能是您使用的分类方法无法很好地捕捉数据方差。

希望这有所帮助 ...

我认为您的设计矩阵中存在异常值。补救措施是使用位置/规模的多元稳健估计器来检测它们(就像您可以使用中值来检测单变量设置中的异常值但您不能使用平均值,因为平均值本身对异常值的存在很敏感) . 高质量的估计器已经存在于 R-base 工具中(通过 MASS)。

我建议您阅读以下(非技术性)多元稳健方法的摘要介绍:

PJ Rousseeuw 和 K. van Driessen (1999) 最小协方差行列式估计的快速算法。技术计量学41、212-223

R 中有许多很好的实现,我特别推荐一个是robustbase 包中的covMcd () (比 MASS 实现更好,因为它包含小样本校正因子)。

一个典型的用途是:

x<-mydata #your 300 by 40 matrix of **design variables**
out<-covMcd(x)
ind.out<-which(out$mcd.wt==0)

现在, ind.out 包含标记为异常值的观察的索引。您应该将它们从您的样本中排除,并在“净化”样本上重新运行您的分类程序。

我认为它会稳定你的结果,解决你的问题。让我们知道:)

编辑:正如 Chl 所指出的(在下面的评论中)。在您的情况下,建议通过图形方法补充上述代码中使用的硬拒绝规则(其实现可以在 R 包mvoutlier中找到)。这与我在回答中提出的方法完全一致,实际上我在上面引用的论文中对此进行了很好的解释(和说明)。因此,我将只指出两个可能与您的案例特别相关的有利于它的论点(假设您确实有一个异常问题并且可以通过mcd找到这些问题):

  1. 提供异常值问题在视觉上的有力说明,因为每个观察结果都与其对结果估计的影响的度量相关联(具有超大影响的观察结果会脱颖而出)。
  2. 我提出的方法应用了一个强拒绝规则:简而言之,任何对最终估计的影响大于某个阈值的观察都被认为是异常值。图形方法可能会帮助您保存一些观察结果,方法是尝试恢复那些对估计量的影响超出阈值但只有少量影响的观察结果。这在您的模型的上下文中很重要,因为 40 维空间中的 300 个观测值已经相当稀疏。

解决更新 2 中提到的问题。您正在处理异常值。这些异常值对您的逻辑回归系数有重大影响。通过删除它们,您发现您的模型在验证集上的表现更好。

这是否意味着异常值是“坏的”?不,这意味着他们有影响力。有几种统计距离度量来确认这些异常值的距离和影响力。其中包括库克的 D 和 DFFITS。

在确定了麻烦制造者之后,您正在为是否让他们留下来而苦苦挣扎。最终,这可能是一个定性判断,而不是一个统计问题。这里有几个调查性问题可能有助于做出这个定性决定:1)首先,异常值真的是由于测量不佳而导致的吗?2)对于您的模型而言,在异常值所在的尾部正确还是在绝大多数情况下更准确更重要?