Низкая точность для модели глубокого обучения с mxnet в r - PullRequest
0 голосов
/ 30 апреля 2019

Я предсказываю содержание растворенного кислорода (DO) из других переменных питательных веществ, а также по месяцу и дате. Однако точность моей модели застряла на уровне около 60%, что намного ниже, чем у случайного леса (71%). Я новичок в этой области и надеялся, что кто-нибудь может дать мне несколько советов по улучшению точности модели. Я не могу установить tenorflow на свой ноутбук, поэтому mxnet - мой лучший способ.

Кроме того, мне интересно, возможно ли использовать LSTM в mxnet для моих данных, поскольку это не данные временных рядов.

В моих данных у меня есть 9 числовых переменных и 47 двоичных переменных из-за горячего кодирования Месяца, Даты и Landuse.

Спасибо !!!

Я попытался настроить num.round, количество скрытых слоев и скрытых единиц, batch.size и lr. Но самая высокая точность, которую я получил, была 65,5%.

 hcdata<-read.csv("hcdata.csv", header = TRUE, sep = ",")
 set.seed(123)
 nobs <- nrow(ndata)
 ntrain <- sample(nobs, 0.8*nobs)
 ntest <- setdiff(seq_len(nobs), ntrain)
 traindata <- hcdata[ntrain, ]
 testdata <- hcdata[ntest, ]
 data <- mx.symbol.Variable("data")
 fc1 <- mx.symbol.FullyConnected(data, name = "fc1", num_hidden = 20)
 act1 <- mx.symbol.Activation(fc1, name = "activ1", act_type = "relu")

 drop1 <- mx.symbol.Dropout(data = act1, p = 0.2)
 fc2 <- mx.symbol.FullyConnected(drop1, name = "fc2", num_hidden = 10)
 act2 <- mx.symbol.Activation(fc2, name = "activ2", act_type = "relu")

 drop2 <- mx.symbol.Dropout(data = act2, p = 0.2)
 fc3 <- mx.symbol.FullyConnected(drop2, name = "fc3", num_hidden = 3)

 softmax <- mx.symbol.SoftmaxOutput(fc3, name = "sm")

 devices <- mx.cpu()

 mx.set.seed(0)
 mxtraindata.x <- t(traindata[,1:56])
 mxtestdata.x <- t(testdata[,1:56])
 mxtraindata.x <- data.matrix(mxtraindata.x)
 mxtestdata.x <- data.matrix(mxtestdata.x)
 fm_dnn <- mx.model.FeedForward.create(softmax, X = mxtraindata.x, 
 y = traindata$DO, ctx = devices,
 num.round = 100, array.batch.size = 50, learning.rate = 0.05, 
 momentum = 0.9, eval.metric = mx.metric.accuracy, 
 initializer = mx.init.uniform(0.01),
 epoch.end.callback = mx.callback.log.train.metric(1))

 prob_dnn <- predict(fm_dnn, mxtestdata.x)
 pred_dnn <- max.col(t(prob_dnn))-1
 pred_dnn <- as.factor(pred_dnn)
 caret::confusionMatrix(testdata$DO, pred_dnn)

Я надеялся получить точность выше 70%

...