为类概率稳定神经网络预测

问题描述

我一直在尝试使用library(keras)将神经网络用于二进制设置,并且我对类概率(而不是事件的概率0/1)感兴趣

我的负面评价是正面评价的5.018倍。我添加了我一直在使用的代码。我无法稳定这些预测。我明白那杂音和一切。 但是我需要设置一些约束来每次获得接近的估计。 我没有想法。我还有什么可以用来稳定预测的?

我无法共享数据,因此这里是火车数据级别的预测摘要,并绘制了验证/火车图。

 first run               Second run
 Min.   :0.001843       Min.   :0.0004508 
 1st Qu.:0.012272       1st Qu.:0.0156236 
 Median :0.042264       Median :0.0459510 
 Mean   :0.142551       Mean   :0.1400624  
 3rd Qu.:0.195536       3rd Qu.:0.1937293
 Max.   :0.919892       Max.   :0.9882065 

第一次运行的验证图

first run

和第二次运行的验证图

enter image description here

l2_model <- 
  keras_model_sequential() %>%
  layer_dense(units = 512,activation = "relu",input_shape =  ncol(XX_train1),kernel_regularizer = regularizer_l2(0.001)) %>% 
  layer_batch_normalization()%>%
  layer_dense(units = 256,kernel_regularizer = regularizer_l2(0.001)) %>%
  layer_batch_normalization()%>%
  layer_dense(units = 1,activation = "sigmoid",bias_initializer = initializer_constant(log(5.0189)))

l2_model %>% compile(
  optimizer="Adam",loss = "binary_crossentropy",metrics =  c('accuracy')
)

summary(l2_model)

l2_history <- l2_model %>% fit(
  x                = as.matrix(XX_train1),y                = YY_train1,epochs = 30,batch_size = 1000,validation_data = list(XX_test,YY_test[,2]),verbose = 2,callbacks = list(
    callback_early_stopping(patience = 2) )
 #,callback_reduce_lr_on_plateau()  )
)


# Predicted Class Probability
yhat_keras_prob_vec  <- predict_proba(object = l2_model,x = as.matrix(XX_train1)) %>%
  as.matrix()

summary(yhat_keras_prob_vec)

解决方法

所以我一直在努力,我开始控制一堆东西以获得诸如learning ratedecay之类的紧密估计,部分代码像这样optimizer=optimizer_adam(lr = 0.0001,decay = 0.001),然后我使用了所有正则化器kernel_regularizer,bias_regularizer和activity_regularizer作为每个layer_dense()中的 l2正则化器,最后是输出层,我只使用了 bias和活动正则化器