Я 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)
С уважением и благодарностью за помощь,
Райнер
outliers
,mvoutliers
,heavy
,extremevalues
... просто перейдите к предоставленным пакетам и найдите подходящий. - person aL3xa   schedule 12.03.2011