2016-04-23 48 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")