当前位置: 首页 > 编程日记 > 正文

LTSM 实现多元素时序数据植物健康预测

作者 | 李秋键

出品 | AI科技大本营(ID:rgznai100)

引言:

近些年来,“预测”一词在各个领域被频繁提及,所谓预测,实际上就是根据历史规律,推测未来结果。在科学技术发展有限的过去,预测主要是利用经验去推测未来,随着社会的发展,对预测的客观性和准确性提出了更高的要求,简单的经验推理已无法满足社会的需求。近几十年来,随着人工智能技术的发展,出现了新型的预测方法,人工神经网络预测技术正是其中佼佼者。人工神经网络预测技术一经面世就展现了它相比传统预测方法的优势:精度高、速度快,随着人工神经网络预测技术研究的深入,逐渐发展出性能更优的复杂网络,如 BP、CP 和 ART 网络等。

目前最常用的是 BP 神经网络,由于它结构简单、易于使用,被广泛应用于天气预报、证券投资市场等领域。但是由于 BP 神经网络不能很好的解决时间序列问题,为此发展出了循环神经网络(RNN),但是经过使用发现 RNN 容易出现“梯度消失”和“梯度爆炸”问题,为了解决这类问题,基于人脑的遗忘机制,Sepp Hochreiter 提出了 LSTM 神经网络。

LSTM 继承了大部分 RNN 的优点,同时解决了“梯度消失”和“梯度爆炸”问题,它更真实地表征或模拟了人类行为、逻辑发展和神经组织的认知过程。LSTM 非常适合处理与时间序列高度相关的问题,在长周期时间依赖问题上的潜力无穷。得益于 LSTM 的各类优点,应用 LSTM 模型对具有时序性的事物进行预测具有实际意义。

故今天我们将使用keras搭建LSTM实现多元参数进行时序数据的预测,应用于农业健康状况预测,模型200轮拟合效果如下:

图片

01、LSTM 算法介绍

长短期记忆(LSTM)神经网络是在循环神经网络(RNN)的基础上添加各种“门”控制,实现对数据的记忆功能,以此来解决长时间依赖问题。LSTM 也被称作特殊的 RNN,现在被广泛的使用在文本生成、语音识别、时间序列预测等方面。2014 年以来,LSTM 已经成为非常热点的研究模型,得到大量的关注和研究。国内外学者利用 LSTM 模型进行预测应用研究已经取得了一系列的成果,Alahi等人提出了一种可以学习人类运动并预测未来轨迹的 LSTM 模型,将此模型应用于公共数据集上,预测结果优于当时最先进的方法;Ma等人首次将 LSTM 模型运用于交通预测中,为了验证 LSTM 神经网络的有效性,基于北京市两个微波探测器采集的数据进行试验,通过与传统的 RNN 模型比较,发现 LSTM 神经网络在预测精度和稳定性方面都达到了最好的效果;Zhang等人基于 LSTM 提出了一种改进的时间特征提取算法,简称 Read-first LSTM 或RLSTM,作者将该模型应用于空气污染物预测上,实验表明该模型预测效果良好;陈卓等人提出一种基于 LSTM 的电力负荷预测方法,使用这该方法对某地电力负荷值进行预测,将预测结果与传统模型对比,最终证明 LSTM 模型的误差更低,预测效果更好;王旭东等人针对短期家庭电力数据随机性强,数据维度低等问题,提出了一种基于 LSTM 的单变量短期家庭电力需求预测模型,实验表明该模型能够准确地预测家庭电力需求趋势,且优于传统的循环神经网络。

1.1 LSTM原理

LSTM 可以根据时间序列对输入的信息进行分析。换句话说,我们利用前馈神经网络时,它会认为当前时刻输入的信息与下一时刻输入的内容没有关系;在利用RNN 神经网络时,因为 RNN 存在着梯度消失、梯度爆炸和无法有效处理长周期数据依赖问题的特点,所以前辈们提出新的算法—LSTM 算法。使用 LSTM 可以有目的地传递和表达长时间序列中的内容并且避免引起历史信息的丢失。

