Я построил эту нейронную сеть для прогноза по нескольким продуктам, но у меня возникла проблема с настройкой моего тестового набора данных.
Я не понимаю, что делать с тестовым набором данных. Потому что, когда я запускаю всю вещь без включения «X_test» в train_test_split, она работает, но не дает прогноза на моих тестовых данных.
data1 = d1.merge(data3)
data1['Date'] =pd.to_datetime(data1['Date'])
data1 = data1[data1.Id.apply(lambda x: x.isnumeric())]
data2 = data1.groupby('Id').apply(lambda x: x.set_index('Date').resample('D').sum())['Quantity'].reset_index()
######################################################training model#######################################################
train = data1[(data1['Date'] <= '2019-08-01')]
test = data1[(data1['Date'] >= '2019-08-01')]
train_gp = train.sort_values('Date').groupby(['Id', 'Date'], as_index=False)
train_gp = train_gp.agg({'Quantity': ['mean']})
train_gp.columns = ['Id', 'Date', 'Quantity']
test_gp = test.sort_values('Date').groupby(['Id', 'Date'], as_index=False)
test_gp = test_gp.agg({'Quantity': ['mean']})
test_gp.columns = ['Id', 'Date', 'Quantity']
def series_to_supervised(data, window=1, lag=1, dropnan=True):
cols, names = list(), list()
for i in range(window, 0, -1):
cols.append(data.shift(i))
names += [('%s(t-%d)' % (col, i)) for col in data.columns]
cols.append(data)
names += [('%s(t)' % (col)) for col in data.columns]
cols.append(data.shift(-lag))
names += [('%s(t+%d)' % (col, lag)) for col in data.columns]
agg = pd.concat(cols, axis=1)
agg.columns = names
if dropnan:
agg.dropna(inplace=True)
return agg
window = 90
lag_size =2
lag = lag_size
series = series_to_supervised(train_gp.drop('Date', axis=1), window = window, lag = lag)
last_Id = 'Id(t-%d)' % window
series = series[(series['Id(t)'] == series[last_Id])]
columns_to_drop = [('%s(t+%d)' % (col, lag)) for col in ['Id']]
for i in range(window, 0,1):
columns_to_drop += [('%s(t-%d)' % (col, i)) for col in ['Id']]
series.drop(columns_to_drop, axis=1, inplace=True)
series.drop(['Id(t)'], axis=1, inplace=True)
labels_col = 'Quantity(t+%d)' % lag_size
labels = series[labels_col]
series = series.drop(labels_col, axis=1)
X_train, X_valid, X_test, Y_train, Y_valid, Y_test = train_test_split(series, labels.values, test_size=0.25, random_state=0)
X_train_series = X_train.values.reshape((X_train.shape[0], X_train.shape[1], 1))
X_valid_series = X_valid.values.reshape((X_valid.shape[0], X_valid.shape[1], 1))
X_test_series = X_test.values.reshape((X_test.shape[0], X_test.shape[1],1))
model_cnn = Sequential()
model_cnn.add(Conv1D(filters=64, kernel_size=2, activation='relu',
input_shape=(X_train_series.shape[1], X_train_series.shape[2])))
model_cnn.add(MaxPooling1D(pool_size=2))
model_cnn.add(Flatten())
model_cnn.add(Dense(50, activation='relu'))
model_cnn.add(Dense(1))
model_cnn.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
cnn_history = model_cnn.fit(X_train_series, Y_train, validation_data=(X_valid_series, Y_valid), epochs = 5, verbose=2)
cnn_eval = model_cnn.evaluate(X_valid_series, Y_valid)
cnn_predict = model_cnn.predict(X_test_series)
X_test["prediciton"] = cnn_predict
X_test.to_csv("predictions.csv")
И я получаю ошибку
X_train, X_valid, X_test, Y_train, Y_valid, Y_test = train_test_split(series, labels.values, test_size=0.25, random_state=0)
ValueError: not enough values to unpack (expected 6, got 4)
В целом, я немного запутался в том, как использовать мой тестовый набор данных. Нужно ли мне снова запускать всю модель с test_gp или X_test покрывает ее?
Помощь по этому вопросу будет принята с благодарностью!