繁体   English   中英

使用具有概率的 R 进行多元异常值检测

[英]Multivariate Outlier Detection using R with probability

我一直在到处寻找使用 R 识别多元异常值的最佳方法,但我认为我还没有找到任何可信的方法。

我们可以以虹膜数据为例,因为我的数据也包含多个字段

data(iris)
df <- iris[, 1:4] #only taking the four numeric fields

首先,我使用的是与库 MVN 的Mahalanobis 距离

library(MVN)
result <- mvOutlier(df, qqplot = TRUE, method = "quan") #non-adjusted
result <- mvOutlier(df, qqplot = TRUE, method = "adj.quan") #adjusted Mahalonobis distance

两者都导致了大量异常值(未调整的 150 个中的 50 个和调整后的 49/150),我认为需要更多的改进。 不幸的是,我似乎无法在 mvOutlier 方法中找到一个变量来设置阈值(说增加一个点成为异常值的概率,以便我们有一个较小的数字)

其次,我使用了异常值库 这是为了找到单变量异常值。 因此,我的计划是在数据的每个维度上找到异常值,并将所有维度上的异常值视为数据集的异常值。

library(outliers)
result <- scores(df, type="t", prob=0.95) #t test, probability is 0.95
result <- subset(result, result$Sepal.Length == T & result$Sepal.Width == T & result$Petal.Length == T & result$Petal.Width == T)

为此我们可以设置概率,但我认为它不能代替多元异常值检测。

我尝试过的其他一些方法

  • 图书馆(mvoutlier):这仅显示情节。 很难自动找到异常值。 而且我不知道如何将概率添加到此
  • 厨师的距离( 链接):一个人说他使用了厨师的距离,但我认为没有任何强有力的学术证据来证明这是可以的。

我会给你留下这两个链接,第一个是关于多元异常值检测的不同方法的论文,而第二个是研究如何在 R 中实现这些方法。

库克距离是查看数据点影响的有效方法,因此有助于检测外围点。 马哈拉诺比斯距离也经常使用。

对于您的测试示例,虹膜数据集没有用。 它用于分类问题,因为它显然是可分离的。 您排除 50 个数据点将摆脱整个物种。

多元数据中的异常值检测-

http://www.m-hikari.com/ams/ams-2015/ams-45-48-2015/13manojAMS45-48-2015-96.pdf

R实现

http://r-statistics.co/Outlier-Treatment-With-R.html

有非常有趣的选择。

第一个, Rlof包,用于计算局部异常值因子。 它计算反映观测异常程度的分数(称为局部异常值因子)。 它测量一个点的局部密度相对于它的邻居的偏差。 这个想法是检测密度比邻居低得多的样本。 实际上,局部密度是从 k 个最近的邻居中获得的。

二、孤独包。

它应用了一种受随机森林启发的方法,称为隔离森林。

两者都会生成不同的分数,这不是概率,但允许确定阈值,从中分配问题类型和主题知识认为合适的异常数据的数量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM