Вопрос по использованию rfe для прогнозирования новых растровых данных - PullRequest
0 голосов
/ 28 октября 2019

Я использую каретку в R для запуска rfe и настройки сетки на линейной модели SVM (как пример - я также пытаюсь запустить радиальные SVM и полиномиальные SVM). Я пытаюсь уменьшить количество предикторов (всего их 62), а затем хочу использовать окончательную модель для прогнозирования новых данных. Я предполагаю, что, как только у меня будет окончательное количество предикторов, при использовании функции предикторов я должен использовать новые данные, только с выбранными предикторами, а не с целым набором предикторов?

Я предсказываю растровый блок переменных и мне интересно, будет ли окончательная модель автоматически обрабатывать эти переменные или мне придется делать это самому, прежде чем делать предсказания?

Как только я получуВ последней модели я запускаю предикторы (L_model) и выбираю 10 предикторов. В новом наборе данных я затем удаляю предикторы (здесь в форме растровых файлов), которые не были выбраны, и пытаюсь предсказать, используя L_model $ fit - но получающаяся растровая карта выглядит довольно странно, а не то, что я бы имелаожидается.

#model.data_fluigdigm contains asine-sqrt transformed prevalence data and 62 
#predictors, all spatially extracted from raster files (as the prevalence 
#data is also spatial with x and y coordinates) - I have already run 
#correlation tests and removed highly correlated predictors (started out 
#with 104 predictors). I have 50 data points in total, which is why I would 
#like to reduce the amount of predictors further.

#create a trainControl element:
fitControl <- trainControl(method='LOOCV',  
                       savePredictions = "final",
                       returnResamp = "final")

## tuning grid for the linear model
grid_linear <-expand.grid(.C=c(0.01,0.1,1)) 

#running the model
L_model <- caret::rfe(Prev  ~ ., data =model.data_fluigdigm1
                                  , method = "svmLinear"
                                  ,tuneGrid = grid_linear
                                  , preProc = c("center","scale")
                                  ,sizes = c(5, 10, 20,30,40)
                                  ,trControl=fitControl
                                  ,rfeControl=rfeControl(functions = 
                                  caretFuncs,method='LOOCV', returnResamp=
                                  "final"))                                                          


#check model fit from CV
postResample(L_model$fit$pred$pred, L_model$fit$pred$obs)
[1]  RMSE  Rsquared       MAE 
0.1771695 0.4771384 0.1337923 

# now I want to predict to a larger area based on predictors in raster files
## I have a total of 62 raster files and a mask raster
rasterFiles <- list.files(path = "E:/Predictors/Predictors_dummy")
maskRaster <- raster('E:/Vecmap/ScandTick/GIS/maskRaster.tif')

# predictors selected by the model
rasterList <- predictors(L_model)
rasterList <- paste(rasterList,".tif",sep="")

#only select these predictor rasters to further predict
rasterFiles <- rasterFiles[rasterFiles %in% rasterList]

#create raster brick

ras1 <- lapply(rasterFiles,raster)
ras2 <- lapply(ras1,crop,maskRaster) 
ras2 <- lapply(ras2,raster::mask,maskRaster)
myBrick <- brick(ras2)

#the only way I can predict is by using L_model$fit, if I try just using 
#L_model, I get an error asking for all the predictors entered into the 
#model. When using the L_model$fit are the predictors then automatically 
#preprocessed?


p <- predict(myBrick,L_model$fit)

writeRaster(p, "Prev_Ri2", datatype= 'FLT4S', format = "GTiff",    
overwrite=TRUE)

Полученный растр выглядит очень странно - конечно, это может быть просто потому, что модель не очень хорошая, но я хочу убедиться, что мой метод является правильным и правильным - чтоиспользование L_model $ fit правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...