基于LSTM的新冠肺炎疫情群体态势预测方法与流程

文档序号:22579827发布日期:2020-10-20 16:57阅读:1250来源:国知局
基于LSTM的新冠肺炎疫情群体态势预测方法与流程

本发明属于深度学习技术领域,涉及基于lstm的新冠肺炎疫情群体态势预测方法。



背景技术:

随着深度学习技术的不断发展,许多领域逐渐将目光转向深度学习。在处理非线性数据和多维数据上,深度学习展现出了优异的性能。循环神经网络(recurrentneuralnetwork,rnn)是神经网络的一种,循环神经网络适合于解决序列问题。传统的神经网络不同层之间是全连接的,而同一层内的神经元相互之间并无连接。而在序列处理的过程中,前一阶段的输出会对下一阶段的输出产生影响。而循环神经网络不仅仅能接受上一层的输入,并且能够接受上一时刻本层神经元的信息。因此循环神经网络可以有效解决之前神经网络解决序列问题时的缺陷,但也存在着当神经网络过深或者时序数过多时的“梯度爆炸”或者“梯度消失”的问题。

而长短期记忆(long-shorttermmemory,lstm)网络成功的克服了循环神经网络存在的“梯度爆炸”或“梯度消失”的问题,成为当前使用最多的rnn,它在语音和图片识别、自然语言处理、情感识别等多种领域中得到了广泛的应用。lstm网络内除了包含短期输入信号状态h外还增加了一个单元状态c,用以存储长期的状态,网络内部使用两个门来控制单元状态c,其中一个是遗忘门,遗忘门的作用是确定保存多少之前时刻的ct-1到当前时刻的单元状态ct中,另一个是输入门,输入门的作用是确定保存多少当前时刻的输入xt到单元状态ct中。还有一个门是输出门,它的作用是确定把多少单元状态ct输出到lstm的当前输出值ht中。lstm网络内部结构如图1。

lstm网络是通过神经元的传递来前向传播和计算信息,并且通过门机制来控制输入输出信息。遗忘门的计算表达式为:

ft=σ(wf×[ht-1,xt]+bf)(1)

式中,ft表示遗忘门输出,σ是sigmoid函数,wf表示遗忘门的权重矩阵,ht-1表示前一刻的输出值,xt为当前时刻的输入值,bf是遗忘门的偏置项,符号×表示矩阵的叉乘。输入门的计算表达式为:

it=σ(wi×[ht-1,xt]+bi)(2)

式中,it是输入门输出,wi是权重矩阵,bi是该门的偏置项。描述当前输入的单元状态c~t根据之前时刻的输出和当前输入来计算,计算表达式为:

式中,wc表示单元状态的权重,bc为偏置项。下面是当前时刻的单元状态ct的计算。将ct-1

点乘ft,再用点乘it,将两个的积求和即可得到单元状态ct,其计算表达式为:

式中,符号*表示矩阵的点乘。通过上式将lstm关于当前一刻的记忆和长期的记忆ct-1组合在了一起,变成了新的单元状态ct。因为遗忘门的存在,使得lstm单元可以保存很久以前的信息,而又因为输入门的存在,lstm单元又能避免将当前时刻无关紧要的内容记忆下来。把控长期记忆对当前时刻输出影响的门是输出门ot,公式为:

ot=σ(wo×[ht-1,xt]+bo)(5)

式中,wo表示输出门权重,bo表示偏置项。lstm单元的最终输出由输出门ot和单元状态ct共同确定,其计算表达式为:

ht=ot*tanh(ct)(6)

式中,tanh为双曲正切函数。

传统的统计学习方法(如mcmc),采用概率统计的方式对提出的问题进行建模,公式推导和计算,而且预测的准确度往往取决于建模的好坏,所以无法确保其准确度。相比之下lstm网络是数据驱动的算法,从数据中获得有效信息来预测,并且lstm网络采用输入门、遗忘门和输出门的机制对输入输出数据进行控制,从而可以保留更长时间的信息及其影响,这为时间序列预测问题提供了更为准确的数据来源。这样使之前时刻对预测数据的影响考虑在内,从而大大提高了预测的准确度。



技术实现要素:

有鉴于此,本发明的目的在于提供一种基于lstm的新冠肺炎疫情群体态势预测方法,采用python爬虫技术,利用python中的requests库和urllib库对百度新冠肺炎疫情大数据平台网页展示的全国、各省(自治区、直辖市)和城市每天的新冠肺炎疫情数据进行爬取,生成csv格式的文件保存在本地主机。

