Ансамбль алгоритмов ML и RNN

#python #machine-learning #keras #lstm

Вопрос:

Я пытаюсь присоединиться к ансамблю алгоритмов ML и LSTM (RNN). Однако у меня возникают проблемы с объединением их всех вместе, потому что LSTM имеет 3-мерные [n_samples, временные интервалы, n_features], в то время как алгоритмы ML имеют 2-мерные массивы, и когда я пытаюсь обучить оценщиков, это приводит к следующей ошибке:

 expected ndim=2, found ndim=3
 

Вот код, который у меня есть до сих пор.

 #Initially, the LSTM model was created and reshaped into 3-dimensional arrays

#split into train and test sets
n_train_days = 176920
train = dataset[:n_train_days, :]
test = dataset[n_train_days:, :]

train_X, train_y = train[:, :-1], train[:, -1]
test_X, test_y = test[:, :-1], test[:, -1]

# reshape input to be 3D [samples, timesteps, features]
train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)

model = Sequential()
model.add(LSTM(10, activation='relu', input_shape=(train_X.shape[1], train_X.shape[2])))
#model.add(LSTM(10, input_shape=(1, look_back)))

model.add(Dense(1, activation='linear'))
opt = Adam(learning_rate=0.01)
model.compile(loss='mse', optimizer=opt)

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=50)
#history =model.fit(train_X, train_y, epochs=30, batch_size=72, validation_data=(test_X, test_y), verbose=2, callbacks=[es])
model.fit(train_X, train_y, epochs=30, batch_size=72, validation_data=(test_X, test_y), verbose=2, callbacks=[es])

#Then, I applied the ensemble:

#I tried to reshape into 2-dimensional arrays:

#reshape into 2d dimensional
train_X, train_y = train[:, :-1], train[:, -1]
test_X, test_y = test[:, :-1], test[:, -1]
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)

estimators = {'rf': DecisionTreesRegressor(),
'knn': KNeighborsRegressor(),
'svr': SVR(kernel='rbf'),
'rnn': model}

for name, estimator in estimators.items():
estimator = estimator.fit(train_X, train_y)
 

ИЗМЕНИТЬ: Я пытался использовать эту технику

 train_X = train_X.reshape((nsamples,nx*ny))
train_X.shape
 

Но я получаю ошибку, она меняется между первой ошибкой и второй ошибкой.
Input 0 of layer sequential is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: (None, 10)