写一段python代码,读取一个csv文件,该文件的第一列为时间编号,编号以1,2,3……这样自然数的形式出现,第二列为充电量数值,将该数据集的前70%划分为训练集,其余部分设置为测试集,利用lstm模型预测该时间序列,并打印rmse作为评价指标,并分别绘制训练集的真实值和预测值图片以及测试集的真实值和预测值图片,两张图片的横坐标单位为time/h,纵坐标单位为kwh
时间: 2023-10-06 11:08:01 浏览: 170
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
以下是一个简单的示例代码:
```python
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
import matplotlib.pyplot as plt
# 读取CSV文件
df = pd.read_csv('data.csv', index_col=0)
# 分离训练集和测试集
train_size = int(len(df) * 0.7)
train, test = df.iloc[:train_size, :], df.iloc[train_size:, :]
# 数据归一化
scaler = MinMaxScaler()
train_scaled = scaler.fit_transform(train)
test_scaled = scaler.transform(test)
# 准备LSTM数据集
def prepare_data(data, lags=1):
X, y = [], []
for i in range(lags, len(data)):
X.append(data[i-lags:i, :])
y.append(data[i, 1])
return np.array(X), np.array(y)
lags = 10 # 时间序列的滞后值
X_train, y_train = prepare_data(train_scaled, lags=lags)
X_test, y_test = prepare_data(test_scaled, lags=lags)
# 定义LSTM模型
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(lags, 2)))
model.add(LSTM(50))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)
# 预测并计算RMSE
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
y_train_pred_actual = scaler.inverse_transform(np.concatenate((np.zeros((lags, 1)), y_train_pred)))
y_test_pred_actual = scaler.inverse_transform(np.concatenate((np.zeros((lags, 1)), y_test_pred)))
y_train_actual = scaler.inverse_transform(np.concatenate((np.zeros((lags, 1)), y_train.reshape(-1, 1))))
y_test_actual = scaler.inverse_transform(np.concatenate((np.zeros((lags, 1)), y_test.reshape(-1, 1))))
rmse_train = np.sqrt(np.mean((y_train_actual[lags:] - y_train_pred_actual[lags:])**2))
rmse_test = np.sqrt(np.mean((y_test_actual[lags:] - y_test_pred_actual[lags:])**2))
print('Train RMSE:', rmse_train)
print('Test RMSE:', rmse_test)
# 绘制训练集和测试集的真实值和预测值的图像
def plot_results(actual, pred, title):
plt.figure(figsize=(12, 6))
plt.plot(actual, label='Actual')
plt.plot(pred, label='Prediction')
plt.xlabel('Time/h')
plt.ylabel('kWh')
plt.title(title)
plt.legend()
plt.show()
plot_results(y_train_actual, y_train_pred_actual, 'Training Set')
plot_results(y_test_actual, y_test_pred_actual, 'Test Set')
```
需要注意的是,代码中的模型和参数仅供参考,具体的模型架构和参数需要根据实际情况进行调整。
阅读全文