Можно ли хранить фрейм данных в глобальной среде с помощью eventReactive ()? - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь создать панель инструментов RЯ хочу опубликовать его в Интернете через Travis и Shinyapps.io.

Вот приложение, которое я пытаюсь разместить онлайн: https://loicpalma.shinyapps.io/Test_Shiny/ Код можно найти здесь: https://github.com/loicpalma/Shiny_App

Мое приложение отлично работает локально, но я получаю ошибку "out of memory" в журналах, когда пытаюсь выполнить этот конкретный код:

plot_all_ROCS <- eventReactive(input$go5, {

    set.seed(1337)

    test_svm_plot = test
    predictions_svm <- predict(svm_classifier(),newdata = test_svm_plot, probability=T)
    svm_predict_obj <- mmdata(as.numeric(predictions_svm),test_svm_plot$Class)
    svm_performance <- evalmod(svm_predict_obj)

    test_xgb_plot = test
    predictions_xgb= predict(xgb_classifier()
                             , newdata = as.matrix(test_xgb_plot[, colnames(test_xgb_plot) != "Class"])
                             , ntreelimit = xgb_classifier()$bestInd)
    xgb_predict_obj <- mmdata(as.numeric(predictions_xgb),test_xgb_plot$Class)
    xgb_performance = evalmod(xgb_predict_obj)

    test_knn = test
    predictions_knn <- predict(knn_classifier(),newdata = test_knn, type="prob")
    predictions_knn <- predictions_knn[,"1"]
    knn_predict_obj <- mmdata(as.numeric(predictions_knn),test_knn$Class)
    knn_performance = evalmod(knn_predict_obj)

    test_glm = test
    predictions_logreg <- predict(logreg_classifier(),newdata = test_glm, type = "response")
    logreg_predict_obj <- mmdata(predictions_logreg,test_glm$Class)
    logreg_performance = evalmod(mdat = logreg_predict_obj) 

    svm_df <- fortify(svm_performance)
    logreg_df <- fortify(logreg_performance)
    knn_df <- fortify(knn_performance)
    xgb_df <- fortify(xgb_performance)


    svm_df$classifier <- "SVM"
    logreg_df$classifier <- "LOGIT"
    knn_df$classifier <- "KNN"
    xgb_df$classifier <- "XGB"

    performance_df <- rbind(svm_df, logreg_df, knn_df, xgb_df)

    roc <- performance_df[performance_df$curvetype == "ROC",]

    ggplot() +
      # green plot
      geom_line(data=roc, aes(x=x, y=y,colour=classifier)) + 
      geom_abline(intercept=0, slope=1, linetype = "dashed") +
      ylab("Sensitivity") +
      xlab("1-Specificity") +
      ggtitle("ROC Comparison") +
      labs(colour = "Type of Model:")
  })

Действительно, я знаю, что получаю это "out of memory"ошибка, потому что ограничение установлено в 1 ГБ (бесплатная версия) и что я слишком много спрашиваю из shinyapps.io в одном submitButton.

Однако мне нужно снова сделать прогноз для всех моделей, потому что кажется Я не могу найти способ сохранить их раньше. Позвольте мне объяснить:

Вот пример для модели knn:

 knn_classifier <- eventReactive(input$go4, {

   set.seed(1337)
   classifier_knn <- knn3(Class ~ .
                          , data = train_smote_maison
                          , k = input$k)
  })


  output$knn <- renderPrint({
    print(knn_classifier())

  })


  output$conf_knn <- renderPlot({
    set.seed(1337)
    test_knn = test
    predictions_knn <- predict(knn_classifier(),newdata = test_knn, type="prob")
    predictions_knn_conf <- predictions_knn[,"1"]
    conf_knn = cbind(test_knn,predictions_knn_conf)
    colnames(conf_knn)[colnames(conf_knn)=="predictions_knn_conf"] <- "predicted"
    plot_confusion_matrix(conf_knn, "K-Nearest-Neighbors")


  })

  output$plot_ROC_knn <- renderPlot({
    set.seed(1337)
    test_knn = test
    predictions_knn <- predict(knn_classifier(),newdata = test_knn, type="prob")
    predictions_knn <- predictions_knn[,"1"]
    knn_predict_obj <- mmdata(as.numeric(predictions_knn),test_knn$Class)
    knn_performance <- evalmod(knn_predict_obj)

    plot(knn_performance, "ROC")


  })

  output$plot_PRC_knn <- renderPlot({
    set.seed(1337)
    test_knn = test
    predictions_knn <- predict(knn_classifier(),newdata = test_knn, type="prob")
    predictions_knn <- predictions_knn[,"1"]
    knn_predict_obj <- mmdata(as.numeric(predictions_knn),test_knn$Class)
    knn_performance <- evalmod(knn_predict_obj)

    plot(knn_performance, "PRC")



  })

В конце я хочу получить что-то вроде этого:

knn_classifier <- eventReactive(input$go4, {

  set.seed(1337)
  classifier_knn <- knn3(Class ~ .
                         , data = train_smote_maison
                         , k = input$k)
  test_knn = test
  predictions_knn <- predict(knn_classifier(),newdata = test_knn, type="prob")
  predictions_knn_conf <- predictions_knn[,"1"]
  conf_knn = cbind(test_knn,predictions_knn_conf)
  colnames(conf_knn)[colnames(conf_knn)=="predictions_knn_conf"] <- "predicted"
  knn_performance <- evalmod(knn_predict_obj)
  knn_df <- fortify(knn_performance)

})


output$knn <- renderPrint({
  print(knn_classifier())

})


output$conf_knn <- renderPlot({


  plot_confusion_matrix(conf_knn, "K-Nearest-Neighbors")


})

output$plot_ROC_knn <- renderPlot({

  plot(knn_performance, "ROC")


})

output$plot_PRC_knn <- renderPlot({

  plot(knn_performance, "PRC")



})

inЧтобы сохранить в глобальной среде переменную knn_df, чтобы мне не пришлось снова вычислять прогноз, когда я хочу выполнить сравнение моделей для ROC.

Мой вопрос заключается в следующем: Есть ли способ сохранить knn_df из eventReactive () в виде фрейма данных или .rds, чтобы мне не приходилось вычислять его в конце, когда я хочу построить все ROC одновременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...