使用SVM预测R中的栅格文件

时间:2016-04-23 16:42:52

标签: r svm r-raster

我是R的新手。我已经在R中有一个SVM模型。现在,我有两个光栅图像,一个是高程,另一个是斜率。高程和斜率将用作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)

2 个答案:

答案 0 :(得分:0)

回答这个问题可能有点迟,但我遇到了同样的问题。 raster :: predict函数似乎没有提供与stats相同的输出:predict。 我的另一种解决方案是简单地从预测器栅格中提取值(斜率和高程),然后使用ggplot在空间上投影结果。

MutableList<ObjectIntPair<String>> topOccurrences = company.getPerson()
        .stream()
        .map(Person::getTag)
        .collect(Collectors2.toBag())
        .topOccurrences(1);
String mostCommonTag = topOccurrences.getFirst().getOne();

答案 1 :(得分:0)

我遇到了这个问题,发现当我将RasterStack的图层重命名为变量名,并添加了类型选项时,它就可以了!

e.g。

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