lstm时间序列预测 python_具有多个输出的LSTM时间序列预测

# -*- coding: utf-8 -*-importnumpyasnpimportnumpyimportmatplotlib.pyplotaspltimportpandasimportmathfromkeras.modelsimportSequentialfromkeras.layersimportDense,LSTM,Dropoutfromsklearn.preprocessingimportMinMaxScalerfromsklearn.metricsimportmean_squared_error# convert an array of values into a dataset matrixdefcreate_dataset(dataset,look_back=1):dataX,dataY=[],[]foriinrange(len(dataset)-look_back-1):a=dataset[i:(i+look_back):]dataX.append(a)dataY.append(dataset[i+look_back,:])returnnumpy.array(dataX),numpy.array(dataY)# fix random seed for reproducibilitynumpy.random.seed(7)# load the datasetdataframe=pandas.read_csv('v77.csv',engine='python',skiprows=0)dataset=dataframe.valuesprintdataset# normalize the datasetscaler=MinMaxScaler(feature_range=(0,1))dataset=scaler.fit_transform(dataset)# split into train and test setstrain_size=10test_size=10train,test=dataset[0:train_size,:],dataset[train_size:train_size+test_size,:]print(train_size,test_size)# reshape into X=t and Y=t+1look_back=3trainX,trainY=create_dataset(train,look_back)testX,testY=create_dataset(test,look_back)printtrainX# reshape input to be [samples, time steps, features]#trainX = numpy.reshape(trainX, (trainX.shape[0], look_back, 3))#testX = numpy.reshape(testX, (testX.shape[0],look_back, 3))# create and fit the LSTM networkmodel=Sequential()model.add(LSTM(32,input_shape=(3,3)))model.add(Dense(3))model.compile(loss='mean_squared_error',optimizer='adam')history=model.fit(trainX,trainY,validation_split=0.33,nb_epoch=10,batch_size=16)# make predictionstrainPredict=model.predict(trainX)testPredict=model.predict(testX)# print testPredict# print np.shape(testPredict)# Get something which has as many features as datasettrainPredict_extended=numpy.zeros((len(trainPredict),3))printtrainPredict_extendedprintnp.shape(trainPredict_extended[:,2])printnp.shape(trainPredict[:,0])# Put the predictions theretrainPredict_extended[:,2]=trainPredict[:,0]# Inverse transform it and select the 3rd coumn.trainPredict=scaler.inverse_transform(trainPredict_extended)[:,2]# print(trainPredict)# Get something which has as many features as datasettestPredict_extended=numpy.zeros((len(testPredict),3))# Put the predictions theretestPredict_extended[:,2]=testPredict[:,0]# Inverse transform it and select the 3rd column.testPredict=scaler.inverse_transform(testPredict_extended)[:,2]# print testPredict_extendedtrainY_extended=numpy.zeros((len(trainY),3))trainY_extended[:,2]=trainY

trainY=scaler.inverse_transform(trainY_extended)[:,2]testY_extended=numpy.zeros((len(testY),3))testY_extended[:,2]=testY

testY=scaler.inverse_transform(testY_extended)[:,2]# print# print testY# calculate root mean squared errortrainScore=math.sqrt(mean_squared_error(trainY,trainPredict))print('Train Score: %.2f RMSE'%(trainScore))testScore=math.sqrt(mean_squared_error(testY,testPredict))print('Test Score: %.2f RMSE'%(testScore))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值