Я использую каретку в 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 правильно?