我是 R 新手。在将样本放入随机森林之前,我想进行一些离群值清理和从 0 到 1 的总体缩放。
g<-c(1000,60,50,60,50,40,50,60,70,60,40,70,50,60,50,70,10)
如果我从 0 - 1 进行简单的缩放,结果将是:
> round((g - min(g))/abs(max(g) - min(g)),1)
[1] 1.0 0.1 0.0 0.1 0.0 0.0 0.0 0.1 0.1 0.1 0.0 0.1 0.0 0.1 0.0 0.1 0.0
所以我的想法是将每列大于 0.95 分位数的值替换为小于 0.95 分位数的下一个值 - 0.05 分位数也是如此。
因此预缩放结果将是:
g<-c(**70**,60,50,60,50,40,50,60,70,60,40,70,50,60,50,70,**40**)
并缩放:
> round((g - min(g))/abs(max(g) - min(g)),1)
[1] 1.0 0.7 0.3 0.7 0.3 0.0 0.3 0.7 1.0 0.7 0.0 1.0 0.3 0.7 0.3 1.0 0.0
我需要这个公式来表示整个数据框,因此 R 中的功能实现应该类似于:
> apply(c, 2, function(x) x[x`<quantile(x, 0.95)]`<-max(x[x, ... max without the quantile(x, 0.95))
有人可以帮忙吗?
旁白:如果存在直接执行此工作的函数,请告诉我。我已经检查过 cut
和 cut2
。 cut
由于不唯一的中断而失败; cut2
可以工作,但只能返回字符串值或平均值,而且我需要一个 0 - 1 之间的数字向量。
试用:
a<-c(100,6,5,6,5,4,5,6,7,6,4,7,5,6,5,7,1)
b<-c(1000,60,50,60,50,40,50,60,70,60,40,70,50,60,50,70,10)
c<-cbind(a,b)
c<-as.data.frame(c)
问候并感谢您的帮助,
雷纳
最佳答案
请不要这样做。对于处理异常值来说,这不是一个好的策略 - 特别是因为 10% 的数据不太可能是异常值!
关于function - R:使用分位数 0.05 和 0.95 对数据框中的每一列进行异常值清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5281883/