Как создать сформулированную таблицу в R? - PullRequest
0 голосов
/ 24 апреля 2020

Это мой воспроизводимый пример:

#http://gekkoquant.com/2012/05/26/neural-networks-with-r-simple-example/

library("neuralnet")
require(ggplot2)

traininginput <-  as.data.frame(runif(50, min=0, max=100))
trainingoutput <- sqrt(traininginput)
trainingdata <- cbind(traininginput,trainingoutput)
colnames(trainingdata) <- c("Input","Output")

Hidden_Layer_1 <- 1       # value is randomly assigned 
Hidden_Layer_2 <- 1       # value is randomly assigned
Threshold_Level <- 0.1    # value is randomly assigned

net.sqrt <- neuralnet(Output~Input,trainingdata, hidden=c(Hidden_Layer_1, Hidden_Layer_2), threshold = Threshold_Level)

#Test the neural network on some test data
testdata <- as.data.frame((1:13)^2)              #Generate some squared numbers
net.results <- predict(net.sqrt, testdata)       #Run them through the neural network

cleanoutput <- cbind(testdata,sqrt(testdata),
                     as.data.frame(net.results))

colnames(cleanoutput) <- c("Input","ExpectedOutput","NeuralNetOutput")

ggplot(data = cleanoutput, aes(x= ExpectedOutput, y= NeuralNetOutput)) + geom_point() +
  geom_abline(intercept = 0, slope = 1
              , color="brown", size=0.5)

rmse <- sqrt(sum((sqrt(testdata)- net.results)^2)/length(net.results))

print(rmse)

Здесь, когда мой Hidden_Layer_1 равен 1, Hidden_Layer_2 равен 2, а Threshold_Level равен 0.1, мой rmse сгенерировано 0.6717354.

Допустим, мы попробуем другой пример,

, когда мой Hidden_Layer_1 равен 2, Hidden_Layer_2 равен 3, и Threshold_Level равно 0.2, мои rmse сгенерированы 0.8355925.

Как мне создать таблицу, которая будет автоматически вычислять значение rmse, когда пользователь назначит значение для Hidden_Layer_1, Hidden_Layer_2 и Threshold_Level. (Я знаю, как это сделать в Excel, но не в r хаха)

Нужная таблица должна выглядеть следующим образом:

enter image description here

У меня есть sh, что у меня есть Trial(s), Hidden_Layer_1, Hidden_Layer_2, Threshold_Level и rmse в моем столбце, и число строк может быть сгенерировано бесконечно путем ввода некоторого actionButton (если возможно), означает, что пользователь может продолжать попытки, пока не получит желаемый rmse.

Как я могу это сделать? Может кто-нибудь мне помочь? Я определенно извлеку уроки из этого урока, так как я новичок в r. Большое спасибо всем, кто хочет помочь мне.

1 Ответ

0 голосов
/ 24 апреля 2020

Вот способ создать таблицу значений, которая может отображаться с помощью средства просмотра фрейма данных.

# initialize an object where we can store the parameters as a data frame
data <- NULL

# function to receive a row of parameters and add them to the
# df argument
addModelElements <- function(df,trial,layer1,layer2,threshold,rmse){
     newRow <- data.frame(trial = trial,
                          Hidden_Layer_1 = layer1,
                          Hidden_Layer_2 = layer2,
                          Threshold = threshold,
                          RMSE = rmse)
     rbind(df,newRow)
}

# once a model has been run, call addModelElements() with the 
# model parameters 
data <- addModelElements(data,1,1,2,0.1,0.671735)
data <- addModelElements(data,2,2,3,0.2,0.835593)

... и вывод:

View(data)

enter image description here

Обратите внимание, что если вы собираетесь создавать оценки или сотни строк параметров и среднеквадратических результатов перед отображением любого из них для конечного пользователя, код должен быть изменен для повышения эффективности rbind(). В этом сценарии мы создаем список наборов параметров, преобразуем их во фреймы данных и используем do.call() для выполнения rbind() только один раз.

# version that improves efficiency of `rbind()
addModelElements <- function(trial,layer1,layer2,threshold,rmse){
     # return row as data frame
     data.frame(trial = trial,
                Hidden_Layer_1 = layer1,
                Hidden_Layer_2 = layer2,
                Threshold = threshold,
                RMSE = rmse)
}

# generate list of data frames and rbind() once

inputParms <- list(c(1,1,2,0.1,0.671735),
                   c(1,1,2,0.3,0.681935),
                   c(2,2,3,0.2,0.835593))

parmList <- lapply(inputParms,function(x){
     addModelElements(x[1],x[2],x[3],x[4],x[5])
})
# bind to single data frame
data <- do.call(rbind,parmList)
View(data)

... и вывод:

enter image description here

...