I have a LSTM neural network to test the prediction ability of this network and it works for one column. But now I want to use several columns for different items and calculate the ‘ABSE’ for every column. For example if I have two columns:
It needs to calculate the ‘ABSE’ function for every column separately.
My code below fails. Can somebody help me?
This is what I tried, but I get a value error:
ValueError: non-broadcastable output operand with shape (1,1) doesn't match the broadcast shape (1,2)
This happens on the line:
---> 51 trainPredict = scaler.inverse_transform(trainPredict)
the code:
def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return numpy.array(dataX), numpy.array(dataY) def ABSE(a,b): ABSE = abs((b-a)/b) return numpy.mean(ABSE) columns = df[['Item1','Item2']] for i in columns: # normalize the dataset scaler = MinMaxScaler(feature_range=(0, 1)) dataset = scaler.fit_transform(dataset) # split into train and test sets train_size = int(len(dataset) * 0.5) test_size = 1- train_size train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:] look_back = 1 trainX, trainY = create_dataset(train, look_back) testX, testY = create_dataset(test, look_back) trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1])) testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1])) # create and fit the LSTM network model = Sequential() model.add(LSTM(1, input_shape=(1, look_back))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') model.fit(trainX, trainY, epochs=1, batch_size = 1, verbose = 0) # make predictions trainPredict = model.predict(trainX) testPredict = model.predict(testX) # invert predictions trainPredict = scaler.inverse_transform(trainPredict) trainY = scaler.inverse_transform([trainY]) testPredict = scaler.inverse_transform(testPredict) testY = scaler.inverse_transform([testY]) # calculate root mean squared error trainScore = ABSE(trainY[0], trainPredict[:,0]) print('Train Score: %.2f ABSE' % (trainScore)) testScore = ABSE(testY[0], testPredict[:,0]) print('Test Score: %.2f ABSE' % (testScore)) print(testY[0].T,testPredict[:,0].T)