2015-07-17 2 views
0

Я пытаюсь предсказать типы лесных подставок (n = 43 классы кодирования ), на большом растровом ядре 1027206000 по случайным лесам.Пропуск уровней для прогнозирования randomForest с растром

Среди многих параметров, полученных DEM, которые я использую как ковариаты, у меня также есть 2 растра с идентификационными номерами геологической карты и почвенной карты. Многие категориальные единицы сопоставления идут с этими идентификаторами. Я тренирую модели с помощью фрейма данных и присоединяю к ним категориальные единицы отображения «слияние».

Пока все в порядке. Модель делает то, что она должна делать, и я может предсказать некоторые данные теста, хранящиеся в фрейме данных.

Но теперь я намерен сделать некоторые карты прогнозов. Но при запуске модели с растровой стеной или кирпичом дает только растры со всеми NA. Мое впечатление, , что я делаю что-то неправильно, передавая уровни факторов растровой/растербрике.

Это код, который воспроизводит проблему.

library(raster) 
library(rasterVis) 
library(randomForest) 

# make a raster 
set.seed(0) 
r <- raster(nrow=10, ncol=10) 
r[] <- runif(ncell(r)) * 10 
is.factor(r) 
r <- round(r) 

# make faktor 
f <- as.factor(r) 
is.factor(f) 

# get some none-sense levels 
x <- levels(f)[[1]] 
x$code <- paste("A",letters[10:20]) 
x$code2 <- paste("B",letters[10:20]) 
x$code3 <- letters[10:20] 

levels(f) <- x 
f<-deratify(f) # make a brick 
levels(f) 


set.seed(2) 
# get some none-sense dataframe 
xx<-data.frame(code=sample(rep(paste("A",letters[10:20]),10)), 
       code2=sample(rep(paste("B",letters[10:20]),10)), 
       code3=rep(letters[10:20],10), 
       y=as.factor(sample(rep(paste(rep(1:5)),22)))) 

# fit and predict a random forest with it 
ranfor<-randomForest(y~.,data=xx,ntree=100) 
predict(ranfor) 

# try to predict with a raster 
names(f)<-c("code","code2","code3") 
a<-predict(object=f,ranfor,na.omit=T,factors=list(code=levels(xx$code), 
      code2=levels(xx$code2), 
      code3=levels(xx$code3))) 

plot(a) # gives an empty raster 

# convert the raster to a dataframe and predict again 
x<-as.data.frame(f) 
names(x)<-c("code","code2","code3") 
aa<-predict(ranfor,x) 

plot(aa) # works just fine! 

Любые предложения? Спасибо!

R version 3.1.2 (2014-10-31) Platform: x86_64-w64-mingw32/x64 (64-bit) 

locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: [1] stats  graphics grDevices utils  datasets methods base  

other attached packages: [1] randomForest_4.6-10 rasterVis_0.35  latticeExtra_0.6-26 RColorBrewer_1.1-2 lattice_0.20-33  raster_2.4-15  sp_1.1-1   

loaded via a namespace (and not attached): [1] grid_3.1.2 hexbin_1.27.0 Rcpp_0.11.6 rgdal_1.0-4 tools_3.1.2 zoo_1.7-12 

ответ

0

Для решения проблем, я создал растры все категориальные переменных после я переделал уровни факторов от символьных строк в «числовые» уровнях. Затем предскажите: растр выполняет работу. Однако это довольно плохое решение проблемы. Так что: любая помощь очень ценится!

Смежные вопросы