我使用了四年的数据,前3期的培训和第4期的测试。使用LSTM w/ Keras。我的测试数据集(它与培训完全没有重叠)一直比我的培训数据表现得更好。我该怎么解释呢?这似乎很不寻常。下面是模型输出的线索。您可以看到我在给定时期的训练精度在80%左右,但是测试输出跳到了86%左右:
Epoch 8/10
9092/9092 [==============================] - 9s 964us/step - loss: 0.9870 - acc: 0.8185
Epoch 9/10
9092/9092 [==============================] - 9s 1ms/step - loss: 0.9670 - acc: 0.7996
Epoch 10/10
9092/9092 [==============================] - 9s 937us/step - loss: 0.9799 - acc: 0.7895
Test Set Accuracy: 85.96%
predicted 0 1
actual
0 2639 238
1 211 111编辑:下面是创建和编译模型的代码:
embedding_vector_length = 32
days = 30
model = Sequential()
model.add(Embedding(2080, embedding_vector_length, input_length=days)
model.add(LSTM(100))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.summary())
model.fit(train_x, train_y, epochs=3, batch_size=64,class_weight={0:1.,1:1})
scores = model.evaluate(test_x, test_y, verbose=0)
print("Test Set Accuracy: %.2f%%" % (scores[1]*100))发布于 2019-05-24 08:45:59
我想你使用的是结构化数据(数字,分类,名义,序数):-这可能是由于阶级不平衡造成的。-如果您使用Scikit-学,您可以添加class_weight =“平衡”,这将自动称重类与其频率成反比。-测试这应该确认这是否是一个阶级不平衡问题。
PS: Francois (create )指出,对于结构化数据,传统算法优于深度学习。就个人而言,通过结构化数据,我从未能够将XGBoost的性能与深度学习相媲美。


发布于 2019-05-23 16:40:08
发布于 2019-05-23 16:36:06
您的模型似乎偏向于一个类,并且在第四年(测试数据)中,您得到了更多有偏见类的样本。由于训练数据不足,你也可以观察到这样的问题。
Probable solution: Add more samples in training data.注:您也可以尝试模型培训后,洗牌您的所有4年的数据,并分成培训和测试数据。
https://datascience.stackexchange.com/questions/52432
复制相似问题