基于LSTM神经网络结构模型的北京空气质量预测实验报告含python程序源代码

发布时间:2024年01月13日

基于LSTM神经网络结构模型的北京空气质量预测实验报告含python程序源代码

本实验旨在利用LSTM(Long Short-Term Memory,长短期记忆网络)神经网络模型,对北京市的空气质量进行预测。通过历史的气象和空气质量数据,训练LSTM模型,以便在未来时间点预测北京市的空气质量水平,从而提供有关空气质量改善措施的预测参考。**LSTM模型构建:**- 设计LSTM神经网络结构,包括输入层、隐藏层和输出层,根据数据特点和预测目标进行合适的设置。- 配置LSTM模型的超参数,如时间步长、隐藏层神经元数量、学习率等。- 使用训练集数据对LSTM模型进行训练,通过反向传播算法更新模型参数,优化模型性能。**模型评估与调优:**- 使用测试集数据对训练好的LSTM模型进行评估,计算预测结果与真实值之间的误差指标(如均方根误差、平均绝对误差等)。- 根据评估结果进行模型调优,可能调整模型结构或超参数,以提高预测准确性。

??

属性字段

??

简要说明

No

行号

year

此列中数据的年份

month

此列中数据的月份

day

此列中数据的几号

hour

此行中数据的小时

pm2.5

PM2.5浓度

DEWP

露点温度

TEMP

对应时刻的温度

PRES

对应时刻的气压

cbwd

组合风向

Iws

累计风速

Is

累计降雪时数

ls

累计降雨时数

from pandas import read_csv
from datetime import datetime
# 数据处理
def parse(x):
?? ?return datetime.strptime(x, '%Y %m %d %H')
dataset = read_csv('raw.csv', ?parse_dates = [['year', 'month', 'day', 'hour']], index_col=0, date_parser=parse)
dataset.drop('No', axis=1, inplace=True)
# 指定列名
dataset.columns = ['pollution', 'dew', 'temp', 'press', 'wnd_dir', 'wnd_spd', 'snow', 'rain']
dataset.index.name = 'date'
# 将所有 NA 值标记为 0
dataset['pollution'].fillna(0, inplace=True)
# 删除前24个小时
dataset = dataset[24:]
# 检测数据 查看前五行
print(dataset.head(5))
# 存储处理完成的数据
dataset.to_csv('pollution.csv')

# coding=utf-8
from pandas import read_csv
from pandas import DataFrame
from pandas import concat
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
import pandas as pd

pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
? ? # 获取特征值数量n_vars
? ? n_vars = 1 if type(data) is list else data.shape[1]
? ? df = DataFrame(data)
? ? print(df)
? ? cols, names = list(), list()
? ? # input sequence (t-n, ... t-1)
? ? # 创建8个v(t-1)作为列名
? ? for i in range(n_in, 0, -1):
? ? ? ? # 向列表cols中添加一个df.shift(1)的数据
? ? ? ? cols.append(df.shift(i))
? ? ? ? print(cols)
? ? ? ? names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
? ? # forecast sequence (t, t+1, ... t+n)
? ? for i in range(0, n_out):
? ? ? ? # 向列表cols中添加一个df.shift(-1)的数据
? ? ? ? cols.append(df.shift(-i))
? ? ? ? print(cols)
? ? ? ? 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)]
? ? print(cols)
? ? # 将列表中两个张量按照列拼接起来,list(v1,v2)->[v1,v2],其中v1向下移动了一行,此时v1,v2是监督学习型数据
? ? agg = concat(cols, axis=1)
? ? print(agg)
? ? # 重定义列名
? ? agg.columns = names
? ? print(agg)
? ? # 删除空值
? ? if dropnan:
? ? ?? ?agg.dropna(inplace=True)
? ? return agg

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
print(values)
# 对第四列“风向”进行数字编码转换
encoder = LabelEncoder()
values[:,4] = encoder.fit_transform(values[:,4])
print(values[:,4])
# 数据转换为浮点型
values = values.astype('float32')
# 将所有数据缩放到(0,1)之间
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
# 将数据格式化成监督学习型数据
reframed = series_to_supervised(scaled, 1, 1)
print(reframed.head())
# 删掉那些我们不想预测的列,axis=1列操作
reframed.drop(reframed.columns[[9,10,11,12,13,14,15]], axis=1, inplace=True)
# 最终每行数据格式如下,其中v1(t-1)~v8(t-1)表示前一天的数据,v1(t)表示当天要预测的数据:
# v1(t-1),v2(t-2),v3(t-3),v4(t-4),v5(t-5),v6(t-6),v7(t-7),v8(t-1),v1(t)
print(reframed.head())

