首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的测试数据比我的训练数据更准确?

为什么我的测试数据比我的训练数据更准确?
EN

Data Science用户
提问于 2019-05-23 02:00:35
回答 4查看 1.2K关注 0票数 3

我使用了四年的数据,前3期的培训和第4期的测试。使用LSTM w/ Keras。我的测试数据集(它与培训完全没有重叠)一直比我的培训数据表现得更好。我该怎么解释呢?这似乎很不寻常。下面是模型输出的线索。您可以看到我在给定时期的训练精度在80%左右,但是测试输出跳到了86%左右:

代码语言:javascript
运行
复制
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

编辑:下面是创建和编译模型的代码:

代码语言:javascript
运行
复制
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))
EN

回答 4

Data Science用户

回答已采纳

发布于 2019-05-24 08:45:59

我想你使用的是结构化数据(数字,分类,名义,序数):-这可能是由于阶级不平衡造成的。-如果您使用Scikit-学,您可以添加class_weight =“平衡”,这将自动称重类与其频率成反比。-测试这应该确认这是否是一个阶级不平衡问题。

PS: Francois (create )指出,对于结构化数据,传统算法优于深度学习。就个人而言,通过结构化数据,我从未能够将XGBoost的性能与深度学习相媲美。

票数 2
EN

Data Science用户

发布于 2019-05-23 16:40:08

你的测试不走运。

使用交叉验证

此外,也要确保处理适当的/随机分割的测试和培训数据。所以它不会有偏见

票数 4
EN

Data Science用户

发布于 2019-05-23 16:36:06

您的模型似乎偏向于一个类,并且在第四年(测试数据)中,您得到了更多有偏见类的样本。由于训练数据不足,你也可以观察到这样的问题。

代码语言:javascript
运行
复制
Probable solution: Add more samples in training data.

注:您也可以尝试模型培训后,洗牌您的所有4年的数据,并分成培训和测试数据。

票数 2
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/52432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档