svmPoly в SVM не может быть прочитано в поезде или предсказать функцию в R (классификация большого растра) - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь классифицировать большой растровый стек с помощью Векторной машины поддержки.Я пробую два подхода: 1) преобразовать все как матрицу, однако, поскольку растр слишком большой, в R не хватает памяти, поэтому я не могу преобразовать свой растр в матрицу.2) с функцией каретки.

Мой код выглядит так:

image <- stack()  ## this is a stack with 13 bands it is quite big 

Изображение выглядит так:

class       : RasterStack 
dimensions  : 22547, 22932, 517047804, 13  (nrow, ncol, ncell, nlayers)
resolution  : 8.983153e-05, 8.983153e-05  (x, y)
extent      : 112.7111, 114.7711, -3.180485, -1.155054  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs 
names       :  blue, green,   red,   re1,   re2,   re3,   nir,  nir2, swir1, swir2,  temp,  NDVI,   NBR 
min values  :     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,     0, -5052, -7670 
max values  :  4982,  5182,  5648,  5325,  3932,  5134,  6820,  6265,  7395, 13265, 13145,  8660,  9985 

training_data <- readOGR("xxx.shp")

это данные тренировки

class       : SpatialPolygonsDataFrame 
features    : 10 
extent      : 112.7161, 114.6713, -3.14763, -0.9813859  (xmin, xmax, ymin,ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84+towgs84=0,0,0 
variables   : 6
names       :   Classname, Classvalue, RED, GREEN, BLUE, Count 
min values  : Agriculture,          1,   0,     0,    0, 10937 
max values  :       Water,          9,  76,    76,   67, 58904 
Создание 250 выборок точек из многоугольников
ptsamp <- spsample(training_data, 250, type = 'stratified')
Добавление информации о классе к выборкам точек из многоугольников
ptsamp$Classvalue <- over(ptsamp, training_data)$Classvalue
извлечение значений с точками
df <- extract(image, ptsamp)
объединение информации о классе с извлеченными значениями
sampdata <- data.frame(classvalue = ptsamp$Classvalue, df)
Разделение обучающих данных на подмножество поездови тестовое подмножество
train <- sample(nrow(sampdata), round((nrow(sampdata) - 1) / 2, 0))
test <- c(1:nrow(sampdata))[!(c(1:nrow(sampdata)) %in% train)]
trainset.df <- sampdata[train,]

testset.df <- sampdata[test,]
Подгонка наилучшего SVM с использованием настройки
svm.fit <- best.svm(classvalue~., data = sampdata, gamma = 10^(-6:-1), 
           cost = 10^(-1:1))
Подготовка карты изображений для предсказаний
image.df <- data.frame(getValues(image))  
Здесь я получаю ошибку памяти;Я пробовал в качестве матрицы и получаю то же самое, что мне хотелось бы получить, чтобы перейти к этой части:
image.pred <- predict(svm.fit, image) 
Второй подход заключается в следующем:
library(caret)
library(kernlab)

model <- "svmPoly"
подготовка ДФ для обучения и занятий как фактор
trainx <- as.data.frame(df)

trainy <- sampdata[,1]
вПакет Theory Caret имеет опцию "svmPoly", однако он не работает ###, и я обнаружил, что он не работает:
test_class_cv_model <- train(trainx, trainy, method = "svmPoly", 
          metric = ifelse(is.factor(trainy), "Accuracy", "RMSE"),
          trControl = trainControl(), tuneGrid = NULL, 
                        tuneLength = 3)

primage1 <- predict(image, trainData = training_data, responseCol = 
"Classvalue", model= test_class_cv_model,tuneLength = 1, trainPartition = 
0.7)

plot(primage1$map, col = classcolor, legend = FALSE, axes = FALSE, box = 
`enter code here`FALSE)
legend(1,1, legend = levels(training_data$Classvalue), fill = colors , 
title = "Classes", horiz = TRUE,  bty = "n")
Я бы ожидал запустить SVM в большом растровом стеке с данными обучения в качестве шейп-файла,Я был бы очень признателен, если у кого-то есть решение или какие-либо другие альтернативы для запуска классификатора SVM в большом растровом стеке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...