基于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()