与 RNN 比较,LSTM 多了三个门,它利用三个门对保留的信息进行控制,确保保留的信息是算法需要的,对于垃圾信息则拒之门外。这三个门分别是输入门、遗忘门、输出门。三个门作用不同,相互合作,达到最佳效果。

图片

02、植物健康状况预测

农业是我国国民经济的重要支柱,传统的农业由于降雨和气候等因素的制约,会对其产量和品质造成一定的影响,减少了农业产业的经济利益。为实现经济利益最大化,提高农作物产量,发展智能化农业等问题,需从本质上解决,即对作物的生理信息的传输进行研究。而作为智能农业的未来发展,其必然需要数据预测的部分,故本项目将针对农业农作物影响参数温度、湿度等因素的历史数据进行未来状况的预测。

这里程序的设计分为以下几个步骤,分别为数据集预处理、LSTM模型训练和模型测试。

2.1 农作物历史数据预处理

这里我们将系统记录的农作物历史影响因素的数值转为csv文件,并将其转为英文,防止中文乱码的发生。

图片

通过read_csv函数读取csv文件后,获取其中每列数据作为每个元素。然后对读取的数据进行MinmaxScaler标准化,目的是为了加速模型的收敛,同时还有可能提高模型精度。然后把数据转为监督学习数据。代码如下:

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 = namesif dropnan:agg=agg.fillna(0)return agg

图片

2.2 LSTM模型训练

这里设置LSTM层神经元50,设置损失为MAE平均绝对误差,优化器为adam优化器,迭代次数为200轮,batch_size为72,随机打乱数据进行训练,并最后进行模型的保存,并将其损失图绘制。代码如下:

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 模型测试

从设置的农业系统中获取环境参数后,将参数输入模型,即可实现预测。代码如下:

while True:elements=['health','temperature','humidity','light_intensity','soil_temperature','soil_humidity','co2','rain']i=0if i%1==0:input_list=spider()input_data = DataFrame([input_list], columns=elements)dataset=dataset.append(input_data)values = dataset.valuesencoder = 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.valuestest_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博客专家,CSDN达人课作者。硕士在读于中国矿业大学,开发有taptap竞赛获奖等。

相关文章:

如何扩大以太坊的规模:分片简介(How to Scale Ethereum: Sharding Explained)

2019独角兽企业重金招聘Python工程师标准>>> 分片是提高区块链效率的一个主要流派。下面简单通俗的解释一下分片算法。 以太猫(Cryptokitties)堵塞了以太坊网络好几天,以太坊--世界上最大的,公开的区块链目前是无法扩容的,也众所周…

Xdebug的安装-(无错可执行版)

xdebug是一个开源的php调试器,以php模块的形式加载并被使用。可以用来跟踪,调试和分析PHP程序的运行状况. 这里以PHP5.2.13为例, 1.下载php_xdebug-2.1.0-5.2.dll文件, http://www.xdebug.org/download.php 选择:PHP 5.2 VC6 TS (32 bit) 选择…

云游戏、VR、AI,云计算给元宇宙提供了哪些想象力?

2021 最火的新概念,莫过于元宇宙。2021 年 10 月 29 日,Facebook 宣布改名 Meta;2021 年 11 月 1 日,“元宇宙第一股” Roblox 经过短暂调整,宣布重新上线。接下来关于元宇宙的线下 / 线上讨论如火如荼,…

sys.check_constraints

每个用作 CHECK 约束(sys.objects.type C)的对象都在表中占一行。 SELECT name FROM sys.check_constraints-- equal to SELECT o.name FROM sys.sysobjects oJOIN sys.sysconstraints s ON o.parent_obj s.id WHERE o.xtype C GROUP BY o.…

什么是Bootstrap Aggregating

简介 Bootstrap Aggregating也叫作bagging,是一种机器学习领域用来做模型合并的一种算法。这种算法可以提高统计分类器和回归器的稳定性和准确度。同时也可以帮助模型避免过拟合。历史Bootstrap Aggregating最早在1994年由Leo Breiman提出,当时用来通过随…

柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)...

二、Work Queues(using the Java Client) 走起 在第上一个教程中我们写程序从一个命名队列发送和接收消息。在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工作者(worker)之间。 背后的主要思想工作队列(又名:任务队列)是为了避…