为达到上述目的,本发明提供如下技术方案:

基于lstm的新冠肺炎疫情群体态势预测方法,该方法包括以下步骤:

s1:新冠肺炎疫情数据获取;

s2:全国新冠肺炎疫情群体态势预测;

s3:省、自治区和直辖市新冠肺炎疫情预测;

s4:城市新冠肺炎疫情群体态势预测。

可选的,所述s1具体为:

s11:从百度新冠肺炎疫情大数据平台获取源代码;

s12:利用python集成开发环境pycharm,利用python爬虫库requests、urllib以及json模块、lxml模块中的etree函数,通过编程语句xpath('//script[@type="application/json"]/text()')获取百度新冠肺炎疫情大数据平台源代码json格式文件,并筛选出中国的新冠肺炎疫情数据;

s13:将全国新冠肺炎疫情数据按新增确诊病例数据、新增境外输入病例、新增无症状感染者病例、新增重症病例、新增死亡病例、新增治愈病例和新增疑似病例数据和时间生成csv格式的文件并保存在本地主机。

可选的,所述s2具体为:

获取全国新冠肺炎疫情数据后,需要构建lstm网络和对数据进行预处理和归一化处理,使输入数据符合lstm网络的输入格式;

s21:将生成的csv格式的新冠肺炎疫情数据按n_lag天的数据构成数组作为输入数据,将之后28天的数据构成数组作为预测标签,形成预测数据集;

s22:将预测数据集按7:3比例划分为训练集和测试集;

s23:由于输入数据波动幅度较大,送入lstm网络中训练效果不好,需要将数据进行归一化处理,将数据x映射x′到[0,1]之间;选取最大值max和最小值min,采用公式(7)进行归一化处理;

s24:构建lstm模型,通过人工神经网络库keras,利用keras中包含的lstm网络模块以及损失函数、层数和dropout模块,将训练集数据输入到lstm网络中进行训练,损失函数选取均方误差函数(mse),优化器选取adam,通过设置迭代次数epoch、批处理大小batch_size以及时间步长n_lag,不断优化lstm网络,并使损失函数降到最低;

s25:将测试集数据送入到训练好的lstm网络中,采用公式(8)均方根误差rmse来评价真实值与预测值之间的偏差,并且根据测试集得出的rmse值继续调整lstm网络训练参数,通过增加迭代次数、修改时间步长n_lag使测试集rmse值降到最低时,便可认定此时训练模型已是最优,然后保存模型参数;

s26:预测;将训练好的网络参数保存,将所要预测的时间的数据和时间步长n_lag的数据生成序列,并调整维度,然后输入到已训练好lstm网络中,得出全国28天后的新冠肺炎疫情群体态势;

s27:重复以上步骤,对全国新增确诊病例数据、新增境外输入病例、新增无症状感染者病例、新增重症病例、新增死亡病例、新增治愈病例和新增疑似病例数据分别进行lstm网络训练参数,得出不同病例的预测模型、参数和预测结果。

可选的,所述s3具体为:

通过python爬虫从百度新冠肺炎疫情大数据平台获取各省、自治区和直辖市新冠肺炎疫情新增确诊病例,新增死亡病例以及新增治愈病例历史数据和实时数据,并将其生成csv格式的文件;预测各省、自治区和直辖市28天后新冠肺炎疫情群体态势;

s31:将生成的csv格式的新冠肺炎疫情数据按n_lag天的数据构成数组作为输入数据,将之后28天的新冠肺炎疫情数据构成数组作为预测标签,形成预测数据集;

s32:将预测数据集按7:3比例划分为训练集和测试集;

s33:由于输入数据波动幅度较大,送入lstm网络中训练效果不好,因此需要将数据进行归一化处理,将数据x映射x′到[0,1]之间;选取最大值max和最小值min,采用公式(7)进行归一化处理;

s34:构建lstm网络,通过人工神经网络库keras,利用keras中包含的lstm网络模块以及损失函数、层数和dropout模块,将训练集数据输入到lstm网络中进行训练,损失函数选取均方误差函数mse,优化器选取adam,通过设置迭代次数epoch、批处理大小batch_size以及时间步长n_lag,不断优化lstm网络,并使损失函数降到最低;

s35:将测试集数据送入到训练好的lstm网络中,采用公式(8)均方根误差rmse来评价真实值与预测值之间的偏差,并且根据测试集得出的rmse值继续调整lstm网络训练参数,通过增加迭代次数、修改时间步长n_lag使测试集rmse值降到最低时,便可认定此时训练模型已是最优,然后保存模型参数;

