r - R 中的 Keras : high accuracy model predicts same output class

标签 r machine-learning keras neural-network classification

我最近开始在 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%)。

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

谢谢!

最佳答案

打赌,正如 cdeterman 在评论中暗示的那样,您的数据集不平衡,即您的训练集中的 1 比 0 多得多。

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

举一个极端的例子,如果 85% 的训练标签是 1,那么通过将所有样本分类为 1(可以说,这不是一个简单的做法),您可以简单(且天真地)获得 85%(训练)准确度的“分类器”你到底想做什么)。

关于r - R 中的 Keras : high accuracy model predicts same output class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47227081/

相关文章:

regex - 仅包含主题标签的推文的正则表达式

ios - 是否可以通过 wifi 上传 .ml 模型文件而不是嵌入它们?

machine-learning - Keras + Tensorflow 奇怪的结果

python - 如何为keras源代码运行pytest

tensorflow - 拟合生成器函数中的数据增强误差

r - 获取 R 中回归使用的数据观察值 (plm)

r - R 中的 par(mfrow) 用于 ggplot

删除 R 中数据框中所有列名的前两个字符

python - 基于内部值的 Numpy 数组操作

python - 在多输出 keras 模型中计算损失时,y_pred 和 y_true 是什么?