我正在根据其他营养变量和月份和日期来预测溶解氧含量(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%以上的准确度