Я предсказываю содержание растворенного кислорода (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%