from pandas import read_csv
from matplotlib import pyplot

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
#指定要绘制的列
groups = [0, 1, 2, 3, 5, 6, 7]
i = 1

pyplot.figure()
for group in groups:
?? ?pyplot.subplot(len(groups), 1, i)
?? ?pyplot.plot(values[:, group])
?? ?pyplot.title(dataset.columns[group], y=0.5, loc='right')
?? ?i += 1
pyplot.show()

基于LSTM神经网络结构模型的北京空气质量预测实验报告含python程序源代码

本实验旨在利用LSTM(Long Short-Term Memory,长短期记忆网络)神经网络模型,对北京市的空气质量进行预测。通过历史的气象和空气质量数据,训练LSTM模型,以便在未来时间点预测北京市的空气质量水平,从而提供有关空气质量改善措施的预测参考。**LSTM模型构建:**- 设计LSTM神经网络结构,包括输入层、隐藏层和输出层,根据数据特点和预测目标进行合适的设置。- 配置LSTM模型的超参数,如时间步长、隐藏层神经元数量、学习率等。- 使用训练集数据对LSTM模型进行训练,通过反向传播算法更新模型参数,优化模型性能。**模型评估与调优:**- 使用测试集数据对训练好的LSTM模型进行评估,计算预测结果与真实值之间的误差指标(如均方根误差、平均绝对误差等)。- 根据评估结果进行模型调优,可能调整模型结构或超参数,以提高预测准确性。

??

属性字段

??

简要说明

No

行号

year

此列中数据的年份

month

此列中数据的月份

day

此列中数据的几号

hour

此行中数据的小时

pm2.5

PM2.5浓度

DEWP

露点温度

TEMP

对应时刻的温度

PRES

对应时刻的气压

cbwd

组合风向

Iws

累计风速

Is

累计降雪时数

ls

累计降雨时数

from pandas import read_csv
from datetime import datetime
# 数据处理
def parse(x):
?? ?return datetime.strptime(x, '%Y %m %d %H')
dataset = read_csv('raw.csv', ?parse_dates = [['year', 'month', 'day', 'hour']], index_col=0, date_parser=parse)
dataset.drop('No', axis=1, inplace=True)
# 指定列名
dataset.columns = ['pollution', 'dew', 'temp', 'press', 'wnd_dir', 'wnd_spd', 'snow', 'rain']
dataset.index.name = 'date'
# 将所有 NA 值标记为 0
dataset['pollution'].fillna(0, inplace=True)
# 删除前24个小时
dataset = dataset[24:]
# 检测数据 查看前五行
print(dataset.head(5))
# 存储处理完成的数据
dataset.to_csv('pollution.csv')

# coding=utf-8
from pandas import read_csv
from pandas import DataFrame
from pandas import concat
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
import pandas as pd

pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
? ? # 获取特征值数量n_vars
? ? n_vars = 1 if type(data) is list else data.shape[1]
? ? df = DataFrame(data)
? ? print(df)
? ? cols, names = list(), list()
? ? # input sequence (t-n, ... t-1)
? ? # 创建8个v(t-1)作为列名
? ? for i in range(n_in, 0, -1):
? ? ? ? # 向列表cols中添加一个df.shift(1)的数据
? ? ? ? cols.append(df.shift(i))
? ? ? ? print(cols)
? ? ? ? names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
? ? # forecast sequence (t, t+1, ... t+n)
? ? for i in range(0, n_out):
? ? ? ? # 向列表cols中添加一个df.shift(-1)的数据
? ? ? ? cols.append(df.shift(-i))
? ? ? ? print(cols)
? ? ? ? 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)]
? ? print(cols)
? ? # 将列表中两个张量按照列拼接起来,list(v1,v2)->[v1,v2],其中v1向下移动了一行,此时v1,v2是监督学习型数据
? ? agg = concat(cols, axis=1)
? ? print(agg)
? ? # 重定义列名
? ? agg.columns = names
? ? print(agg)
? ? # 删除空值
? ? if dropnan:
? ? ?? ?agg.dropna(inplace=True)
? ? return agg

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
print(values)
# 对第四列“风向”进行数字编码转换
encoder = LabelEncoder()
values[:,4] = encoder.fit_transform(values[:,4])
print(values[:,4])
# 数据转换为浮点型
values = values.astype('float32')
# 将所有数据缩放到(0,1)之间
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
# 将数据格式化成监督学习型数据
reframed = series_to_supervised(scaled, 1, 1)
print(reframed.head())
# 删掉那些我们不想预测的列,axis=1列操作
reframed.drop(reframed.columns[[9,10,11,12,13,14,15]], axis=1, inplace=True)
# 最终每行数据格式如下,其中v1(t-1)~v8(t-1)表示前一天的数据,v1(t)表示当天要预测的数据:
# v1(t-1),v2(t-2),v3(t-3),v4(t-4),v5(t-5),v6(t-6),v7(t-7),v8(t-1),v1(t)
print(reframed.head())

from pandas import read_csv
from matplotlib import pyplot

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
#指定要绘制的列
groups = [0, 1, 2, 3, 5, 6, 7]
i = 1

pyplot.figure()
for group in groups:
?? ?pyplot.subplot(len(groups), 1, i)
?? ?pyplot.plot(values[:, group])
?? ?pyplot.title(dataset.columns[group], y=0.5, loc='right')
?? ?i += 1
pyplot.show()

基于LSTM神经网络结构模型的北京空气质量预测实验报告含python程序源代码

本实验旨在利用LSTM(Long Short-Term Memory,长短期记忆网络)神经网络模型,对北京市的空气质量进行预测。通过历史的气象和空气质量数据,训练LSTM模型,以便在未来时间点预测北京市的空气质量水平,从而提供有关空气质量改善措施的预测参考。**LSTM模型构建:**- 设计LSTM神经网络结构,包括输入层、隐藏层和输出层,根据数据特点和预测目标进行合适的设置。- 配置LSTM模型的超参数,如时间步长、隐藏层神经元数量、学习率等。- 使用训练集数据对LSTM模型进行训练,通过反向传播算法更新模型参数,优化模型性能。**模型评估与调优:**- 使用测试集数据对训练好的LSTM模型进行评估,计算预测结果与真实值之间的误差指标(如均方根误差、平均绝对误差等)。- 根据评估结果进行模型调优,可能调整模型结构或超参数,以提高预测准确性。

??

属性字段

??

简要说明

No

行号

year

此列中数据的年份

month

此列中数据的月份

day

此列中数据的几号

hour

此行中数据的小时

pm2.5

PM2.5浓度

DEWP

露点温度

TEMP

对应时刻的温度

PRES

对应时刻的气压

cbwd

组合风向

Iws

累计风速

Is

累计降雪时数

ls

累计降雨时数

from pandas import read_csv
from datetime import datetime
# 数据处理
def parse(x):
?? ?return datetime.strptime(x, '%Y %m %d %H')
dataset = read_csv('raw.csv', ?parse_dates = [['year', 'month', 'day', 'hour']], index_col=0, date_parser=parse)
dataset.drop('No', axis=1, inplace=True)
# 指定列名
dataset.columns = ['pollution', 'dew', 'temp', 'press', 'wnd_dir', 'wnd_spd', 'snow', 'rain']
dataset.index.name = 'date'
# 将所有 NA 值标记为 0
dataset['pollution'].fillna(0, inplace=True)
# 删除前24个小时
dataset = dataset[24:]
# 检测数据 查看前五行
print(dataset.head(5))
# 存储处理完成的数据
dataset.to_csv('pollution.csv')

