Python時間序列LSTM預測系列教程(8)-多變量

多變量LSTM預測模型(2)


教程原文鏈接

前置教程:

Python時間序列LSTM預測系列教程(7)-多變量


LSTM數據預處理


1、轉換成有監督數據
用歷史的污染數據、天氣數據預測當前時刻的污染值
2、數據歸一化

# coding=utf-8                                                                                                                    
from pandas import read_csv
from pandas import DataFrame
from sklearn.preprocessing import MinMaxScaler
from pandas import concat
from sklearn.preprocessing import LabelEncoder
 
#轉換成有監督數據
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):#n_in,n_out相當於lag
    n_vars = 1 if type(data) is list else data.shape[1]#變量個數
    df = DataFrame(data)
    print '帶轉換數據'
    print df.head()
    cols, names = list(), list()
    #輸入序列(t-n. ... , t-1)
    for i in range(n_in, 0, -1):
        cols.append(df.shift(i))
        print 'shift數據'
        print cols[0][0:5]
        names+=[('var%d(t-%d)'%(j+1,i)) for j in range(n_vars)]
        print 'names數據'         
        print names[0:5]          
    #預測序列(t, t+1, ... , t+n)  
    for i in range(0, n_out):     
        cols.append(df.shift(-i)) 
        if i==0:#t時刻
            names+=[('var%d(t)'%(j+1)) for j in range(n_vars)]
        else: 
            names+=[('var%d(t+%d)'%(j+1,i)) for j in range(n_vars)]
    #拼接 
    agg = concat(cols, axis=1)    
    print '拼接'
    print agg[0:5]
    agg.columns = names;          
    #將空值NaN行刪除
    if dropnan: 
        agg.dropna(inplace=True)  
    return agg
      
dataset =  read_csv('data_set/air_pollution_new.csv', header=0, index_col=0)
values = dataset.values           
print '原始數據'
print values[0:5] 
      
#由於4列的風向是標籤,編碼成整數
encoder = LabelEncoder()#簡單來說 LabelEncoder 是對不連續的數字或者文本進行編號
values[:,4] = encoder.fit_transform(values[:,4])
print '標籤編碼'
print values[0:5]
#使所有數據是float類型
values = values.astype('float32')
#數據歸一化
scaler = MinMaxScaler(feature_range=(0,1))
scaled = scaler.fit_transform(values)
print '縮放'
print scaled[0:5]
#變成有監督
reframed = series_to_supervised(scaled, 1, 1)
print '有監督'
print reframed[0:5]
#刪除不預測的列
reframed.drop(reframed.columns[9:16], axis=1, inplace=True)
print '刪除不預測的列'
print(reframed.head())


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章