我正在研究 R 中的“异常”检测任务。我的数据集有大约 30,000 条记录,其中大约 200 条是异常的。它有大约 30 列,都是定量的。一些变量高度相关(~0.9)。异常是指某些记录的某些列具有异常(高/低)值,而有些记录的相关变量未按预期运行。下面的例子会给出一些想法。
假设车速和心率高度正相关。通常车速在 40 和 60 之间变化,而心率在 55-70 之间。
time_s steering vehicle.speed running.distance heart_rate
0 -0.011734953 40 0.251867414 58
0.01 -0.011734953 50 0.251936555 61
0.02 -0.011734953 60 0.252005577 62
0.03 -0.011734953 60 0.252074778 90
0.04 -0.011734953 40 0.252074778 65
在这里,我们有两种类型的异常。第 4 条记录的 heart_rate 值非常高,而第 5 条记录看起来还不错,如果我们查看各个列。但是我们可以看到 heart_rate 随着速度的增加而增加,我们预计第 5 条记录的心率较低,而我们的值较高。
我可以使用箱线图等识别列级异常,但发现很难识别第二种类型。我在某处读到了基于 PCA 的异常检测,但我在 R 中找不到它的实现。
在这种情况下,您能否帮助我在 R 中进行基于 PCA 的异常检测。我的谷歌搜索主要是抛出与时间序列相关的东西,这不是我想要的。
注意:Microsoft Azure 机器学习中有一个类似的实现——“基于 PCA 的信用风险异常检测”可以完成这项工作,但我不知道它背后的逻辑并在 R 中复制相同的逻辑。