R中的Keras:高精度模型预测相同的输出等级

时间:2017-11-10 16:20:12

标签: 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)

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

关于我做错什么的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

下注,正如cdeterman暗示评论,你的数据集高度不平衡,即你的训练集中的1比0更多。

在这种情况下,作为指标的准确性毫无意义,你应该使用精确,召回和混淆矩阵 - 谷歌“类不平衡”更多。

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