写一段python代码,读取一个csv文件,该文件的第一列为时间编号,第二列为充电量数值,将该数据集的前70%划分为训练集,其余部分设置为测试集,利用svr模型预测该时间序列,并打印rmse作为评价指标,并分别绘制训练集的真实值和预测值图片以及测试集的真实值和预测值图片,两张图片的横坐标单位为time/h,纵坐标单位为kwh
时间: 2023-09-20 14:04:32 浏览: 144
下面是一段实现你需求的Python代码,需要先安装pandas、scikit-learn、matplotlib等库:
``` python
import pandas as pd
import numpy as np
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
# 读取csv文件
df = pd.read_csv('data.csv', header=None, names=['time', 'value'])
# 划分训练集和测试集
train_size = int(len(df) * 0.7)
train_data = df.iloc[:train_size].copy()
test_data = df.iloc[train_size:].copy()
# 特征工程,将时间编号转换为数值格式
train_data['time'] = pd.to_datetime(train_data['time'])
train_data['time'] = train_data['time'].apply(lambda x: x.timestamp())
test_data['time'] = pd.to_datetime(test_data['time'])
test_data['time'] = test_data['time'].apply(lambda x: x.timestamp())
# 训练模型
regressor = SVR(kernel='rbf')
regressor.fit(train_data[['time']], train_data['value'])
# 预测数据
train_pred = regressor.predict(train_data[['time']])
test_pred = regressor.predict(test_data[['time']])
# 计算RMSE
train_rmse = np.sqrt(mean_squared_error(train_data['value'], train_pred))
test_rmse = np.sqrt(mean_squared_error(test_data['value'], test_pred))
print('Train RMSE: {:.3f}'.format(train_rmse))
print('Test RMSE: {:.3f}'.format(test_rmse))
# 绘制训练集真实值和预测值图像
plt.figure(figsize=(10, 5))
plt.plot(train_data['time'], train_data['value'], label='True Value')
plt.plot(train_data['time'], train_pred, label='Predicted Value')
plt.xlabel('Time/h')
plt.ylabel('kwh')
plt.legend()
plt.title('Training Data')
plt.show()
# 绘制测试集真实值和预测值图像
plt.figure(figsize=(10, 5))
plt.plot(test_data['time'], test_data['value'], label='True Value')
plt.plot(test_data['time'], test_pred, label='Predicted Value')
plt.xlabel('Time/h')
plt.ylabel('kwh')
plt.legend()
plt.title('Testing Data')
plt.show()
```
需要注意的是,这段代码假设时间编号是按照时间顺序排列的,并且时间编号的格式是类似于2022-01-01 00:00:00的字符串格式。如果你的时间编号格式不同,需要根据实际情况进行修改。
阅读全文