赞
踩
数据展示,利用dataframe.WetBulbCelsius.values读取即可。
一,数据读取
使用pandas将dataframe二维格式的某一列直接读取出来即可。
import numpy as np import pandas as pd data=pd.read_csv('re.csv') seq_test=data['WetBulbCelsius'].values
二,时间窗口滑动生成数据集
def split_sequence(sequence, look_back): X, y = [], [] for i in range(len(sequence)): # 找到最后一次滑动所截取数据中最后一个元素的索引, # 如果这个索引超过原序列中元素的索引则不截取; end_element_index = i + look_back if end_element_index > len(sequence) - 1: # 序列中最后一个元素的索引 break sequence_x, sequence_y = sequence[i:end_element_index], sequence[end_element_index] # 取最后一个元素作为预测值y X.append(sequence_x) y.append(sequence_y) #return X,y return np.array(X), np.array(y) #look_back参照历史多长的数据长度,一般作为的是LSTM(input_shape=(look_back,1)),这里的1表示一个特征,out_put为(None,look_back,1)),None表示batch_size未定 look_back = 3 seq_test_x, seq_test_y = split_sequence(seq_test, look_back)
三,二维到三维转换
添加samples到数据维度中。seq_test_x.shape[0]表示总共的序列长度。
seq_test_x_1 = seq_test_x.reshape((seq_test_x.shape[0], look_back, 1))
四,模型搭建
from keras.models import Sequential from keras.layers import LSTM, Dense from keras.callbacks import LearningRateScheduler from keras import backend as K #----------------------------------------------- model = Sequential() model.add(LSTM(32, input_shape=(look_back, 1),return_sequences=True,activation='relu')) model.add(LSTM(16, activation='relu')) model.add(Dense(8)) model.add(Dense(1))# 单步预测,1个神经元 #----------------------------------------------- #----------------------------------------------- from keras.optimizers import Adam from keras.losses import mae model.compile(optimizer=Adam(0.01),loss='mae') #----------------------------------------------- #----------------------------------------------- # 动态调整学习率与提前终止函数 def scheduler(epoch): # 每隔10个epoch,学习率减小为原来的1/10 if epoch % 10 == 0 and epoch != 0: lr = K.get_value(model.optimizer.lr) if lr>1e-5: K.set_value(model.optimizer.lr, lr * 0.1) print("lr changed to {}".format(lr * 0.1)) return K.get_value(model.optimizer.lr) reduce_lr = LearningRateScheduler(scheduler)
五,模型训练
model.fit(x=seq_test_x_1[:400],y=seq_test_y[:400],batch_size=2,epochs=40,verbose=2,callbacks=[reduce_lr]) #这里的400依据数据长度进行修改,比如500个长度,前400个拿来训练,后100个拿来测试,lstm一般不需要validate验证,
六,预测与评估
import matplotlib.pyplot as plt yre=yre.reshape(yre.shape[0]) plt.figure(dpi=300,figsize=(20,1)) plt.plot(yre,'b-',seq_test_y[400:],'r-') #这里的400依据数据长度进行修改,比如500个长度,前400个拿来训练,后100个拿来测试,lstm一般不需要validate验证,如果需要预测500之后的,利用450-500的数据生成滑动窗口,生成500之后的数据,再利用生成的数据生成新的滑动窗口进行预测
一些其他结论,比如r2_score可以添加。
- from sklearn.metrics import r2_score
- print(r2_score(seq_test_y[400:],yre))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。