2016-04-23 127 views
0

我是R新手。我已经在R中有一个SVM模型。现在,我有两个光栅图像,一个是高程,另一个是斜率。高程和坡度将被用作SVM的预测因子。我也想将结果绘制成地图。使用SVM预测R中的光栅文件

现在我的代码如下,但对于两个光栅图像输入的预测返回全部为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) 

回答

0

也许回答这个问题有点晚,但我有同样的问题。 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() 
0

我是有这个问题,并发现,当我重新命名RasterStack的层是他们的变量名,并添加类型选项,它的工作!

例如

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