替换大数据中的异常值

Posted

技术标签:

【中文标题】替换大数据中的异常值【英文标题】:Replace outliers from big data 【发布时间】:2015-01-30 13:22:27 【问题描述】:

我有一个包含 12 个列和 600000 行的大数据,我想用这个函数替换异常值

 replace_outliers <- function(x, na.rm = TRUE, ...) 
    qnt <- quantile(x, probs=c(.25,.50 ,.75), na.rm = na.rm, ...)
    H <- 1.5 * IQR(x, na.rm = na.rm)
    y <- x
    y[x > (qnt[3] + H)] <-  qnt[2]
    y
 

但是使用 for 循环会花费很多时间,如果没有更好的硬件或集群,我可以更快地做到这一点吗?

【问题讨论】:

【参考方案1】:

有几种优化功能的方法,但就您的问题而言,操作并没有那么慢。

无论如何,不​​诉诸 data.tabledplyr 或并行编程,我们仍然可以通过简单地将函数重写为来获得适度的速度提升

replace_outliers2 = function(x, na.rm = TRUE, ...) 
  qnt = quantile(x, probs=c(.25,.50 ,.75), na.rm = na.rm, ...)
  x[x > (2.5*qnt[3]- 1.5*qnt[1])] = qnt[2]
  x

一些快速的时间安排:

R> x = matrix(rlnorm(600000*12), ncol=12)
R> system.time(for(i in 1:12) replace_outliers(x[,i]))
   user  system elapsed 
  1.448   0.008   1.469 
R> system.time( for(i in 1:12) replace_outliers2(x[,i]))
   user  system elapsed 
  0.860   0.004   0.869 

【讨论】:

以上是关于替换大数据中的异常值的主要内容,如果未能解决你的问题,请参考以下文章

用于过滤和替换异常值的循环

R异常数据检测及处理方法

机器学习数据预处理之离群值/异常值:标准差法

机器学习数据预处理之离群值/异常值:图像对比法

python大数据之异常值处理

通过计算 z 分数来修复 pandas 中的异常值