带有异常检测的 PCA

机器算法验证 主成分分析 特征选择 降维 异常检测
2022-03-24 00:56:16

我正在开发一种算法,它应该在数据集中找到异常。

为了减少计算时间,我在数据上使用了 PCA - 减少特征数量将减少计算时间。

在与同事一起审查时,提出了一个关于 PCA 在此类用例中的影响的问题,示例如下:

我有一个包含 n 个样本和 m 个特征 (m>1) 的数据集,假设异常仅反映在一个特征中——该特征的值始终为 0,在异常情况下为 1。我们的考虑是 PCA 将忽略此功能,当我们减少 PCA 之后的列数时(例如我们获取 95% 的数据),异常将“消失”。

是否不鼓励使用 PCA 查找异常?或者我们错过了什么?

请注意,这可能看起来像这里提出的一个极端情况:will-i-miss-anomalies-outliers-due-to-pca但是那里的答案不适合我的情况,无论如何据我所知他们的异常不应该是受 PCA 影响(出现在所有尺度上)。

4个回答

PCA用于减少您的功能数量,但并非必须如此。您将拥有与原始功能一样多的 PC,只是其中一些将占总可变性的极少部分。这可以在碎石或帕累托图中可视化,其中最后一台 PC 的累积方差达到 100%。因此,您不应在使用 PCA 时遗漏任何信息。[ PCA 的成分真的代表方差的百分比吗?它们的总和可以超过 100% 吗?但是,这里出现了两个矛盾的点:

1)如果在保留所有 PC 时没有实现降维,也就是说,如果您关心数据集中存在的所有异常,并且您的第一个目标是使用较少的功能(这会使您丢失一些信息) ,为什么要使用 PCA?

2)当兴趣是数据集的“主要变异模式”时,通常使用 PCA:通常是前几个 PC。正如我相信你所指出的那样,当你只考虑第一个 PC 用于降维时,一旦只保留主要组件,小异常就会被忽略。

希望这可以帮助。

编辑:一个特征的异常“大小”或频率本身并不重要,但您应该将它们与其他特征进行比较,以了解当您降低维度时它们是否会消失。比如说,如果这个特定异常的可变性与第一台 PC(您使用的 PC)(准)正交,那么您将丢失此信息。如果您很幸运,您感兴趣的异常的变异模式与整个数据集的主要变异模式相似,那么此信息将保存在第一台 PC 中。这里有一个关于这个问题的很好的讨论:https ://stats.stackexchange.com/a/235107/144543

您可以从本文中实现健壮的 PCA,其旨在将给定矩阵分解为稀疏和低秩部分。低秩部分可以被认为是“稳健的主成分”,而稀疏部分可以为您提供异常的线索。我在经济数据上使用过它,它给出了合理的结果。

我发现之前的答案令人困惑,所以这是我试图解释它的尝试。我可以通过两种方式看到这个问题:

  1. 这里的异常似乎意味着特定特征一直被破坏,因此您的问题是:“如果我进行 PCA 并采用与我的方差的 95% 相对应的组件,这些组件中是否会出现损坏的特征? ”如果所以,答案是“没有足够的数据得出有意义的结论”。PCA 通过查看数据的经验协方差进行操作——如果异常特征充分扭曲了经验协方差,那么它将出现在您删除的组件中(假设您的意思是标准 PCA)。因此,如果您的所有特征的范围是 [-0.1,0.1],那么您的样本很少,并且您所描述的异常就是您所描述的,那么它将严重扭曲您的 PCA 投影。一般来说,这根本不是一个好主意。

  2. 您可能还会问,“我的一些试验是异常的,但仅在几个维度上。用于降维的 PCA 是否消除了异常?” 答案是否定的。假设 PCA 应用于计算它的数据,PCA 会平等地查看所有维度和数据点。如果您对异常值检测(这将对应)感兴趣,并且您知道它与某些维度是隔离的,那么您最好的选择是简单地在每个维度上独立运行某种标准的异常值检测程序。

PCA 总结了训练集数据的协方差结构,因此将反映该集上存在的所有方差。PCA 会检测所有异常行为吗?没有任何方法可以,但它有它的优势,但它最大的优势在于模式处理,以及识别不寻常的模式,唉,这不是你所描述的。您似乎在谈论仅限于一个变量的罕见事件,但 PCA 仍然可以做很多事情

异常值出现两个问题

1)在训练/校准中。是否有任何样本呈现出在整个数据集中没有很好地表示的方差?如果只有一个样本呈现一种行为,那么您的 PCA 模型将无法可靠地描述该行为。存在许多识别此类问题的方法,包括 Hotelling 的 $T^2$、与模型的距离、杠杆、残差(后两者均可用于样本或变量)。这是一个热门话题,没有一个答案是普遍适用的。对我来说,如果没有很好地描述任何变化,则应删除样本或重新设计实验,否则它们会在您的模型中创建一个不可靠的元素,这将在新数据集中表现出不可预测的行为,因为您既不能很好地理解它的方差,也不能很好地理解它与其他所有事物的协方差.T2, distance to model, leverage, residuals (both of the latter 2 can be used sample or variable wise) . It is a hot topic, and no answer is universally applicable. To me if any variation is not well described the samples should be removed or the experiment redesigned as otherwise they create an unreliable element in your model that will behave unpredictably in new datasets as you have neither good understanding of its variance nor its covariance with everything else.

2)在测试/验证/应用程序中。所有 PCA 模型都应建立健全性检查,以确定是否存在模型未在新数据中解释的显着残差变化,以便您可以估计模型对样本的描述程度。如果有很多无法解释的差异,那么您就是在推断,应该谨慎行事。.

我们的考虑是 PCA 将忽略此功能,当 > 我们将减少 PCA 之后的列数(例如我们获取 > 95% 的数据)时,异常将“消失”。

如果您正确使用 PCA,则不会,如果您在上述指标中超越基本特征向量,您会看到任何此类行为。在很少有样本或变量异常并对模型造成巨大影响的情况下,这些通常可以在杠杆作用中检测到,而残差有助于确保特定样本或变量的变化已被您选择的 PC 数量考虑在内。

如果问题在于您正在查看您特别希望模型处理的罕见事件,那么问题在于您是否为您的研究提供了足够好的动力以对其行为进行可靠估计,而不是 PCA 本身的问题。实验设计还可以做一些事情,以确保使用有效的数据集捕获最大的相关方差。

是否不鼓励使用 PCA 查找异常?或者我们错过了什么?

我想说应该鼓励使用 PCA 来查找异常,但是需要探索各种工具来查找不同类型的异常。然而,异常可能反映了研究设计不适合兴趣的变化。