Как предсказать новый растр, используя модель, созданную cforest

Я использую модель randomForest для прогнозирования членства в классах. 'x' состоит из 10 классов, которые я использую для обучения значений 'training_predictors', извлеченных из большого стека растра / блока. Конкретная строка кодов:

r_tree ‹-randomForest (x ~., data = training_predictors, ...)

Затем я запускаю «прогноз», используя модель «r_tree», которую я применяю к растровому стеку «predictor_data», как показано ниже:

прогнозы ‹-predict (predictor_data, r_tree, filename = outraster, fun = predic na.rm = TRUE, format =" PCDISK ", overwrite = TRUE, progress =" text ", type =" response ").

На выходе получается растр, который я использую в качестве тематической карты.

Я хотел бы использовать режим условного вывода деревьев cforest вместо randomForest для достижения тех же целей.

Я понимаю, что «прогноз» можно использовать с cforest, но я не смог сгенерировать растровые файлы, например, с randomForest, как показано выше.


person Pierre Dubeau    schedule 22.04.2015    source источник


Ответы (1)


Он должен работать нормально, но вам может потребоваться добавить аргумент OOB = TRUE и определить факторы, если они есть.

Пример данных

p <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84, 85, 74, 84, 95, 85, 
   66, 42, 26, 4, 19, 17, 7, 14, 26, 29, 39, 45, 51, 56, 46, 38, 31, 
   22, 34, 60, 70, 73, 63, 46, 43, 28), ncol=2)

a <- matrix(c(22, 33, 64, 85, 92, 94, 59, 27, 30, 64, 60, 33, 31, 9,
   99, 67, 15, 5, 4, 30, 8, 37, 42, 27, 19, 69, 60, 73, 3, 5, 21,
   37, 52, 70, 74, 9, 13, 4, 17, 47), ncol=2)

# extract values for points
xy <- rbind(cbind(1, p), cbind(0, a))
v <- data.frame(cbind(xy[,1], extract(logo, xy[,2:3])))
colnames(v)[1] <- 'pa'

Базовая модель

library(party)
m1 <- cforest(pa~., control=cforest_unbiased(mtry=3), data=v)
pc1 <- predict(logo, m1, OOB=TRUE)
plot(pc1)

Модель с факторами

v$red <- as.factor(round(v$red/100))
logo$red <- round(logo[[1]]/100)
m2 <- cforest(pa~., control=cforest_unbiased(mtry=3), data=v)
f <- list(levels(v$red))
names(f) <- 'red'
pc2 <- predict(logo, m2, OOB=TRUE, factors=f)
plot(pc2)

Между прочим, это почти прямо из справочного файла raster :: Forecast

person Robert Hijmans    schedule 23.04.2015
comment
Привет, спасибо, но безуспешно. Я могу запустить редактирование, используя модель randomForest с размером «Large RasterStack» размером ~ 500 миллионов элементов, но когда я пытаюсь использовать модель cforest (базовую), она, похоже, работает, но после нескольких часов ожидания результата нет .. с теми же данными, за исключением этот cforest требует data.frame. Действительно озадачивает. Пьер - person Pierre Dubeau; 26.04.2015
comment
Что ж, из сказанного выше видно, что это должно работать. Если это не сработает, это может быть по нескольким причинам. Сначала настройте очень маленький пример, только для нескольких ячеек, и попробуйте сначала запустить его как data.frame (data.frame (s [1:10]) (если первые 10 ячеек не являются NA), затем для маленький растр (s [1:10, drop = FALSE]) - person Robert Hijmans; 26.04.2015
comment
Да, у меня была такая же мысль. Я провел тест с растровым файлом 100 × 100, и мне потребовалось около 10 минут, чтобы «предсказать» завершилось. Исходный растр имеет размер 2445 × 2852 (с ~ 75 переменными / слоями). При использовании объекта «Случайный лес» на выполнение требуется около 40 минут. Что ж, если скорость предсказания модели cforest верна, для получения полного растра потребуется почти 5 дней. Это довольно загадочно. Большое спасибо. - person Pierre Dubeau; 27.04.2015