图像分析用 OpenCV 与 Skimage,哪一个更好?

作者 | 小白来源 | 小白学视觉这两种算法在它们可以检测到的和不能检测到的方面都有其起伏。OpenCV 是用 C 在后端进行编程的,并作为一个机器学习包,来分析 Python 中的图像模式。Skimage 也称为 Scikit-Image ,是一个机器学习软件包&#xf…

NetBeans配置Xdebug

这篇文章已经更新,看 Windows环境配置xdebug调试PHP Windows环境 或者 NetBeans配置Xdebug 远程调试PHP Linux环境nebeans配置xdebug可以方便我们逐步的查看程序的运行情况对我们调试程序是非常有利的下面我就来介绍下配置的过程。先要安装xdebug,可以参…

[译] Don’t call me, I’ll call you:使用 Redux-Saga 管理 React 应用中的异步 action (上)...

原文地址:Don’t call me, I’ll call you: Side effects management with Redux-Saga (Part 1)原文作者:David Dvora译文出自:掘金翻译计划本文永久链接:github.com/xitu/gold-m…译者:jonjia校对者:smile…

CentOS下安装NetBeans集成开发环境

下载NetBeans以netbeans-7.0beta2-ml-javaee-linux.sh为例#sh netbeans-7.0beta2-ml-javaee-linux.sh之后进入安装界面(接下来和windows下几乎一样不在举例) 前提是要安装了Java 主要不要在本地远程用SecureCRT输入命令啊,要在Linux下用终端输…

我的Android进阶之旅------Android嵌入图像InsetDrawable的用法

面试题:为一个充满整个屏幕的LinearLayout布局指定背景图,是否可以让背景图不充满屏幕?请用代码描述实现过程。 解决此题,可以使用嵌入(Inset)图像资源来指定图像,然后像使用普通图像资源一样使用嵌入图像资源。 语法如…

沉痛悼念游戏开发大神毛星云

惟愿所有的“爆料”都是造谣,惟愿我们能够一起去创造并让大家都能玩到蕴藏着中国上下五千年本土文化的优质游戏大作,惟愿我们能等到你的好消息......让人难过的是,据银柿财经报道,针对近日“网传腾讯天美员工离世”的消息&#xf…

April Fools Contest 2018

这个比赛不正经,但是我可以一本正经的写代码啊 A. Quirky Quantifierstime limit per test2 secondsmemory limit per test64 megabytesinputstandard inputoutputstandard outputInputThe input contains a single integer a (10 ≤ a ≤ 999). OutputOutput 0…

如何查找僵尸进程并Kill之,杀不掉的要查看父进程并杀之

用ps和grep命令寻找僵尸进程#ps -A -ostat,ppid,pid,cmd | grep -e ^[Zz]命令注解:-A 参数列出所有进程-o 自定义输出字段 我们设定显示字段为 stat(状态), ppid(进程父id), pid(进程id),cmd(命…

PHP计划任务:如何使用Linux的Crontab执行PHP脚本(转)

我们的PHP程序有时候需要定时执行,我们可以使用ignore_user_abort函数或是在页面放置js让用户帮我们实现。但这两种方法都不太可靠,不稳定。我们可以借助Linux的Crontab工具来稳定可靠地触发PHP执行任务。下面介绍Crontab的两种方法。一、在Crontab中使用…

OpenAI 开放 GPT-3 微调功能,让开发者笑开了花

出品 | AI科技大本营(ID:rgznai100) 近日,OpenAI宣布,允许用户创建自定义版的 GPT-3。 OpenAI 表示,开发人员可以使用微调来创建针对其应用程序和服务中的特定内容量身定制的 GPT-3 模型,从而在任务和工作…

PHP----------php封装的一些简单实用的方法汇总