步骤6:预测;将训练好的模型参数保存,将所要预测的时间的数据和时间步长n_lag的数据生成序列,并调整维度,然后输入到已训练好lstm网络中,得出省、自治区和直辖市28天后的新冠肺炎疫情群体态势;

步骤7:重复以上步骤,对各省、自治区和直辖市新增确诊病例,新增死亡病例以及新增治愈病例分别进行lstm网络训练参数,得出不同病例的预测模型、参数和预测结果。

可选的,所述s4具体为:

通过python爬虫从百度新冠肺炎疫情大数据平台获取各主要城市新冠肺炎疫情新增确诊病例,新增死亡病例以及新增治愈病例历史数据和实时数据,并将其生成csv格式的文件;预测各城市28天后的新冠肺炎疫情群体态势;

s41:将生成的csv格式的文件新冠肺炎疫情数据按n_lag天的数据构成数组作为输入数据,将之后28天的数据构成数组作为预测标签,形成预测数据集;

s42:将预测数据集按7:3比例划分为训练集和测试集;

s43:由于输入数据波动幅度较大,送入lstm网络中训练效果不好,需要将数据进行归一化处理,将数据x映射x′到[0,1]之间;选取最大值max和最小值min,采用公式(7)进行归一化处理;

s44:构建lstm网络,通过人工神经网络库keras,利用keras中包含的lstm网络模块以及损失函数、层数和dropout模块,将训练集数据输入到lstm网络中进行训练,损失函数选取均方误差函数mse,优化器选取adam,通过设置迭代次数epoch、批处理大小batch_size以及时间步长n_lag,不断优化lstm模型,并使损失函数降到最低;

s45:将测试集数据送入到训练好的lstm网络中,采用公式(8)均方根误差rmse来评价真实值与预测值之间的偏差,并且根据测试集得出的rmse值继续调整lstm模型训练参数,通过增加迭代次数、修改时间步长n_lag使测试集rmse值降到最低时,便可认定此时训练模型已是最优,然后保存模型参数;

s46:预测;将训练好的模型参数保存,将所要预测的时间的数据和时间步长n_lag的数据生成序列,并调整维度,然后输入到已训练好lstm模型中,得出各城市28天后的新冠肺炎疫情群体态势;

s47:重复以上步骤,对各省、自治区和直辖市新增确诊病例,新增死亡病例以及新增治愈病例分别进行lstm网络训练参数,得出不同病例的预测模型、参数和预测结果。

本发明的有益效果在于:

1、本发明利用lstm网络对全国、各省(自治区、直辖市)和城市新冠肺炎疫情28天后的数据进行态势预测,利用lstm网络处理时间序列数据的能力和学习能力,挖掘疫情传播的规律,与现有方法相比提高了预测的准确度。

2、现有的百度新冠肺炎疫情平台等新冠肺炎疫情平台无城市对全国影响力的预测和分析,孤立的展示疫情当前状态,信息具有延时性。本发明综合考虑疫情爆发城市对全国其他城市的影响,利用lstm网络预测新冠肺炎疫情群体态势数据,能够为政府部门提供疫情数据,及时预警防范,从而减少疫情带来的各种损失。

本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。

附图说明

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作优选的详细描述,其中:

图1本发明的算法框图;

图2本发明使用的lstm网络内部结构图。

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构想,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。

其中,附图仅用于示例性说明,表示的仅是示意图,而非实物图,不能理解为对本发明的限制;为了更好地说明本发明的实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;对本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。

本发明实施例的附图中相同或相似的标号对应相同或相似的部件;在本发明的描述中,需要理解的是,若有术语“上”、“下”、“左”、“右”、“前”、“后”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此附图中描述位置关系的用语仅用于示例性说明,不能理解为对本发明的限制,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。

本发明利用lstm网络对时间序列处理的能力,对全国、省(自治区、直辖市)和城市的新冠肺炎疫情群体态势预测,结合目前新冠肺炎疫情发展的趋势,通过lstm网络训练学习新冠肺炎疫情的规律,提高新冠肺炎疫情群体态势预测的准确度。以下结合附图和具体实例对本发明的具体实施说明如下。

