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