神经网络在使用不同的数据集置换进行训练时会得到不同的结果,为什么?

时间:2017-01-23 11:51:57

标签: python validation tensorflow neural-network keras

我有一个使用带有张量流后端的keras的神经网络:

seed = 7
np.random.seed(seed)


model = Sequential()

model.add(Dense(32, input_dim=11, init='uniform', activation='relu'))
model.add(Dense(12, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_train, result_train, nb_epoch=50, batch_size=5)

scores = model.evaluate(X_test, result_test)
print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))

我正在测试公立大学的辍学​​者,他们的社会经济参数是变量,最初我有8个csv文件(名为a,b,c,d,e,f,g和h),有12个列标题和300,000行。结果是二进制,0表示保留,1表示丢弃,我在将数据馈送到NN之前对数据进行了规范化。

我的第一个训练集是a,b,c,d,e和f,其中g和h代表测试。神经网络为我提供了良好的特异性,灵敏度和准确度:70%,65%和66%。

有了这个,我训练了另一个与上述相同结构的NN,这次我的训练数据集是c,d,e,f,g和h,a和b作为我的新测试保留,但随后模型对特异性,敏感性和准确性提供了非常糟糕的结果:42%,48%和47%,我想知道为什么?是否有任何已发表的论文在神经网络中引用这种现象?

谢谢!

1 个答案:

答案 0 :(得分:1)

许多机器学习方法可能会遇到称为过度拟合的问题。 Wikipedia提供了各种参考。

您至少使用保留数据集的原因是测试您训练的模型与未见数据的匹配程度。理论上,您可以在一个数据集上100%准确,但在新数据上表现非常糟糕。

有些人使用交叉验证而不是仅使用一个或两个阻止数据集 - 这将尝试测试和训练集中的每个数据点。例如,使用10个数据点,使用9来训练并尝试适合第十个数据点。然后为每个排列做这个。

如果各种模式未在数据集中均匀分布,这可能是合适的。

如果您的某个训练集完全掉线,那么预测每个人退出的模型将最适合,但不会推广到任何没有丢失的数据。

通常值得进行一些分析性数据分析,以查看您的某些数据集是否具有代表性。