# coding=utf-8
from pandas import read_csv
from pandas import DataFrame
from pandas import concat
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
import pandas as pd

pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
? ? # 获取特征值数量n_vars
? ? n_vars = 1 if type(data) is list else data.shape[1]
? ? df = DataFrame(data)
? ? print(df)
? ? cols, names = list(), list()
? ? # input sequence (t-n, ... t-1)
? ? # 创建8个v(t-1)作为列名
? ? for i in range(n_in, 0, -1):
? ? ? ? # 向列表cols中添加一个df.shift(1)的数据
? ? ? ? cols.append(df.shift(i))
? ? ? ? print(cols)
? ? ? ? names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
? ? # forecast sequence (t, t+1, ... t+n)
? ? for i in range(0, n_out):
? ? ? ? # 向列表cols中添加一个df.shift(-1)的数据
? ? ? ? cols.append(df.shift(-i))
? ? ? ? print(cols)
? ? ? ? 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)]
? ? print(cols)
? ? # 将列表中两个张量按照列拼接起来,list(v1,v2)->[v1,v2],其中v1向下移动了一行,此时v1,v2是监督学习型数据
? ? agg = concat(cols, axis=1)
? ? print(agg)
? ? # 重定义列名
? ? agg.columns = names
? ? print(agg)
? ? # 删除空值
? ? if dropnan:
? ? ?? ?agg.dropna(inplace=True)
? ? return agg

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
print(values)
# 对第四列“风向”进行数字编码转换
encoder = LabelEncoder()
values[:,4] = encoder.fit_transform(values[:,4])
print(values[:,4])
# 数据转换为浮点型
values = values.astype('float32')
# 将所有数据缩放到(0,1)之间
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
# 将数据格式化成监督学习型数据
reframed = series_to_supervised(scaled, 1, 1)
print(reframed.head())
# 删掉那些我们不想预测的列,axis=1列操作
reframed.drop(reframed.columns[[9,10,11,12,13,14,15]], axis=1, inplace=True)
# 最终每行数据格式如下,其中v1(t-1)~v8(t-1)表示前一天的数据,v1(t)表示当天要预测的数据:
# v1(t-1),v2(t-2),v3(t-3),v4(t-4),v5(t-5),v6(t-6),v7(t-7),v8(t-1),v1(t)
print(reframed.head())

from pandas import read_csv
from matplotlib import pyplot

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
#指定要绘制的列
groups = [0, 1, 2, 3, 5, 6, 7]
i = 1

pyplot.figure()
for group in groups:
?? ?pyplot.subplot(len(groups), 1, i)
?? ?pyplot.plot(values[:, group])
?? ?pyplot.title(dataset.columns[group], y=0.5, loc='right')
?? ?i += 1
pyplot.show()

基于LSTM神经网络结构模型的北京空气质量预测实验报告含python程序源代码

本实验旨在利用LSTM(Long Short-Term Memory,长短期记忆网络)神经网络模型,对北京市的空气质量进行预测。通过历史的气象和空气质量数据,训练LSTM模型,以便在未来时间点预测北京市的空气质量水平,从而提供有关空气质量改善措施的预测参考。**LSTM模型构建:**- 设计LSTM神经网络结构,包括输入层、隐藏层和输出层,根据数据特点和预测目标进行合适的设置。- 配置LSTM模型的超参数,如时间步长、隐藏层神经元数量、学习率等。- 使用训练集数据对LSTM模型进行训练,通过反向传播算法更新模型参数,优化模型性能。**模型评估与调优:**- 使用测试集数据对训练好的LSTM模型进行评估,计算预测结果与真实值之间的误差指标(如均方根误差、平均绝对误差等)。- 根据评估结果进行模型调优,可能调整模型结构或超参数,以提高预测准确性。

??

属性字段

??

简要说明

No

行号

year

此列中数据的年份

month

