1

年齢、性別、保険適用範囲、慢性疾患の数などのさまざまな入力変数を使用して、総医療費 (したがって連続変数) を予測する ANN を構築しています。R のニューラルネット パッケージを使用して、次の手順を実行しました。

  1. 最初に値を標準化して、すべての独立変数と従属変数の値が 0 から 1 の間にあるようにしました (min-max ルールを使用)

  2. 独立変数と従属変数を含むモデル マトリックスを作成し、ニューラル ネットワークの式も作成しました。

    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 を使用したかったので、次の関数を作成してニューラルネットに入れました

    relu_copy <- function(x) ifelse(x>=0, x, 0)
    
  5. 今、私はニューラルネットを実行します

    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)
    

ただし、予測された出力のいくつかは負であり、a) すべてのデータが 0 と 1 の間で標準化され、b) すべての負の値を 0 に変換する必要がある ReLU アクティベーション関数を使用した場合、これは不可能です。

  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

否定的な予測結果が得られる理由について、ヒントや説明をいただければ幸いです。

ありがとう!

4

0 に答える 0