【问题标题】:Keras in R: high accuracy model predicts same output classR中的Keras:高精度模型预测相同的输出类别
【发布时间】:2018-04-23 22:28:41
【问题描述】:

我最近开始在 R 中尝试使用 Keras,并构建了一个简单的预测模型。我得到了大约 85% 的合理准确度,但该模型为我的测试数据中的每个条目预测了完全相同的结果。

输入数据由 1000 行和 46 列数字指标组成(缩放到 0 和 1 之间)。 结果(即y变量)由两列组成,分别为“WIN”和“LOSE”,取值为1或0。如果“WIN”等于1,则“LOSE”必须等于0。

模型结构:

`model <- keras_model_sequential()
 model %>% 
  layer_dense(units = 5, activation = "relu", input_shape = c(46)) %>% 
  layer_dropout(rate = 0.1) %>% 
  layer_dense(units = 25, activation = "relu") %>%
  layer_dropout(rate = 0.05) %>%
  layer_dense(units = 10, activation = "relu") %>%
  layer_dropout(rate = 0.05) %>%
  layer_dense(units = 6, activation = "relu") %>%
  layer_dropout(rate = 0.05) %>%
  layer_dense(units = 2, activation = "softmax")`

然后我使用以下命令运行模型:

model %>% compile(loss = "categorical_crossentropy",optimizer =optimizer_rmsprop(),metrics = c("accuracy"))    
history <- model %>% fit(x_train, y_train, epochs = 30, batch_size = 128, validation_split = 0.2)

然后我用以下方法分析模型准确率,得到 85% 的结果:

model %>% evaluate(x_test, y_test,verbose = 0)

最后我做一些预测:

model %>% predict_classes(x_test)

其中“x_test”由 500 行组成,也有 46 个数字列。我用上面的代码行得到的预测输出是一个向量,等于“x_test”中的行数,但所有的值都是= 1(我知道这不可能是真的,因为这不会产生甚至接近的准确性85%)。

关于我做错了什么有什么想法吗?

谢谢!

【问题讨论】:

  • 你的数据集平衡还是稀有类?

标签: r machine-learning keras neural-network classification


【解决方案1】:

打赌,正如 cdeterman 对 cme​​ts 的暗示,您的数据集非常不平衡,即您的训练集中的 1 比 0 多得多。

在这种情况下,准确度作为衡量标准是没有意义的,您应该使用准确度、召回率和混淆矩阵来代替 - 谷歌“类不平衡”了解更多信息。

举个极端的例子,如果 85% 的训练标签是 1,那么通过将所有样本分类为 1(可以说不是你到底想要做什么)。

【讨论】:

  • 谢谢你,这正是问题所在!
猜你喜欢
  • 2021-05-28
  • 2018-09-13
  • 2018-08-08
  • 1970-01-01
  • 2019-03-22
  • 2021-12-18
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
相关资源
最近更新 更多