利用深度学习lstm网络作为预测算法,与之前传统的机器学习算法(svm)和统计学算法(mcmc)相比,克服了其复杂的建模过程,以及缺少先验分布的参数估计方法、灵活度低等缺点;另一方面,lstm网络能够更好的发现疫情传播的规律以及病例人数变化的规律,易于建模,不需要之前新冠病毒的先验知识,具有很强的灵活性特点。并且,lstm网络对于时间序列预测具有很好的性能,有效的简化了传统预测算法中建模困难、参数众多以及推导公式复杂等问题,而且lstm网络应用广泛,采用数据驱动的方法,能够根据历史数据发现其中的变化规律和模式,进行有效、准确的预测。

作为深度学习中较好的处理时间序列预测问题的算法之一,与传统的循环神经网络(reccurentneuralnetwork,rnn)相比,克服了其由于梯度下降导致的“梯度爆炸”和“梯度消失”问题,保证了其训练的稳定,从而保证预测的准确度。

根据之前全国每天的新冠肺炎疫情统计数据,通过lstm网络训练模型,挖掘全国疫情发展的趋势,并根据当前数据和之前数据通过lstm网络可以预测28天后全国新增确诊病例、新增境外输入病例、新增无症状感染者、新增重症患者等数据。

根据之前省(自治区、直辖市)统计的每天的新冠肺炎疫情数据,根据每天新增确诊病例、新增死亡病例和新增治愈病例的数据,分别通过lstm网络进行训练得出其时间维度上的变化规律,根据当前数据和之前数据通过lstm网络预测28天后各省(自治区、直辖市)新增确诊病例、新增死亡病例和新增治愈病例的数据。

根据之前全国各城市统计的每天的新冠肺炎疫情数据,根据每天新增确诊病例、新增死亡病例和新增治愈病例的数据,分别通过lstm网络进行训练得出其时间维度上的变化规律,根据当前数据和之前数据通过lstm网络预测28天后各城市新增确诊病例、新增死亡病例和新增治愈病例的数据。

一、算法框图

如图1所示算法框图,从百度新冠肺炎疫情大数据平台获取新冠肺炎疫情数据,经过数据处理分类成全国、省(自治区、直辖市)和城市数据,将新冠肺炎疫情数据输入到图2所示lstm网络中,训练模型和参数,得出28天后新冠肺炎疫情群体态势数据。

二、基于lstm网络的新冠肺炎疫情群体态势预测

本发明采用python爬虫技术,利用python中的requests库和urllib库对百度新冠肺炎疫情大数据平台展示的全国、各省(自治区、直辖市)和城市每天的新冠肺炎疫情数据进行爬取,生成csv格式的文件保存在本地主机。

(一)新冠肺炎疫情数据获取

步骤1:从百度新冠肺炎疫情大数据平台:https://voice.baidu.com/act/newpneumonia/newpneumonia/获取源代码;

步骤2:利用python集成开发环境pycharm,利用python爬虫库requests、urllib以及json模块、lxml模块中的etree函数,通过编程语句xpath('//script[@type="application/json"]/text()')获取百度新冠肺炎疫情大数据平台源代码json格式文件,并筛选出中国的新冠肺炎疫情数据;

步骤3:将全国新冠肺炎疫情数据按新增确诊病例数据、新增境外输入病例、新增无症状感染者病例、新增重症病例、新增死亡病例、新增治愈病例和新增疑似病例数据和时间生成csv格式的文件并保存在本地主机。

(二)全国新冠肺炎疫情群体态势预测

获取全国新冠肺炎疫情数据后,需要构建lstm模型和对数据进行预处理和归一化处理,使输入数据符合lstm网络的输入格式:

步骤1:将生成的csv格式的新冠肺炎疫情数据按14天的数据构成数组作为输入数据,将之后28天的数据构成数组作为预测标签,形成预测数据集;

步骤2:将预测数据集按7:3比例划分为训练集和测试集;

步骤3:通过sklearn.preprocessing库中minmaxscaler函数预测数据集进行归一化处理,将数据x映射x′到[0,1]之间。选取最大值max和最小值min,采用公式(7)进行归一化处理;

步骤4:构建lstm网络,通过人工神经网络库keras,利用keras中包含的lstm网络模块以及损失函数、层数和dropout模块,将训练集数据输入到lstm网络中进行训练,损失函数选取均方误差函数(mse),优化器选取adam,通过设置迭代次数epoch设置为3000、批处理大小batch_size设置为1;

步骤5:将测试集数据送入到设置好的lstm网络中,采用公式(8)均方根误差rmse来评价真实值与预测值之间的偏差,并且根据测试集得出的rmse值调整lstm网络训练参数;

步骤6:预测。将训练好的模型参数保存,将所要预测的时间的数据和之前14天的新冠肺炎疫情数据生成序列,并调整维度,然后输入到已训练好lstm模型中,得出全国28天后的新冠肺炎疫情群体态势;

