数据:每天间隔四小时的气温。(只有这些数据),基于这写历史数据,通过神经网络预测未来第二天的气温。请用Python给出详细准确的代码
时间: 2024-04-02 22:31:07 浏览: 58
好的,以下是我为您提供的代码:
```python
# 导入所需的库
import pandas as pd
import numpy as np
import tensorflow as tf
from sklearn.preprocessing import MinMaxScaler
# 读取数据
df = pd.read_csv('temperature.csv', header=None)
# 将数据转换成可以用于监督学习的格式
def series_to_supervised(data, n_in=4, n_out=8): # 输入4小时数据,输出2天数据
n_vars = 1 if type(data) is list else data.shape[1]
df = pd.DataFrame(data)
cols = list()
# 输入序列 (t-n, ... t-1)
for i in range(n_in, 0, -1):
cols.append(df.shift(i))
# 预测序列 (t, t+1, ... t+n)
for i in range(0, n_out):
cols.append(df.shift(-i))
# 组合所有列
agg = pd.concat(cols, axis=1)
# 去掉含有NaN的行
agg.dropna(inplace=True)
return agg.values
# 将数据转换成监督学习格式
reframed = series_to_supervised(df, 4, 8)
# 分割数据集为训练集和测试集
values = reframed.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
scaled = scaler.fit_transform(values)
n_train_hours = 365 * 24 * 2 # 两年的数据作为训练集
train = scaled[:n_train_hours, :]
test = scaled[n_train_hours:, :]
X_train, y_train = train[:, :-8], train[:, -8:]
X_test, y_test = test[:, :-8], test[:, -8:]
# 构建模型
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(64, activation='relu', input_dim=X_train.shape[1]))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(8))
model.compile(loss='mse', optimizer='adam')
# 训练模型
model.fit(X_train, y_train, epochs=50, batch_size=72, validation_data=(X_test, y_test), verbose=2, shuffle=False)
# 预测未来第二天的气温
test_input = test[-1, :-8].reshape((1, 4))
test_input_scaled = scaler.transform(test_input)
test_output = model.predict(test_input_scaled)
test_output = scaler.inverse_transform(test_output)
print('预测值为:', test_output)
```
需要注意的是,这里的数据存储在名为 "temperature.csv" 的文件中,每行代表一个时间点的气温。在代码中,我们将其转换成了监督学习的格式,使用前4小时的气温来预测未来2天的气温。模型使用了两个隐藏层,每层包含64个神经元,使用均方误差损失函数和 Adam 优化器进行训练。最后,我们使用最后四个小时的数据进行预测,并将预测结果反归一化得到最终的预测值。
阅读全文