1

我是机器学习的新手。为什么我的模型与来自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如此不同,不同之处在于它们不是通过随机选择train_test_split y_test)我得到不好的结果:

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正常工作?

回答

0

看来你的“真实数据”,从您的火车和测试数据不同。 为什么首先有“真实”和“训练”数据?

我的做法是:

1:将所有数据必须

2:Devide你的数据在3套随机(火车,测试和验证)

3:使用火车和测试像你现在这样做,并优化分类

4:当它是足够好的验证您的验证设置,以确保没有发生过拟合的分类。

+0

对不起,我不擅长的术语。您可以将我的定义“real_data”计为“验证数据”。为什么我们需要验证数据? “测试数据”不够吗? “验证数据”虽然可以与“测试数据”保持一致,但模型如何失败?我知道“测试数据”的结果具有很高的方差。但就我而言,每次运行代码时测试数据都可以,但验证数据失败。顺便说一句。我的数据集是时间序列。 – Yahya

+0

你的猜测是一个过度的问题。换句话说,你可以训练你的分类器,直到它符合你的测试数据。为了确保您的良好结果不仅适用于您的测试数据,您还可以保留一些看不见的数据,以便100%确定您的分类器在测试结果(即您的验证数据)之后与您想象的一样好。但是为什么你的验证是不好的,而你的测试是好的显而易见的原因是这两个数据集彼此不同。所以问题是你有什么样的数据,甚至更重要:什么是“真实数据”以及为什么你称之为真实数据? –

+0

你说得对。看来验证数据与培训和测试数据不同。 – Yahya

0

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

相关问题