【问题标题】:Stabilize Neural network prediction for class probability稳定类概率的神经网络预测
【发布时间】:2020-12-21 01:51:17
【问题描述】:

我一直在尝试使用 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 

第一次运行的验证图 和第二次运行的验证图

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, activation = "relu", 
              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)

【问题讨论】:

  • 您能详细说明您的问题的性质吗?您的网络是否需要为一个输入事件或每个事件输出一个概率?您在稳定非常高或非常低的概率或所有概率时遇到问题吗?
  • 一个想法是,在不同分布的类的情况下,以这种方式自定义损失,即较小类的预测权重比具有该想法的较大类之一的权重 5.018,即对较小类别的错误预测是预测较大类别错误的 5 倍。也许这会让你获得更多的百分比。此外,根据您的情况,您可能更喜欢 CNN 或 Rnn,因为它们可以很好地完成许多任务
  • @BahmanRouhani 我想说没关系。尽管我的预测不会每次都改变。就像同样的准确度 0.85 然后 0.87 我对准确度不感兴趣,因为我想使用类概率在其他地方使用它,但作为一个例子。我想接近上一次运行。
  • @MichaelJanz 我不知道他们(CNN/RNN)如何在代码中有所作为。有我可以使用的教程页面吗?我觉得我需要使用 l1 和 l2 正则化,也许我应该使用其他东西来代替bias_initilizer。

标签: r tensorflow keras neural-network prediction


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2015-07-31
    • 2011-02-16
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多