1、xml转换成array,格式不对的xml则返回false function xml_parser($str){ $xml_parser xml_parser_create(); if(!xml_parse($xml_parser,$str,true)){ xml_parser_free($xml_parser); return false; } else { …

PHP函数--var_dump

var_dump(PHP 3 > 3.0.5, PHP 4, PHP 5)var_dump -- 打印变量的相关信息描述void var_dump ( mixed expression [, mixed expression [, ...]] )此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构…

Mozilla公布WebVR API标准草案

随着信息技术的迅速发展,虚拟现实(Virtual Reality,VR)技术在近些年不断完善,其应用范围也变得十分广泛。为了搭建逼真的虚拟场景,VR技术一般都需要用到大量精美的图像和复杂的动作。因此,大部分…

不到 100 行 Python 代码教你做出精美炫酷的可视化大屏

作者 |俊欣来源 |关于数据分析与可视化“碳达峰、碳中和”是2021年政府在不断强调与非常重视的事儿,那什么是“碳达峰”、什么又是“碳中和”呢?这里小编来为大家科普一下,所谓的“碳达峰”指的是在某一时间点,二氧化碳的排放不再…

JavaScript实现冒泡排序

说明 对数组进行 冒泡排序 算是比较简单的,冒泡排序也是容易理解的一种排序算法了,在面试的时候,很可能就会问到。 实现原理 数组中有 n 个数,比较每相邻两个数,如果前者大于后者,就把两个数交换位置&#…

PHP--isset()和unset()函数的用法

isset(PHP 3, PHP 4, PHP 5 )isset -- 检测变量是否设置描述bool isset ( mixed var [, mixed var [, ...]])如果 var 存在则返回 TRUE,否则返回 FALSE。 如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成…

有关任意多条曲线的拟合度算法

为什么80%的码农都做不了架构师?>>> 在股市中,经常会遇到趋势的预判。所谓趋势,即相对而言的规律化的模式识别形态。形象来讲,就是个股的一段时间内的曲线分布状况。 那么,问题来了。 我们虽然可以在少量的…

从深度学习到深度森林方法(Python)

作者 |泳鱼来源 |算法进阶一、深度森林的介绍 目前深度神经网络(DNN)做得好的几乎都是涉及图像视频(CV)、自然语言处理(NLP)等的任务,都是典型的数值建模任务(在表格数据tabular dat…

LHC大神问的矩阵转置问题

数学中线性代数中提到的矩阵转置&#xff0c;其实在我们的业务场景中也有需要的地方&#xff0c;比如LHC大神问到的这个问题 那么如何进行行列转换呢&#xff1f; 代码如下&#xff1a; <?php$arrayarray(部门1>array(费用1>100,费用2>200,费用3>300),部门2>…

不同机器互相调用WebService或者HTTP一定要telnet 测试

ping的通不一定就telnet的通 一定要#telnet 目标机器IP 目标机器端口如果一直是 Trying 目标IP那么不通如果是 Trying 目标IP Connection to 目标IP 说明通的

亮相百度WAVE SUMMIT+2021,Intel OpenVINO带来新气象

北京时间12月12日&#xff0c;百度WAVE SUMMIT2021深度学习开发者峰会在上海举办。这场属于AI的科技盛会之上&#xff0c;英特尔OpenVINO联手百度PaddlePaddle为开发者带来了一系列的技术内容&#xff0c;为开源生态构建持续合作&#xff0c;为产业进步提供新的动力。 OpenVIN…

精品德国软件 UltraShredder 文件粉碎机

出自德国的文件粉碎机&#xff0c;整合了回收站的相关操作&#xff0c;特点是兼容性好&#xff0c;支持9X以上的Win全系列&#xff08;不包括64位系统哦&#xff09;。该软件绿色免费&#xff0c;建议收藏于U盘^_^ 它和偶之前汉化的加密软件Omziff一样&#xff0c;来自XTort&am…

JavaEE 银联支付之手机控件支付-消费类交易

0. workflow app端request->后台封装参数->后台进行签名->请求银联平台->解析响应->响应需求信息 复制代码1. acp_sdk.properties ##############SDK配置文件&#xff08;证书方式签名&#xff09;################ # 说明&#xff1a; # 1. 使用时请删除后缀的…

php singleton()

common.php <?phpclass CC{private static $ins;public static function singleton(){if (!isset(self::$ins)){$c __CLASS__;self::$ins new $c;}return self::$ins;}public function EventResult($Id){return $Id;}}?>index.php <html><head><title…