這里記錄LSTM用在時(shí)間序列數(shù)據(jù)的t+1預(yù)測(cè)時(shí)的數(shù)據(jù)預(yù)處理。
- 數(shù)據(jù)預(yù)處理
1.1 Scaler
因?yàn)長(zhǎng)STM對(duì)數(shù)據(jù)值敏感耸别,在分析數(shù)據(jù)之前捐晶,我們可以對(duì)數(shù)據(jù)做一個(gè)scaling.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
data = scaler.fit_transform(data)
Note: 記得在查看結(jié)果的時(shí)候轉(zhuǎn)換回去伸刃。
y_predict = scaler.inverse_transform(y_predict)
1.2 Train Test Split
這類問題在分離train, test dataset的時(shí)候需要注意保持原有數(shù)列順序拢军。train用到0到分割點(diǎn),test則是從分割點(diǎn)到數(shù)據(jù)結(jié)尾送巡。
train, test = dataset[0:trainsize, :], dataset[trainsize:len(dataset), :]
1.4 Re-arrange input data
一般原始數(shù)據(jù)的一個(gè)特征可能是一個(gè)1D array摹菠,一列不同時(shí)刻的數(shù)值 (column: value_at_time_t)。要使用LSTM做回歸骗爆,我們需要把數(shù)據(jù)轉(zhuǎn)化為column: (t-1), (t-2), (...), value_at_time_t(Y)
1.5 Reshape input data
keras LSTM模型對(duì)數(shù)據(jù)形式有一定要求次氨,通常為3D tensor. 因此,如我我們從csv讀入一組原始數(shù)據(jù)摘投,需要用numpy.reshape對(duì)原始數(shù)據(jù)reshape煮寡,以便keras LSTM讀入虹蓄。