无法在R中实现SVM

时间:2019-01-09 15:31:59

标签: r machine-learning svm

我正在尝试使用auto foo = std::cbegin(arr); 进行图像分类,但是遇到一个错误,即虽然已经在该论坛上进行了报道,但解决方案不适合我的情况。

我要分类的数据是两层的const

svm

我的训练数据是使用多边形作为参考并提取这些位置的像素值得到的:

raster stack

> S1_images
class       : RasterStack 
dimensions  : 1000, 1414, 1414000, 2  (nrow, ncol, ncell, nlayers)
resolution  : 10, 10  (x, y)
extent      : 670860, 685000, 6163420, 6173420  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
names       : X20180415_VH, X20180415_VV 
min values  : 1.621079e-05, 1.929869e-04 
max values  :      24.6396,     159.7452 

training_S<-raster::extract(S_images_t, training, df=TRUE) training_S$Class<-factor(training_S$Class) > head(training_S) ID X20180415_VH X20180415_VV Class 1 1 0.006463605 0.05813200 1 2 1 0.006663103 0.06266786 1 3 1 0.007048910 0.06308612 1 4 1 0.006351015 0.04774158 1 5 1 0.006822301 0.05248845 1 6 1 0.007194918 0.05911565 1 为最佳参数选择之后,我创建了模型(到目前为止,很好)

> str(training_S)
'data.frame':   33239 obs. of  4 variables:
 $ ID          : num  1 1 1 1 1 1 1 1 1 1 ...
 $ X20180415_VH: num  0.00646 0.00666 0.00705 0.00635 0.00682 ...
 $ X20180415_VV: num  0.0581 0.0627 0.0631 0.0477 0.0525 ...
 $ Class       : Factor w/ 9 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...

接下来,我尝试使用tune.svm对输入数据进行分类:

SVM<-svm(x=training_S[ ,c(1:(length(training_S)-1))], y=training_S$Class, gamma = 0.1, cost = 10)

这是我的错误:

predict

按照R Bloggers的示例,我将LC<-predict(S1_images, model=SVM, na.rm=TRUE) 转换为数据框,并正确重命名了列:

> LC<-predict(S1_images, model=SVM, na.rm=TRUE) 
Error in newdata[, object$scaled, drop = FALSE] : 
  (subscript) logical subscript too long

当尝试再次运行分类时:

raster stack

关于我的数据的一些额外信息:

S1_images_df <- data.frame(getValues(S1_images))
names(S1_images_df) <- c("X20180415_VH", "X20180415_VV")

我一直在检查这两个较早的帖子,但不确定如何在我的情况下实现该解决方案:

HereHere

1 个答案:

答案 0 :(得分:1)

在训练模型时,您似乎将ID作为协变量。如果ID有意义,并且您想将其包括在模型中,则需要向ID添加一个相应的S1_images_df字段。更可能的是,在将训练数据传递到svm时应该排除它:

SVM<-svm(x=training_S[, -c(1, ncol(training_S))], y=training_S$Class, gamma = 0.1, cost = 10)