Отрицательные прогнозы с нейрой R lnet с использованием ReLU act fct - PullRequest
1 голос
/ 07 августа 2020

Я создаю ИНС для прогнозирования общих затрат на здравоохранение (следовательно, непрерывную переменную) с использованием ряда входных переменных, таких как возраст, пол, страховое покрытие и количество условий хрони c. Я предпринял следующие шаги, используя пакет R neura lnet:

  1. Я сначала стандартизировал значения, поэтому все независимые и зависимые значения переменных l ie находятся в диапазоне от 0 до 1 (с использованием min -max rule)

  2. Я создаю матрицу модели с независимыми и зависимыми переменными, а также создал формулу для нейронной net

    df_matrix <- model.matrix(~ total_cost_stand + sex + agestand + race + inscoverage + edu_year_stand + num_cc_stand,data = df)[,-1]
    
    f <- as.formula(paste(c(colnames(df_matrix))[1], 
             paste(c(colnames(df1_matrix[,c(2:ncol(df_matrix))])), collapse = "+"), 
             sep=" ~ "))
    
  3. Я создал фреймы данных для обучения и тестирования

    smp_siz <- floor(0.75*nrow(df_matrix))
    
    set.seed(465) 
    
    train_ind <- sample(seq_len(nrow(df_matrix)),size = smp_siz)
    
    train_df <- as.data.frame(df_matrix[train_ind, ])
    
    test_df <- as.data.frame(df_matrix[-train_ind, ])
    
  4. Учитывая, что я хотел использовать ReLU в качестве функции активации, я создал следующую функцию для помещения в нейронную систему net

    relu_copy <- function(x) ifelse(x>=0, x, 0)
    
  5. Теперь я запускаю neura lnet

    nn <- neuralnet::neuralnet(f ,
                        data = train_df ,
                        hidden = c(2,2) ,
                        act.fct = relu_copy,
                        threshold = 0.01 ,
                        err.fct = "sse",
                        algorithm = "rprop+" ,
                        linear.output = TRUE)
    

Однако некоторые из моих прогнозируемых выходов отрицательны, чего не должно быть. возможно, учитывая а) все мои данные были стандартизированы между 0 и 1 и б) Я использовал функцию активации ReLU, которая должна преобразовать все отрицательные значения в 0.

  output <- neuralnet::compute(nn, test_df[,-1]) 

  predict <- output$net.result * (max(df$total_cost) - min(df$total_cost)) + min(df$total_cost) 
  
  min(predict)
  [1] -1447.274

Буду очень благодарен за любые советы / объяснения, почему я получаю отрицательный PR результаты издания.

Спасибо!

...