Стратифицированная выборка, кажется, не меняет случайные результаты
Я использую пакет randomForest в R для построения нескольких моделей распространения видов. Моя переменная ответа является двоичной (0 - отсутствие или 1-присутствие) и довольно несбалансированной - для некоторых видов соотношение отсутствий: присутствий составляет 37: 1. Этот дисбаланс (или нулевая инфляция) приводит к сомнительным оценкам ошибок «вне пакета» - чем больше отношение отсутствий к присутствию, тем ниже оценка ошибки «мой пакет из пакета».
Чтобы компенсировать этот дисбаланс, я хотел реализовать стратифицированную выборку таким образом, чтобы каждое дерево в случайном лесу включало равное (или, по крайней мере, менее несбалансированное) количество результатов как из категории присутствия, так и отсутствия. Я был удивлен, что нетКажется, что нет никакой разницы в стратифицированной и не стратифицированной модельных оценках ошибок OOB. Смотрите мой код ниже:
Без стратификации> set.seed(25)
> HHrf HHrf
Call:
randomForest(formula = factor(HH_Pres) ~ SST + Dist2Shr + DaylightHours + Bathy + Slope + MoonPhase + factor(Region) + Chla, data = bll_HH, ntree = 500, replace = FALSE, importance = TRUE, na.action = na.omit)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 2
OOB estimate of error rate: 19.1%
Confusion matrix:
0 1 class.error
0 422 18 0.04090909
1 84 10 0.89361702
С расслоением> HHrf_strata HHrf
Call:
randomForest(formula = factor(HH_Pres) ~ SST + Dist2Shr + DaylightHours + Bathy + Slope + MoonPhase + factor(Region) + Chla, data = bll_HH, ntree = 500, replace = FALSE, importance = TRUE, na.action = na.omit)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 2
OOB estimate of error rate: 19.1%
Confusion matrix:
0 1 class.error
0 422 18 0.04090909
1 84 10 0.89361702
Есть ли причина, по которой я получаю одинаковые результаты в обоих случаях? В качестве аргумента страты я указываю переменную ответа HH_Pres. Для аргумента sampsize я указываю, что он должен составлять 63,2% от всего набора данных.
Кто-нибудь знает, что я делаю не так? Или этого следовало ожидать?
Спасибо,
Лиза
Чтобы воспроизвести эту проблему:
Пример данных:https://docs.google.com/file/d/0B-JMocik79JzY3B4U3NoU3kyNW8/edit
Код:
bll = read.csv("bll_Nov2013_NMV.csv", header=TRUE)
HH_Pres