2016-04-23 5 views
0

Я новичок в R. И у меня уже есть модель SVM в R. Прямо сейчас у меня есть два растровых изображения, один - это высота, другой - это наклон. Высота и уклон будут использоваться в качестве предикторов для СВМ. И я также хочу отобразить результаты в виде карты.Использовать 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

Возможно, немного поздно ответить на этот вопрос, но у меня была та же проблема. Функция растра :: предсказания, похоже, не дает того же результата, что и статистика: pred. Мое альтернативное решение состоит в том, чтобы просто извлечь значения из ваших ракурсов-предсказателей (наклон и высоту), а затем использовать 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") 
Смежные вопросы