Использовать SVM для прогнозирования растрового файла в R

Я новичок в R. И у меня уже есть модель SVM в R. Прямо сейчас у меня есть два растровых изображения, одно — высота, другое — уклон. Высота и наклон будут использоваться в качестве предикторов для SVM. И я также хочу представить результаты в виде карты.

Прямо сейчас мой код выглядит следующим образом, но предсказание для ввода двух растровых изображений возвращает все 0. Должно быть 0 или 1. Что-то не так?

library("e1071")
tornado=read.csv(file="~/Desktop/new.csv",header=TRUE,sep=",")

err<- rep(0,5)
m<-0

for (i in c(1:5)) {
 #split the data sets into testing and training
 training.indices <- sample(nrow(tornado), 1800)
 training <- rep(FALSE, nrow(tornado))
 training[training.indices] <- TRUE

 tornado.input<- tornado[training,]
 tornado.input=data.frame(tornado.input)
 tornado=data.frame(tornado)

 tornado$Sig <- factor(tornado$Sig)

 model <- svm(Sig~slope+elevation, data=tornado.input)

 pred<- predict(model, tornado[!training,] )

 ConfM1<- table(tornado$Sig[!training], pred=pred)

 err[i]<-(sum(ConfM1)-sum(diag(ConfM1)))/sum(ConfM1)

}

library("raster")
library("rgdal")
elevation <- raster("~/Desktop/elevation.tif")
slope<- raster("~/Desktop/slope.tif")
#plot(elevation)
#plot(slope)

logo <- brick(elevation, slope)

r1 <- predict(logo,model)

plot(r1)

person DU XINWEI    schedule 23.04.2016    source источник


Ответы (2)


Может быть, уже немного поздно отвечать на этот вопрос, но у меня была такая же проблема. Функция raster::predict, похоже, не дает того же результата, что и stats:predict. Мое альтернативное решение состоит в том, чтобы просто извлечь значения из ваших растров-предикторов (наклон и высота), а затем использовать ggplot для пространственного проецирования результатов.

####Convert raster into dataframe
logo_df <- as.data.frame(values(logo))
logo_df[c("x","y")] <- coordinates(logo)
logo_df <- logo_df[complete.cases(logo_df),] # in case you had holes in your raster

#### predict to this new data
pred <- predict(model, logo_df, probability = T)
logo_df$svm.fit <- attr(pred, "probabilities")[,2]

###map the predictions
ggplot(logo_df, aes(x,y,fill=svm.fit)) + 
  geom_tile() + 
  scale_fill_gradientn(colours = rev(colorRamps::matlab.like(100))) +
  coord_fixed()
person S.Derville    schedule 26.04.2017

У меня была эта проблема, и я обнаружил, что когда я переименовал слои моего RasterStack в их имена переменных и добавил параметр типа, это сработало!

e.g.

names(logo)<-c("elevation","slope")
r1<-predict(logo,model,type="response")
person sippstress    schedule 03.02.2018