写一段python代码,读取一个csv文件,该文件没有表头,第一列为时间编号,编号以1,2,3……这样自然数的形式出现,第二列为充电量数值,将该数据集的前90%划分为训练集,其余部分设置为测试集,利用SVR模型预测该时间序列,并打印rmse作为评价指标,并分别绘制训练集的真实值和预测值图片以及测试集的真实值和预测值图片,两张图片的横坐标单位为time/h,纵坐标单位为kwh
时间: 2024-03-01 14:55:51 浏览: 54
以下是一个实现上述要求的 Python 代码:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR
from sklearn.metrics import mean_squared_error
# 读取 csv 文件并转换为 numpy 数组
data = pd.read_csv('data.csv', header=None)
data = data.values
# 划分训练集和测试集
train_size = int(len(data) * 0.9)
train_data, test_data = data[:train_size], data[train_size:]
# 分离输入特征和标签
train_X, train_y = train_data[:, 0], train_data[:, 1]
test_X, test_y = test_data[:, 0], test_data[:, 1]
# 创建 SVR 模型并进行训练
model = SVR(kernel='rbf', C=1e3, gamma=0.1)
model.fit(train_X.reshape(-1, 1), train_y)
# 在训练集和测试集上进行预测
train_y_pred = model.predict(train_X.reshape(-1, 1))
test_y_pred = model.predict(test_X.reshape(-1, 1))
# 计算 RMSE
train_rmse = np.sqrt(mean_squared_error(train_y, train_y_pred))
test_rmse = np.sqrt(mean_squared_error(test_y, test_y_pred))
print('训练集 RMSE:', train_rmse)
print('测试集 RMSE:', test_rmse)
# 绘制训练集的真实值和预测值图像
plt.plot(train_X, train_y, label='真实值')
plt.plot(train_X, train_y_pred, label='预测值')
plt.xlabel('time/h')
plt.ylabel('kwh')
plt.title('训练集的真实值和预测值')
plt.legend()
plt.show()
# 绘制测试集的真实值和预测值图像
plt.plot(test_X, test_y, label='真实值')
plt.plot(test_X, test_y_pred, label='预测值')
plt.xlabel('time/h')
plt.ylabel('kwh')
plt.title('测试集的真实值和预测值')
plt.legend()
plt.show()
```
需要注意的是,这里的 `data.csv` 文件应该位于当前 Python 文件所在的目录下,或者你需要指定正确的文件路径。此外,这个代码使用了 Scikit-learn 库中的 `SVR` 模型来进行时间序列的预测,将训练集和测试集分别绘制了真实值和预测值的图像,并计算了 RMSE 作为评价指标。如果需要修改模型参数或者绘图方式,可以根据自己的需求进行调整。
阅读全文