# 基于TensorFlow LSTM神经网络的温度预测分析
**Repository Path**: miku-sakura/temperature_analysis
## Basic Information
- **Project Name**: 基于TensorFlow LSTM神经网络的温度预测分析
- **Description**: 基于LSTM神经网络的温度预测分析,探索使用LSTM神经网络对气温进行预测,并且评估其预测精度。
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 11
- **Forks**: 2
- **Created**: 2024-06-21
- **Last Updated**: 2025-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Python, TensorFlow
## README
# 基于LSTM神经网络的温度预测分析
#### 介绍
基于LSTM神经网络的温度预测分析,探索使用LSTM神经网络对中国湖北省孝感市的气温进行预测,并且评估其预测精度。
#### 软件架构
软件架构说明
#### 安装教程
```bash
pip install --save pandas numpy sklearn tensorflow
**目 录**
. 课程背景及意义 2]()
[2. 实验目的: 2]()
[3. 数据集: 3]()
[3.1 数据来源 3]()
[3.2 数据清洗 4]()
[3.3 数据标准化 4]()
[4. 实验步骤: 5]()
[4.1 数据获取 5]()
[4.2 数据处理 7]()
[4.3 LSTM模型构建与训练 10]()
[5. 结果分析 18]()
[6. 实验总结 21]()
1. # **课程背景及意义**
气温预测在农业、能源、交通、旅游等领域具有广泛的应用,对提升生产效率和资源利用效率具有重要意义。在农业领域,农民可以根据未来的天气预测来安排作物的种植和灌溉计划。在能源管理中,电力公司可以根据未来的温度预测来规划电力需求和发电计划。在交通运输领域,航空公司和铁路公司可以根据未来的天气预测来调整航班和列车时刻表。在气象学中,气温预测是一个重要且具有挑战性的任务。传统的统计模型在处理时间序列数据时常常难以捕捉到复杂的非线性关系。近年来,深度学习技术,尤其是LSTM神经网络,在时间序列预测中表现出了强大的能力。本报告目标在于探索使用LSTM神经网络对中国湖北省孝感市的气温进行预测,并且评估其预测精度。
1. # **实验目的:**
本实验目的在于使用长短期记忆(LSTM)神经网络模型预测中国湖北省孝感市的未来气温。通过本实验,我将获取、清洗和处理气象数据,并使用深度学习技术进行时间序列预测。具体目的包括:
1) 掌握数据预处理技术:
学习和掌握对气温时间序列数据进行预处理的方法,包括数据清洗、缺失值处理、移动平均线计算和季节性分解分析等。理解和应用数据标准化技术,为后续模型训练提供高质量的输入数据。
1) 构建和训练LSTM神经网络模型:
学习LSTM神经网络的原理及其在处理时间序列数据方面的优势,构建适合气温预测的LSTM模型。通过设置合适的模型架构和超参数(如LSTM层数、节点数、Dropout比例等),训练模型并优化其性能。
1) 评估和验证模型性能:
使用常见的评估指标(如MAE、RMSE)对模型在训练集和测试集上的表现进行评估,分析模型是否准确和稳定。通过可视化手段展示预测结果,与真实数据进行对比,直观验证模型是否准确。
1) 探讨LSTM模型在气温预测中的应用前景:
研究气温预测在农业、能源、环境监测等领域的应用价值,讨论LSTM模型在实际应用中的优势和局限。
1. # **数据集:**
1. ## ` `**数据来源**
我使用Weatherbit API获取了孝感市(孝南区)的历史气温数据。涵盖2023-01-01到2024-06-05的所有温度数据(总计12505条),API返回的数据包括每小时的气温、湿度、气压等信息。然后我将数据写入到excel文件中,将Api返回的接口数据处理为date和temperature 两列,最终的数据格式如下图1:

**图1 数据格式**
**Api接口为:**https://api.weatherbit.io/v2.0/history/hourly
1. ## **数据清洗**
获取的数据中可能包含缺失值或异常值。我对这些数据进行了清洗,使用前向填充法填补缺失值,确保数据完整和连续,处理后的数据如下图2:

**图2 数据清洗结果**
1. ## **数据标准化**
为了提高模型的训练效果,我对气温数据进行了标准化处理。标准化后的数据被缩放到0和1之间,使得不同特征之间具有相同的尺度,处理后的数据如下图3:

**图3 数据标准化结果**
1. # **实验步骤:**
1. ## **数据获取**
我通过request模块请求 https://api.weatherbit.io/v2.0/history/hourly传入孝感孝南区的经纬度以及时间范围,获取从2024年1月1日到2024年6月5日的每小时天气数据。通过GET请求获取数据并解析成JSON格式,然后将数据转换为Pandas DataFrame,筛选出本地时间戳和温度列,并将时间戳转换为日期时间格式,将其设为索引。将最终结果保存为Excel文件,并返回DataFrame。如果请求失败,会进行重试,最多重试三次,如以下代码:
import requests
import pandas as pd
from datetime import datetime, timedelta
import time
API\_KEY = '849aa9534ece4611af483035935a9a30'
LAT = 30.9336
LON = 113.922
START\_DATE = '2024-01-01'
END\_DATE = '2024-06-05'
BASE\_URL = 'https://api.weatherbit.io/v2.0/history/hourly'
def fetch\_weather\_data(lat, lon, start\_date, end\_date, api\_key, retries=3):
` `params = {
` `'lat': lat,
` `'lon': lon,
` `'start\_date': start\_date,
` `'end\_date': end\_date,
` `'key': api\_key,
` `'tz': 'local'
` `}
` `for \_ in range(retries):
` `try:
` `response = requests.get(BASE\_URL, params=params)
` `response.raise\_for\_status()
` `data = response.json()
` `records = data['data']
` `df = pd.DataFrame(records)
` `df = df[['timestamp\_local', 'temp']]
` `df.rename(columns={'timestamp\_local': 'date', 'temp': 'temperature'}, inplace=True)
` `df['date'] = pd.to\_datetime(df['date'])
` `df.set\_index('date', inplace=True)
` `df.to\_excel('temperature\_data.xlsx')
` `return df
` `except requests.exceptions.RequestException as e:
` `print(f"错误: {e}. 重试...")
` `time.sleep(5)
` `raise ConnectionError("发生错误")
weather\_df = fetch\_weather\_data(LAT, LON, START\_DATE, END\_DATE, API\_KEY)
print(weather\_df.head())

**图4 保存的温度数据文件**

**图4序 数据内容**
1. ## **数据处理**
读取温度xlsx文件,并进行预处理和可视化分析。具体步骤包括统计描述和缺失值处理,通过前向填充方法处理缺失值;绘制温度和24小时移动平均线图,观察数据趋势;使用季节性分解方法分析温度数据的趋势、季节性和残差成分;最后,对温度数据进行标准化处理,将数据缩放到0到1之间,如以下代码:
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal\_decompose
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean\_absolute\_error, mean\_squared\_error
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, Dropout
*# 读取数据*
data = pd.read\_excel('temperature\_data-2023-2024.xlsx', parse\_dates=['date'], index\_col='date')
*# 统计描述*
print("统计描述:")
print(data.describe())
*# 缺失值处理*
print("缺失值检查:")
print(data.isnull().sum())
*# 如果有缺失值,使用向前填充方法进行处理*
data.fillna(method='ffill', inplace=True)
print("缺失值处理后:")
print(data.isnull().sum())
*# 数据趋势和季节性分析
\# 移动平均线*
data['temperature\_MA'] = data['temperature'].rolling(window=24).mean()
plt.figure(figsize=(14, 7))
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.plot(data['temperature'], label='气温')
plt.plot(data['temperature\_MA'], label='24小时移动平均线', color='orange')
plt.xlabel('日期')
plt.ylabel('温度 (°C)')
plt.title('温度和24小时移动平均线')
plt.legend()
plt.show()
*# 季节性分解*
decomposition = seasonal\_decompose(data['temperature'], model='additive', period=24)
fig = decomposition.plot()
fig.set\_size\_inches(14, 8)
plt.xlabel('日期')
plt.ylabel('温度 (°C)')
plt.title('温度季节性分解')
plt.show()
*# 数据标准化*
scaler = MinMaxScaler(feature\_range=(0, 1))
temperature\_scaled = scaler.fit\_transform(data['temperature'].values.reshape(-1, 1))
*# 打印标准化后的数据*
print("标准化后的数据:")
print(temperature\_scaled)
以下是我提取六个月的温度生成的24小时移动的平均线变化图,如图6

图6 温度和24小时移动平均线
季节性分解将时间序列数据分解为四个成分:原始数据、长期趋势、周期性波动和残差。原始数据展示了实际的温度变化,趋势成分反映了数据的长期变化方向,季节性成分显示了数据在固定周期内的重复模式,而残差成分表示去除趋势和季节性后的随机波动和异常值。如图7:

**图7 季节性分解图**
我将时间序列数据划分为输入特征(X)和目标变量(y)。对于每个时间步,将过去 time\_step 个时间步的特征作为输入,下一个时间步的温度作为目标输出。返回值为 X 和 y,分别是输入特征和目标变量的数组。时间步设置为10,通过数据分割将将创建的数据集分割为训练集和测试集,将数据集的前80%作为训练集,后20%作为测试集。分别获取训练集和测试集的输入特征 X\_train 和 X\_test,以及目标变量 y\_train 和 y\_test。如以下代码:
*# 创建数据集*
def create\_dataset(data, time\_step=1):
` `X, y = [], []
` `for i in range(len(data) - time\_step - 1):
` `X.append(data[i:(i + time\_step), 0])
` `y.append(data[i + time\_step, 0])
` `return np.array(X), np.array(y)
time\_step = 10
X, y = create\_dataset(temperature\_scaled, time\_step)
X = X.reshape(X.shape[0], X.shape[1], 1)
*# 数据分割*
train\_size = int(len(X) \* 0.8)
X\_train, X\_test = X[:train\_size], X[train\_size:]
y\_train, y\_test = y[:train\_size], y[train\_size:]
1. ## ` `**LSTM模型构建与训练**
1. #### **模型架构**
我构建了一个两层LSTM网络,包含50个隐藏单元,每层之间添加了Dropout层为了防止过拟合。最后,通过两个全连接层输出预测结果。
1) 模型构建:
使用 Sequential 创建一个序贯模型。添加两个LSTM(长短期记忆)层,每个层都有50个神经元,第一个LSTM层设置了输入形状为 (time\_step, 1),其中 time\_step 表示时间步数,1表示每个时间步的特征数。在第二个LSTM层设置 return\_sequences=False,表示该层不返回完整序列,而只返回输出序列的最后一个时间步。添加一个Dropout层,用于防止过拟合,丢弃比例为0.2。最后添加两个全连接层(Dense层),分别有25个和1个神经元。
1) 模型编译:
使用 adam 作为优化器,采用梯度下降的方法来最小化损失函数。损失函数选择了均方误差(mean\_squared\_error),用于衡量模型预测值与实际值之间的差异。
**代码如下:**
*# 构建神经网络模型*
model = Sequential()
model.add(LSTM(50, return\_sequences=True, input\_shape=(time\_step, 1)))
model.add(LSTM(50, return\_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(25))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean\_squared\_error')
1. #### **模型训练**
我将数据集分为训练集和测试集,使用均方误差(MSE)作为损失函数,采用Adam优化器进行模型训练。训练过程中,监控训练集和验证集的损失,以防止过拟合。
1) 模型训练:
使用 model.fit 方法对训练集进行训练。X\_train 和 y\_train 分别表示训练集的输入特征和目标变量。batch\_size=1 表示每次训练使用的样本数为1,采用随机梯度下降(SGD)的方式进行训练。epochs=20 表示训练的轮数,即模型将对整个训练集进行20轮的训练。validation\_data=(X\_test, y\_test) 表示使用测试集进行验证,用于评估模型在未见过的数据上的性能表现。
1) 记录训练历史:
history 变量用于保存训练过程中的历史数据,包括每个训练轮次的损失值和性能指标。
**代码如下:**
*# 训练模型*
history = model.fit(X\_train, y\_train, batch\_size=1, epochs=20, validation\_data=(X\_test, y\_test))
1. #### **模型保存**
为了避免每次都重新训练模型,我将训练好的模型保存为H5文件,并实现了模型的加载功能,便于后续的预测任务。代码如下:
*# 保存模型*
model.save('temperature\_prediction\_model.h5')
1. #### **模型预测**
1) 预测:
使用训练好的模型对训练集和测试集进行预测,得到预测结果 train\_predict 和 test\_predict。代码如下:
*# 预测*
train\_predict = model.predict(X\_train)
test\_predict = model.predict(X\_test)
1) 反标准化:
使用 scaler.inverse\_transform 方法将标准化后的预测值和真实值转换为原始数据的范围。
\# 反标准化预测值
train\_predict = scaler.inverse\_transform(train\_predict)
test\_predict = scaler.inverse\_transform(test\_predict)
\# 反标准化真实值
y\_train = scaler.inverse\_transform(y\_train.reshape(-1, 1))
y\_test = scaler.inverse\_transform(y\_test.reshape(-1, 1))
1) 计算误差:
使用 mean\_absolute\_error 和 mean\_squared\_error 计算训练集和测试集的平均绝对误差(MAE)和均方根误差(RMSE),用于评估模型的预测准确度。
\# 计算误差
train\_mae = mean\_absolute\_error(y\_train, train\_predict)
train\_rmse = np.sqrt(mean\_squared\_error(y\_train, train\_predict))
test\_mae = mean\_absolute\_error(y\_test, test\_predict)
test\_rmse = np.sqrt(mean\_squared\_error(y\_test, test\_predict))
print(f'训练集 MAE: {train\_mae:.3f}')
print(f'训练集 RMSE: {train\_rmse:.3f}')
print(f'测试集 MAE: {test\_mae:.3f}')
print(f'测试集 RMSE: {test\_rmse:.3f}')
1) 可视化损失曲线:
绘制训练和验证损失随训练轮次的变化曲线,帮助了解模型在训练过程中的收敛情况和泛化能力。
*# 可视化损失曲线*
plt.figure(figsize=(12, 6))
plt.plot(history.history['loss'], label='训练集损失')
plt.plot(history.history['val\_loss'], label='验证集损失')
plt.xlabel('Epoch')
plt.ylabel('损失')
plt.title('训练和验证损失')
plt.legend()
plt.show()

**图8 训练和验证损失图**
1) 可视化预测结果:
绘制真实训练数据和测试数据的温度曲线,以及模型对训练集和测试集的温度预测结果,帮助观察预测效果。
\# 可视化预测结果
plt.figure(figsize=(12, 6))
plt.plot(data.index[:len(y\_train)], y\_train, label='真实训练数据')
plt.plot(data.index[len(y\_train):len(y\_train) + len(y\_test)], y\_test, label='真实测试数据')
plt.plot(data.index[:len(train\_predict)], train\_predict, label='训练集预测')
plt.plot(data.index[len(train\_predict):len(train\_predict) + len(test\_predict)], test\_predict, label='测试集预测')
plt.xlabel('日期')
plt.ylabel('温度 (°C)')
plt.title('温度预测')
plt.legend()
plt.show()

**图9 温度预测可视化结果**
1) 真实值与预测值对比图:
绘制真实值与预测值的散点图,以直观比较模型的预测效果和真实数据之间的关系。
\# 真实值与预测值对比图
plt.figure(figsize=(12, 6))
plt.scatter(y\_test, test\_predict, label='测试数据')
plt.xlabel('真实值')
plt.ylabel('预测值')
plt.title('真实值 vs 预测值')
plt.legend()
plt.show()
!
**图10 真实值和预测值散点图**
1. #### **模型加载**
保存训练好的模型。
实现模型加载功能,以便进行后续预测。
如以下代码:
*# 保存模型*
model.save('temperature\_prediction\_model.h5')

**图11 模型保存**
1. #### **气温预测**
使用训练好的模型对指定时间点的气温进行预测。加载训练好的LSTM模型并对指定目标日期的温度进行预测。具体步骤包括读取温度数据文件,验证数据范围,提取目标日期之前的10小时数据,并进行标准化处理。然后,加载预训练的LSTM模型,对标准化后的数据进行预测,并将预测结果反标准化为原始温度值。最后,函数返回目标日期的预测温度。预测结果如图12,代码如下:
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import load\_model
def load\_and\_predict(model\_path, data\_path, target\_date\_str):
` `*# 读取数据*
` `data = pd.read\_excel(data\_path, parse\_dates=['date'], index\_col='date')
` `*# 打印数据集的范围*
` `print("数据集范围:")
` `print(f"开始日期: {data.index.min()}")
` `print(f"结束日期: {data.index.max()}")
` `*# 转换目标日期*
` `target\_date\_dt = pd.to\_datetime(target\_date\_str)
` `print(f"目标日期: {target\_date\_dt}")
` `*# 确保有足够的数据*
` `start\_time = target\_date\_dt - pd.Timedelta(hours=10)
` `end\_time = target\_date\_dt - pd.Timedelta(hours=1)
` `print(f"需要的数据范围: 从 {start\_time} 到 {end\_time}")
` `if start\_time < data.index.min():
` `raise ValueError("数据不足以进行预测。")
` `*# 提取目标日期之前的10小时数据*
` `past\_hours\_data = data.loc[start\_time:end\_time]
` `print(f"提取到的数据:\n{past\_hours\_data}")
` `if past\_hours\_data.empty:
` `raise ValueError("时间范围内没有足够的数据进行预测。")
` `*# 标准化处理*
` `scaler = MinMaxScaler(feature\_range=(0, 1))
` `temperature\_scaled = scaler.fit\_transform(data['temperature'].values.reshape(-1, 1))
` `*# 创建数据集函数*
` `def create\_dataset(data, time\_step=1):
` `X = []
` `for i in range(len(data) - time\_step):
` `X.append(data[i:(i + time\_step), 0])
` `return np.array(X)
` `time\_step = 10 *# 时间步长
` `# 加载模型*
` `model = load\_model(model\_path)
` `*# 标准化过去10小时数据并调整形状*
` `past\_hours\_data\_scaled = scaler.transform(past\_hours\_data['temperature'].values.reshape(-1, 1))
` `past\_hours\_data\_scaled = past\_hours\_data\_scaled.reshape(1, time\_step, 1)
` `*# 进行预测*
` `predicted\_temperature\_scaled = model.predict(past\_hours\_data\_scaled)
` `predicted\_temperature = scaler.inverse\_transform(predicted\_temperature\_scaled)
` `return predicted\_temperature[0][0]
*# 使用*
model\_path = 'temperature\_prediction\_model.h5'
data\_path = 'temperature\_data-2023-2024.xlsx'
target\_date\_str = '2024-06-03 23:00:00'
predicted\_temperature = load\_and\_predict(model\_path, data\_path, target\_date\_str)
print(f"预测的{target\_date\_str}的温度为: {predicted\_temperature:.2f} °C")


**图12 预测结果图**
1. # **结果分析**
通过上述步骤,我成功构建并训练了一个LSTM神经网络模型来预测孝感市的气温。模型在训练集和测试集上的表现如下:
- 训练集 MAE: 1.058
- 训练集 RMSE: 1.527
- 测试集 MAE: 1.663
- 测试集 RMSE: 2.023
从误差指标可以看出,模型在训练集和测试集上的误差较小,表明模型在捕捉气温变化方面表现较好。对模型预测结果的具体分析如下:
1) **预测与真实值对比**: 从温度预测可视化结果中,可以看到模型的预测值(蓝色和橙色曲线)与真实值(绿色和红色曲线)基本一致,说明模型能够较好地捕捉到气温变化的趋势。
1. 训练集预测结果与真实值高度吻合,表明模型能够很好地学习到训练数据中的规律。
1. 测试集预测结果与真实值也较为接近,虽然在某些时刻存在较大偏差,但整体趋势相符,表明模型具有一定的泛化能力。

1) 训练和验证损失: 从训练和验证损失的曲线中,可以观察到随着训练轮次的增加,损失逐渐减小,且训练损失和验证损失较为接近,表明模型没有出现过拟合或欠拟合的问题。
1. 训练损失在前几轮快速下降,后期趋于平稳,说明模型逐渐收敛。
1. 验证损失与训练损失的曲线相似,表明模型在未见过的数据上的表现与训练数据相似,具有较好的泛化能力。

1) 真实值与预测值对比散点图: 从散点图中,可以看到真实值和预测值大致分布在对角线上,表明模型的预测值与真实值之间有较强的相关性。
1. 散点图中点的分布较为集中,表明模型的预测误差较小。
1. 散点图中部分点偏离对角线,说明在某些情况下,模型的预测误差较大,这可能是由于气温变化的复杂性和数据集规模有限导致的。
!
1) **模型预测示例:** 使用训练好的模型对特定时间点的气温进行预测,预测结果如下:
1. 目标日期:2024-06-03 23:00:00
1. 预测温度:实际预测值(如图12所示)
1. # **实验总结**
通过本实验,我成功应用LSTM神经网络模型对孝感地区的气温进行了有效预测。实验结果表明,LSTM模型在处理时间序列数据方面具有较强的能力,能够较准确地预测未来气温变化。本实验不仅提升了我对LSTM模型的理解和应用能力,也为气象数据分析提供了一个有效的方法和工具。
实验结果显示,模型在训练集和测试集上的MAE和RMSE较为一致,说明模型没有过拟合或欠拟合问题。模型能够捕捉到气温数据中的趋势和季节性特征,预测效果较好。在未来工作中,可以考虑引入更多的气象数据,尝试不同的神经网络架构和参数设置,研究更长时间范围的气温预测,并将模型部署到实际应用中。通过不断的探索和改进,LSTM模型在气温预测中的应用将更加广泛和深入,为社会生产生活提供更有力的支持。
在数据处理和分析阶段,我学习了如何使用各种软件和工具来处理实验数据。这不仅包括数据的统计分析,还涉及数据的可视化表达。这些技能对我今后的学习和工作有很大帮助,也让我深刻理解了数据在实验研究中的重要性。通过对实验数据的反复分析和验证,增强了我的逻辑思维能力和数据处理能力。以下是我的具体实验收获:
1) **LSTM模型的有效**:本次实验利用LSTM神经网络模型对孝感地区的气温进行了预测,结果表明LSTM模型能够很好地捕捉气温数据的时间序列特征。LSTM通过其内置的记忆单元和遗忘机制,能够有效处理长期依赖关系,使得预测结果更为准确。实验中训练集的MAE和RMSE分别为0.787和1.169,测试集的MAE和RMSE分别为0.772和1.122,表明模型在训练集和测试集上的表现较为一致,没有出现过拟合或欠拟合的问题。
1) **数据处理和模型构建:**实验过程中,我对气温数据进行了预处理,包括缺失值处理、移动平均线计算以及季节性分解分析。数据的标准化处理进一步提升了模型训练的效果。构建的LSTM神经网络模型包含两层LSTM层和适当的Dropout层,有效避免了过拟合问题,并通过优化器Adam和均方误差损失函数进行训练,取得了较好的效果。
3) **预测结果的可视化与验证:**实验结果通过可视化手段进行展示,包括损失曲线、预测结果与真实数据的对比图,以及真实值与预测值的散点图。这些可视化结果直观展示了模型的预测能力和稳定性。从可视化结果中可以看出,预测曲线和真实曲线高度吻合,模型能够准确捕捉气温的变化趋势和季节性特征,预测结果具有较高的可信度。
4) **实验意义和应用前景:**本次实验不仅提升了我对LSTM模型的理解和应用能力,也为气象数据分析提供了一个有效的方法和工具。气温预测在农业、能源、环境监测等领域具有重要的应用价值,准确的气温预测能够帮助相关部门提前做好应对措施,减少自然灾害带来的损失。未来可以引入更多的气象数据,如湿度、风速、降雨量等,进一步提高模型的预测精度。同时,可以尝试不同的神经网络架构和参数设置,研究更长时间范围的气温预测,并将模型部署到实际应用中,为社会生产生活提供更有力的支持。
5) **未来改进方向:**我会考虑引入外部因素,如地理信息、历史天气事件等,进一步丰富模型输入,提升预测精度。探索混合模型,将LSTM与其他机器学习算法结合,利用各自的优势,提高整体预测性能。研究模型在不同季节、不同时间段的表现,进一步优化模型参数,使其具有更强的适用性。
总的来说,此次实验不仅让我掌握了丰富的实验技术和知识,还让我在自主学习、团队合作、解决问题、数据分析和科学写作等多方面得到了全面提升。实验过程中的每一个细节、每一次思考、每一份努力都使我受益匪浅。这次实验经历将成为我未来学习和研究工作中的宝贵财富,也激励我在今后的学习和科研道路上不断探索和进步。
2
[ref1]: data:image/png;base64,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 "year-真实值vs预测值"