此列中数据的月份

day

此列中数据的几号

hour

此行中数据的小时

pm2.5

PM2.5浓度

DEWP

露点温度

TEMP

对应时刻的温度

PRES

对应时刻的气压

cbwd

组合风向

Iws

累计风速

Is

累计降雪时数

ls

累计降雨时数

from pandas import read_csv
from datetime import datetime
# 数据处理
def parse(x):
?? ?return datetime.strptime(x, '%Y %m %d %H')
dataset = read_csv('raw.csv', ?parse_dates = [['year', 'month', 'day', 'hour']], index_col=0, date_parser=parse)
dataset.drop('No', axis=1, inplace=True)
# 指定列名
dataset.columns = ['pollution', 'dew', 'temp', 'press', 'wnd_dir', 'wnd_spd', 'snow', 'rain']
dataset.index.name = 'date'
# 将所有 NA 值标记为 0
dataset['pollution'].fillna(0, inplace=True)
# 删除前24个小时
dataset = dataset[24:]
# 检测数据 查看前五行
print(dataset.head(5))
# 存储处理完成的数据
dataset.to_csv('pollution.csv')

# coding=utf-8
from pandas import read_csv
from pandas import DataFrame
from pandas import concat
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
import pandas as pd

pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
? ? # 获取特征值数量n_vars
? ? n_vars = 1 if type(data) is list else data.shape[1]
? ? df = DataFrame(data)
? ? print(df)
? ? cols, names = list(), list()
? ? # input sequence (t-n, ... t-1)
? ? # 创建8个v(t-1)作为列名
? ? for i in range(n_in, 0, -1):
? ? ? ? # 向列表cols中添加一个df.shift(1)的数据
? ? ? ? cols.append(df.shift(i))
? ? ? ? print(cols)
? ? ? ? names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
? ? # forecast sequence (t, t+1, ... t+n)
? ? for i in range(0, n_out):
? ? ? ? # 向列表cols中添加一个df.shift(-1)的数据
? ? ? ? cols.append(df.shift(-i))
? ? ? ? print(cols)
? ? ? ? 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)]
? ? print(cols)
? ? # 将列表中两个张量按照列拼接起来,list(v1,v2)->[v1,v2],其中v1向下移动了一行,此时v1,v2是监督学习型数据
? ? agg = concat(cols, axis=1)
? ? print(agg)
? ? # 重定义列名
? ? agg.columns = names
? ? print(agg)
? ? # 删除空值
? ? if dropnan:
? ? ?? ?agg.dropna(inplace=True)
? ? return agg

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
print(values)
# 对第四列“风向”进行数字编码转换
encoder = LabelEncoder()
values[:,4] = encoder.fit_transform(values[:,4])
print(values[:,4])
# 数据转换为浮点型
values = values.astype('float32')
# 将所有数据缩放到(0,1)之间
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
# 将数据格式化成监督学习型数据
reframed = series_to_supervised(scaled, 1, 1)
print(reframed.head())
# 删掉那些我们不想预测的列,axis=1列操作
reframed.drop(reframed.columns[[9,10,11,12,13,14,15]], axis=1, inplace=True)
# 最终每行数据格式如下,其中v1(t-1)~v8(t-1)表示前一天的数据,v1(t)表示当天要预测的数据:
# v1(t-1),v2(t-2),v3(t-3),v4(t-4),v5(t-5),v6(t-6),v7(t-7),v8(t-1),v1(t)
print(reframed.head())

from pandas import read_csv
from matplotlib import pyplot

dataset = read_csv('pollution.csv', header=0, index_col=0)
values = dataset.values
#指定要绘制的列
groups = [0, 1, 2, 3, 5, 6, 7]
i = 1

pyplot.figure()
for group in groups:
?? ?pyplot.subplot(len(groups), 1, i)
?? ?pyplot.plot(values[:, group])
?? ?pyplot.title(dataset.columns[group], y=0.5, loc='right')
?? ?i += 1
pyplot.show()

文章来源:https://blog.csdn.net/yushibing717/article/details/135527890
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。