R中使用mxnet的深度学习模型的准确性较低

时间:2019-04-30 06:26:10

标签: r lstm mxnet

我正在根据其他营养变量和月份和日期来预测溶解氧含量(DO)。但是,我的模型的准确性一直停留在60%左右,远低于随机森林(71%)。我是该领域的新手,希望有人能给我一些建议来提高模型的准确性。我无法在笔记本电脑中安装tensorflow,因此mxnet是我的最佳选择。

此外,我想知道是否可以在mxnet中将LSTM用于我的数据,因为它不是时间序列数据。

由于月份,日期和土地使用情况的热编码,在我的数据中,我有9个数字变量和47个二进制变量。

谢谢!

我尝试调整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%以上的准确度

0 个答案:

没有答案