LTSM 實現(xiàn)多元素時序數(shù)據(jù)植物健康預(yù)測
引言:
近些年來,“預(yù)測”一詞在各個領(lǐng)域被頻繁提及,所謂預(yù)測,實際上就是根據(jù)歷史規(guī)律,推測未來結(jié)果。在科學(xué)技術(shù)發(fā)展有限的過去,預(yù)測主要是利用經(jīng)驗去推測未來,隨著社會的發(fā)展,對預(yù)測的客觀性和準(zhǔn)確性提出了更高的要求,簡單的經(jīng)驗推理已無法滿足社會的需求。近幾十年來,隨著人工智能技術(shù)的發(fā)展,出現(xiàn)了新型的預(yù)測方法,人工神經(jīng)網(wǎng)絡(luò)預(yù)測技術(shù)正是其中佼佼者。人工神經(jīng)網(wǎng)絡(luò)預(yù)測技術(shù)一經(jīng)面世就展現(xiàn)了它相比傳統(tǒng)預(yù)測方法的優(yōu)勢:精度高、速度快,隨著人工神經(jīng)網(wǎng)絡(luò)預(yù)測技術(shù)研究的深入,逐漸發(fā)展出性能更優(yōu)的復(fù)雜網(wǎng)絡(luò),如 BP、CP 和 ART 網(wǎng)絡(luò)等。
目前最常用的是 BP 神經(jīng)網(wǎng)絡(luò),由于它結(jié)構(gòu)簡單、易于使用,被廣泛應(yīng)用于天氣預(yù)報、證券投資市場等領(lǐng)域。但是由于 BP 神經(jīng)網(wǎng)絡(luò)不能很好的解決時間序列問題,為此發(fā)展出了循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN),但是經(jīng)過使用發(fā)現(xiàn) RNN 容易出現(xiàn)“梯度消失”和“梯度爆炸”問題,為了解決這類問題,基于人腦的遺忘機(jī)制,Sepp Hochreiter 提出了 LSTM 神經(jīng)網(wǎng)絡(luò)。
LSTM 繼承了大部分 RNN 的優(yōu)點,同時解決了“梯度消失”和“梯度爆炸”問題,它更真實地表征或模擬了人類行為、邏輯發(fā)展和神經(jīng)組織的認(rèn)知過程。LSTM 非常適合處理與時間序列高度相關(guān)的問題,在長周期時間依賴問題上的潛力無窮。得益于 LSTM 的各類優(yōu)點,應(yīng)用 LSTM 模型對具有時序性的事物進(jìn)行預(yù)測具有實際意義。
故今天我們將使用keras搭建LSTM實現(xiàn)多元參數(shù)進(jìn)行時序數(shù)據(jù)的預(yù)測,應(yīng)用于農(nóng)業(yè)健康狀況預(yù)測,模型200輪擬合效果如下:
01 LSTM 算法介紹
長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)是在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的基礎(chǔ)上添加各種“門”控制,實現(xiàn)對數(shù)據(jù)的記憶功能,以此來解決長時間依賴問題。LSTM 也被稱作特殊的 RNN,現(xiàn)在被廣泛的使用在文本生成、語音識別、時間序列預(yù)測等方面。2014 年以來,LSTM 已經(jīng)成為非常熱點的研究模型,得到大量的關(guān)注和研究。國內(nèi)外學(xué)者利用 LSTM 模型進(jìn)行預(yù)測應(yīng)用研究已經(jīng)取得了一系列的成果,Alahi等人提出了一種可以學(xué)習(xí)人類運動并預(yù)測未來軌跡的 LSTM 模型,將此模型應(yīng)用于公共數(shù)據(jù)集上,預(yù)測結(jié)果優(yōu)于當(dāng)時最先進(jìn)的方法;Ma等人首次將 LSTM 模型運用于交通預(yù)測中,為了驗證 LSTM 神經(jīng)網(wǎng)絡(luò)的有效性,基于北京市兩個微波探測器采集的數(shù)據(jù)進(jìn)行試驗,通過與傳統(tǒng)的 RNN 模型比較,發(fā)現(xiàn) LSTM 神經(jīng)網(wǎng)絡(luò)在預(yù)測精度和穩(wěn)定性方面都達(dá)到了最好的效果;Zhang等人基于 LSTM 提出了一種改進(jìn)的時間特征提取算法,簡稱 Read-first LSTM 或RLSTM,作者將該模型應(yīng)用于空氣污染物預(yù)測上,實驗表明該模型預(yù)測效果良好;陳卓等人提出一種基于 LSTM 的電力負(fù)荷預(yù)測方法,使用這該方法對某地電力負(fù)荷值進(jìn)行預(yù)測,將預(yù)測結(jié)果與傳統(tǒng)模型對比,最終證明 LSTM 模型的誤差更低,預(yù)測效果更好;王旭東等人針對短期家庭電力數(shù)據(jù)隨機(jī)性強(qiáng),數(shù)據(jù)維度低等問題,提出了一種基于 LSTM 的單變量短期家庭電力需求預(yù)測模型,實驗表明該模型能夠準(zhǔn)確地預(yù)測家庭電力需求趨勢,且優(yōu)于傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)。
1.1 LSTM原理
LSTM 可以根據(jù)時間序列對輸入的信息進(jìn)行分析。換句話說,我們利用前饋神經(jīng)網(wǎng)絡(luò)時,它會認(rèn)為當(dāng)前時刻輸入的信息與下一時刻輸入的內(nèi)容沒有關(guān)系;在利用RNN 神經(jīng)網(wǎng)絡(luò)時,因為 RNN 存在著梯度消失、梯度爆炸和無法有效處理長周期數(shù)據(jù)依賴問題的特點,所以前輩們提出新的算法—LSTM 算法。使用 LSTM 可以有目的地傳遞和表達(dá)長時間序列中的內(nèi)容并且避免引起歷史信息的丟失。
與 RNN 比較,LSTM 多了三個門,它利用三個門對保留的信息進(jìn)行控制,確保保留的信息是算法需要的,對于垃圾信息則拒之門外。這三個門分別是輸入門、遺忘門、輸出門。三個門作用不同,相互合作,達(dá)到最佳效果。
02 植物健康狀況預(yù)測
農(nóng)業(yè)是我國國民經(jīng)濟(jì)的重要支柱,傳統(tǒng)的農(nóng)業(yè)由于降雨和氣候等因素的制約,會對其產(chǎn)量和品質(zhì)造成一定的影響,減少了農(nóng)業(yè)產(chǎn)業(yè)的經(jīng)濟(jì)利益。為實現(xiàn)經(jīng)濟(jì)利益最大化,提高農(nóng)作物產(chǎn)量,發(fā)展智能化農(nóng)業(yè)等問題,需從本質(zhì)上解決,即對作物的生理信息的傳輸進(jìn)行研究。而作為智能農(nóng)業(yè)的未來發(fā)展,其必然需要數(shù)據(jù)預(yù)測的部分,故本項目將針對農(nóng)業(yè)農(nóng)作物影響參數(shù)溫度、濕度等因素的歷史數(shù)據(jù)進(jìn)行未來狀況的預(yù)測。
這里程序的設(shè)計分為以下幾個步驟,分別為數(shù)據(jù)集預(yù)處理、LSTM模型訓(xùn)練和模型測試。
2.1 農(nóng)作物歷史數(shù)據(jù)預(yù)處理
這里我們將系統(tǒng)記錄的農(nóng)作物歷史影響因素的數(shù)值轉(zhuǎn)為csv文件,并將其轉(zhuǎn)為英文,防止中文亂碼的發(fā)生。
通過read_csv函數(shù)讀取csv文件后,獲取其中每列數(shù)據(jù)作為每個元素。然后對讀取的數(shù)據(jù)進(jìn)行MinmaxScaler標(biāo)準(zhǔn)化,目的是為了加速模型的收斂,同時還有可能提高模型精度。然后把數(shù)據(jù)轉(zhuǎn)為監(jiān)督學(xué)習(xí)數(shù)據(jù)。代碼如下:
dataset = read_csv('sate.csv', header=0, index_col=0) values = dataset.values encoder = LabelEncoder() values = values.astype('float32') scaler = MinMaxScaler(feature_range=(0, 1)) scaled = scaler.fit_transform(values) reframed = series_to_supervised(scaled, 1, 1) print(scaled.shape) values = reframed.values n_train_hours = 365 * 24 train = values[:n_train_hours, :] test = values[n_train_hours:, :] train_X, train_y = train[:, :-1], train[:, -1] test_X, test_y = test[:, :-1], test[:, -1] train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1])) test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1])) def series_to_supervised(data, n_in=1, n_out=1, dropnan=True): n_vars = 1 if type(data) is list else data.shape[1] df = DataFrame(data) cols, names = list(), list() for i in range(n_in, 0, -1): cols.append(df.shift(i)) names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)] for i in range(0, n_out): cols.append(df.shift(-i)) if i == 0: 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) agg.columns = names if dropnan: agg=agg.fillna(0) return agg
2.2 LSTM模型訓(xùn)練
這里設(shè)置LSTM層神經(jīng)元50,設(shè)置損失為MAE平均絕對誤差,優(yōu)化器為adam優(yōu)化器,迭代次數(shù)為200輪,batch_size為72,隨機(jī)打亂數(shù)據(jù)進(jìn)行訓(xùn)練,并最后進(jìn)行模型的保存,并將其損失圖繪制。代碼如下:
model = Sequential() model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2]))) model.add(Dense(1)) model.compile(los='mae', optimizer='adam') history = model.fit(train_X, train_y, epochs=200, batch_size=72, validation_data=(train_X, train_y), verbose=2, shuffle=False) pyplot.plot(history.history['loss'], label='train') pyplot.plot(history.history['val_loss'], label='test') pyplot.legend() pyplot.show()
model.save("model.h5")
2.3 模型測試
從設(shè)置的農(nóng)業(yè)系統(tǒng)中獲取環(huán)境參數(shù)后,將參數(shù)輸入模型,即可實現(xiàn)預(yù)測。代碼如下:
while True: elements=['health','temperature','humidity','light_intensity','soil_temperature','soil_humidity','co2','rain'] i=0 if i%1==0: input_list=spider() input_data = DataFrame([input_list], columns=elements) dataset=dataset.append(input_data) values = dataset.values encoder = LabelEncoder() values = values.astype('float32') scaler = MinMaxScaler(feature_range=(0, 1)) scaled = scaler.fit_transform(values) reframed = series_to_supervised(scaled, 1, 1) values = reframed.values test_X= values[:, :-1] test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1])) y_predict = model.predict(np.array([test_X[-1]])) print(input_data.values[0][1:]) print("預(yù)測污染程度為:"+str(y_predict[0][0]))
完整代碼:
鏈接:
https://pan.baidu.com/s/1tpT0_K-csVX8fRYd-PPJCg
提取碼:1rb8
李秋鍵,CSDN博客專家,CSDN達(dá)人課作者。碩士在讀于中國礦業(yè)大學(xué),開發(fā)有taptap競賽獲獎等。
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。
汽車防盜機(jī)相關(guān)文章:汽車防盜機(jī)原理