如何使用 PCA 检测异常值?

机器算法验证 主成分分析 异常值 降维 异常检测
2022-04-01 23:29:51

PCA 将降低原始数据的维数并构建由特征向量生成的子空间,每个特征向量代表(下一个)最高方差来解释数据。

让我们从这个子空间开始:已经执行了 PCA,现在我们来看看相应的子空间:

主成分分析

现在让我们假设存在异常值(但具体在哪里)。现在如何检测到它们?

到目前为止,我知道有两种方法:

  • 跟踪 PC 之间的角度(s ?)

  • 检查电脑数量

我认为两者都不可靠,因为新的或更多的数据可能会在不提供异常值的情况下改变角度。轴的数量更有意义,但我仍然可以在脑海中构建新数据可能导致引入新轴的情况,而不会使那里的所有数据成为异常值。我想到了

  • 使用距离/定义的半径来扫描新的异常值,但我几乎找不到相应的方法?

  • 为什么 PCA 对异常值敏感?解释了为什么它对异常值敏感,这也可以用作工具。

换句话说:PCA 究竟是如何用于检测异常值的,它们在执行 PCA后是如何检测的?

1个回答

一种方法是考虑使用您选择的主向量不能很好地重建的那些点的异常值。

程序是这样的:

1.修复两个正数,a和b(请参阅下一步以了解如何选择它们;使用交叉验证进行细化)

2.计算PCA

3.保持与大于a的主值相关联的主向量,例如(这是正交向量)v1,v2,..,vk

4.对于每个数据点,使用步骤 3 中的主向量计算重建误差。对于数据点 x,重构误差为: ,其中e=||xi=1kwivi||2wi=viTx

5.将重构误差大于b的数据点输出为异常值。

更新:该过程仅捕获“方向”异常值。此外,在第一步之前,可以包括一个“规范”异常值检测步骤。这包括计算数据点的规范并将那些具有太小或太大规范的那些标记为异常值。

这取决于您的上下文中的异常值是什么。