2016-04-23 10 views
0

Ich bin neu in R. Und ich habe bereits ein SVM-Modell in R. Im Moment habe ich zwei Rasterbild, eines ist die Erhebung, ein anderes ist die Steigung. Die Höhe und die Steigung würden als Prädiktoren für SVM verwendet werden. Und ich möchte die Ergebnisse auch als Karte darstellen.Verwenden Sie SVM-Vorhersage Raster-Datei in R

Momentan ist mein Code wie folgt, aber die Vorhersage für die zwei Rasterbildeingabe gibt alle 0 zurück. Es sollte 0 oder 1 sein. Alles falsch?

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) 

Antwort

0

Vielleicht ist es ein bisschen spät, um diese Frage zu beantworten, aber ich hatte das gleiche Problem. Die Funktion raster :: predurn scheint nicht dieselbe Ausgabe zu liefern wie stats: predict. Meine alternative Lösung besteht einfach darin, die Werte aus Ihren Prädiktorrastern (Steigung und Höhe) zu extrahieren. Verwenden Sie dann ggplot, um die Ergebnisse räumlich zu projizieren.

####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() 
0

ich dieses Problem hatte und festgestellt, dass, wenn ich die Schichten meiner RasterStack umbenannt ihre Variablennamen zu sein, und die Art Option hinzugefügt, es funktionierte!

z.B.

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