步骤7:重复以上步骤,对全国新增确诊病例数据、新增境外输入病例、新增无症状感染者病例、新增重症病例、新增死亡病例、新增治愈病例和新增疑似病例数据分别进行lstm网络训练参数,得出不同病例的预测模型、参数和预测结果。

(三)省(自治区、直辖市)新冠肺炎疫情预测

通过python爬虫从百度新冠肺炎疫情大数据平台获取各省(自治区、直辖市)新冠肺炎疫情新增确诊病例,新增死亡病例以及新增治愈病例历史数据和实时数据,并将其生成csv格式的文件。预测各省(自治区、直辖市)28天后新冠肺炎疫情群体态势。

步骤1:将生成的csv格式的新冠肺炎疫情数据文件按14天的数据构成数组作为输入数据,将之后28天的新冠肺炎疫情数据构成数组作为预测标签,形成预测数据集;

步骤2:将预测数据集按7:3比例划分为训练集和测试集;

步骤3:通过sklearn.preprocessing库中minmaxscaler函数预测数据集进行归一化处理,将数据x映射x′到[0,1]之间。选取最大值max和最小值min,采用公式(7)进行归一化处理;

步骤4:构建lstm网络,通过人工神经网络库keras,利用keras中包含的lstm网络模块以及损失函数、层数和dropout模块,将训练集数据输入到lstm网络中进行训练,损失函数选取均方误差函数(mse),优化器选取adam,通过设置迭代次数epoch设置为500、批处理大小batch_size设置为1;

步骤5:将测试集数据送入到训练好的lstm网络中,采用公式(8)均方根误差rmse来评价真实值与预测值之间的偏差,并且将训练完成的lstm网络参数保存到本地文件;

步骤6:预测。将所要预测的14天的新冠肺炎疫情数据生成序列,并调整维度,然后输入到已训练好的lstm网络中,得出省(自治区、直辖市)28天后的新冠肺炎疫情群体态势数据;

步骤7:重复以上步骤,对各省(自治区、直辖市)新增确诊病例,新增死亡病例以及新增治愈病例分别进行lstm网络训练参数,得出不同病例的预测模型、参数和预测结果。

(四)城市新冠肺炎疫情群体态势预测

通过python爬虫从百度新冠肺炎疫情大数据平台获取各主要城市新冠肺炎疫情新增确诊病例,新增死亡病例以及新增治愈病例历史数据和实时数据,并将其生成csv格式的文件。预测各城市28天后的新冠肺炎疫情群体态势。

步骤1:将生成的csv格式的新冠肺炎疫情数据按14天的数据构成数组作为输入数据,将之后28天的数据构成数组作为预测标签,形成预测数据集;

步骤2:将预测数据集按7:3比例划分为训练集和测试集;

步骤3:通过sklearn.preprocessing库中minmaxscaler函数预测数据集进行归一化处理,将数据x映射x′到[0,1]之间。选取最大值max和最小值min,采用公式(7)进行归一化处理;

步骤4:构建lstm网络,通过人工神经网络库keras,利用keras中包含的lstm网络模块以及损失函数、层数和dropout模块,将训练集数据输入到lstm网络中进行训练,损失函数选取均方误差函数(mse),优化器选取adam,通过设置迭代次数epoch设置为500、批处理大小batch_size设置为1;

步骤5:将测试集数据送入到训练好的lstm模型中,采用公式(8)均方根误差rmse来评价真实值与预测值之间的偏差,并且将训练完成的lstm网络参数保存到本地文件;

步骤6:预测。将所要预测的14天的新冠肺炎疫情数据生成序列,并调整维度,然后输入到已训练好的lstm网络中,得出省(自治区、直辖市)28天后的新冠肺炎疫情群体态势数据;

步骤7:重复以上步骤,对各省(自治区、直辖市)新增确诊病例,新增死亡病例以及新增治愈病例分别进行lstm网络训练参数,得出不同病例的预测模型、参数和预测结果。

综上所述,本方案旨在利用lstm网络良好的处理时间序列的优点,结合新冠肺炎疫情历史数据,通过对近期新冠肺炎疫情数据的训练,对28天后的全国、省(自治区、直辖市)和城市的新冠肺炎疫情群体态势预测,进一步得出新冠肺炎疫情发展和影响的规律,提高了预测的准确度。该方案可以利用近期数据进行训练,克服之前数据不稳定的影响,使lstm网络更好的学习疫情的规律,从而提高预测的准确度。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1