我有一个具有高维特征空间的数据集。是否有任何预处理方法可以从该数据集中检测异常值?我的意思是,离群值往往与其他数据点有很大不同,并且可能是由不正确的测量产生的。
识别高维设置中的异常数据
(经典)马氏距离不能 用于查找数据中的异常值,因为马氏距离本身对异常值很敏感(即,它们总是通过构造总和,数据集维度的乘积)。
推荐的解决方案取决于“高维”的含义。表示变量的数量和观察次数,
广义上,对于,当前用于高维设置中的异常值检测的最先进方法是存在许多实现的OGK算法。
OGK 的数值复杂度是,非常接近这个问题的理论下限,因为基于凸损失函数的方法不能可靠地检测异常值,如果有超过其中。
如果您的维数远大于 100,则必须首先对数据集进行(稳健)降维。
在这里,当前最先进的方法是 PCA 网格方法,它再次得到很好的实现,也可以在这里查看协方差矩阵的直接估计。
请注意,这三个过程都不需要大于. 最后两种方法的复杂度为在哪里是希望保留的组件的数量(在高维数据中通常远小于)。
相对优点:
ROBPCA 的一大优势是它在高维上的计算效率。
PCA-Grid 的最大优势在于它可以执行稳健的估计和硬变量选择(在赋予变量子集的权重为 0 的意义上)参见此处的链接和 pcaPP R 中的 sPCAgrid() 函数包裹。
一种基本方法是使用Mahalanobis distance,并寻找比您预期更极端的数据。Mahalanobis 距离是一种多维度量,它考虑了变量之间的相互关系模式。要记住的一个问题是,这是假设您的数据是连续的;如果你有一个离散变量(例如,男性与女性),我认为这是不合适的。
至于什么比您预期的更极端,这部分取决于您的样本量。例如,很多人认为您应该修剪大于 2 个 z 的数据,但实际上,如果您有 100 个数据点,则可以合理地预期 5 应该超出该阈值而不会出现任何问题。
在不查看数据的情况下(即之前)仔细考虑变量也是值得的。例如,通常情况下,您可以简单地凭直觉判断适当的值范围。(如果您有一个身高被列为 7'10" 的人,那可能是一个错字。)
可能值得一看的是一类 SVM,它试图构建包含尽可能大比例数据的最小超球面,已在机器学习社区中成功用于新颖性检测,因此它用于异常值检测似乎是合理的。我怀疑存在非线性版本(作为内核方法),这意味着内核诱导特征空间中的球体对应于包含属性空间中数据的流形的外部,不一定必须是超球形。警告:我在会议和期刊论文中看到过这种方法,但我自己没有在愤怒中使用过,所以你的里程可能会有所不同,但可能值得研究。