python - 为什么我的模型可以正常使用 train_test_split 中的测试数据,而不能使用新数据?

标签 python machine-learning neural-network regression train-test-split

我是机器学习新手。

我有一个连续的数据集。我正在尝试使用多个功能对目标标签进行建模。我利用 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 一起正常工作?

最佳答案

似乎您的“真实数据”与您的训练和测试数据不同。 为什么首先要有“真实”和“训练”数据?

我的方法是:

1:混合您拥有的所有数据

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

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

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

关于python - 为什么我的模型可以正常使用 train_test_split 中的测试数据,而不能使用新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46790654/

相关文章:

python - 生成特定范围之间的随机 double

python - 子类化 python unittest.Testcase,调用相同的 main

python - 如何在 Keras 中设置自适应学习率

python - 通过matplotlib中的箭头连接轴中的一个点和另一个轴中的另一个点

python - 如何在sklearn的交叉验证中获得多类roc auc?

r - 在 azure-ml : Where can stdout and stderr logs be found? 中调试 R 脚本(或者为什么它们是空的?)

python - 如何从 Pandas 中的 DatetimeIndex 获取滚动窗口内的持续时间

tensorflow - FC 层后接 LSTM - Tensorflow

python - 如何将两个列表与第三个列表进行比较,如果存在匹配,则将它们分组到Python中的嵌套列表中?

python - 通过 Regex 操纵 Pandas 中的值