为什么我的模型适用于 train_test_split 的测试数据,但不适用于新数据?

Why my model work ok with test data from train_test_split while doesn't with the new data?

我是机器学习新手。

我有一个连续的数据集。我正在尝试使用多种功能对目标标签进行建模。我利用 train_test_split 函数来分离训练数据和测试数据。我正在使用以下代码训练和测试模型:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = Sequential()
model.add(Dense(128, input_dim=X.shape[1], kernel_initializer = 'normal', activation='relu'))
model.add(Dense(1, kernel_initializer = 'normal'))
hist = model.fit(X_train.values, y_train.values, validation_data=(X_test.values,y_test.values), epochs=200, batch_size=64, verbose=1) 

当我使用 X_test 和 y_test 作为验证数据时,我可以获得很好的结果:

https://drive.google.com/open?id=0B-9aw4q1sDcgNWt5TDhBNVZjWmc

然而,当我使用这个模型来预测另一个数据时(X_real,y_real)(这与 X_test 和 y_test 没有太大区别,除了他们不是随机选择的 train_test_split) 我得到了不好的结果:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

model = Sequential()
model.add(Dense(128, input_dim=X.shape[1], kernel_initializer = 'normal', activation='relu'))
model.add(Dense(1, kernel_initializer = 'normal'))
hist = model.fit(X_train.values, y_train.values, validation_data=(X_real.values,y_real.values), epochs=200, batch_size=64, verbose=1) 

https://drive.google.com/open?id=0B-9aw4q1sDcgYWFZRU9EYzVKRFk

是不是过拟合的问题?如果是这样,为什么我的模型可以与 train_test_split 生成的 X_test 和 y_test 正常工作?

您的 "real data" 似乎与您的训练和测试数据不同。 为什么你首先有 "real" 和 "training" 数据?

我的方法是:

1: 混合你所有的数据

2:将数据 随机 分成 3 组(训练、测试和验证)

3:像现在一样使用训练和测试并优化分类器

4:当它足够好时,使用您的验证集验证分类器以确保不会发生过度拟合。

如果您的数据较少,那么我建议您尝试不同的算法。神经网络通常需要大量数据才能获得正确的权重。 此外,您的真实数据似乎不属于与火车和测试数据相同的分布。不要隐藏任何东西,随机播放所有内容并使用 Train/Validation/Test 拆分。