Python 对多个列执行LSTM
我对一个项目有一列顺序需求: 我有一个LSTM神经网络来测试这个网络的预测能力,它只适用于一列。请参阅下面的代码。但现在我想对不同的项目使用几列,并计算每列的“ABSE” 我该怎么做 代码如下:Python 对多个列执行LSTM,python,neural-network,lstm,bayesian,Python,Neural Network,Lstm,Bayesian,我对一个项目有一列顺序需求: 我有一个LSTM神经网络来测试这个网络的预测能力,它只适用于一列。请参阅下面的代码。但现在我想对不同的项目使用几列,并计算每列的“ABSE” 我该怎么做 代码如下: import numpy import matplotlib.pyplot as plt import pandas import math from keras.models import Sequential from keras.layers import Dense
import numpy
import matplotlib.pyplot as plt
import pandas
import math
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
# fix random seed for reproducibility
numpy.random.seed(7)
# load the dataset
dataframe = pandas.read_excel('dataset.xlsx')
dataset = dataframe.values
dataset = dataset.astype('float32')
# 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.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:],
dataset[train_size:len(dataset),:]
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)
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(4, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=0)
def ABSE(a,b):
ABSE = abs((b-a)/a)
return numpy.mean(ABSE)
# 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))
如果您的代码适用于第一列。只需单独提取列并将其提供给模型。像这样:
# train your model on first column
...
for name_col in dataframe.columns:
item = dataframe[name_col]
# your preprocessing
...
model.predict(item)
# your evaluation
...
如果您的代码适用于第一列。只需单独提取列并将其提供给模型。像这样:
# train your model on first column
...
for name_col in dataframe.columns:
item = dataframe[name_col]
# your preprocessing
...
model.predict(item)
# your evaluation
...
这两个项目相关吗?您想要2个LSTM还是一个具有2个输出的唯一LSTM?@SimonDelecourt我想要对每个项目执行相同的LSTM两次,以查看它如何分别预测这两个项目…这两个项目相关吗?您想要2个LSTM还是一个具有2个输出的唯一LSTM?@SimonDelecourt我想对每个项目执行相同的LSTM两次,以查看它如何分别对两个项目进行预测……但我必须预测我的训练和测试数据集。如何用“项目”替换此项?它不断给我这个错误:ValueError:形状为(1,1)的不可广播输出操作数与广播形状(1,2)不匹配。当我想反转定标器时会发生这个错误。但是我必须预测我的训练和测试数据集。如何用“项目”替换此项?它不断给我这个错误:ValueError:形状为(1,1)的不可广播输出操作数与广播形状(1,2)不匹配。当我想要反转定标器时,会发生此错误。