写一段利用svr模型预测单变量时间序列的python代码,要求读取单列csv文件获取数据集,并将前70%的数据划分为训练集,其余作为测试集,并计算rmse并打印,分别绘制出训练集和测试集的真实值和预测值曲线
时间: 2023-09-18 08:11:17 浏览: 116
以下是利用SVR模型预测单变量时间序列的Python代码:
```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
# 读取数据集
data = pd.read_csv('data.csv', usecols=[1])
# 将数据集按照70%/30%的比例划分为训练集和测试集
train_size = int(len(data) * 0.7)
train_data, test_data = data[:train_size], data[train_size:]
# 将数据集转换为X和y
def create_dataset(dataset, look_back=1):
data_X, data_y = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
data_X.append(a)
data_y.append(dataset[i + look_back, 0])
return np.array(data_X), np.array(data_y)
look_back = 1
train_X, train_y = create_dataset(train_data.values, look_back)
test_X, test_y = create_dataset(test_data.values, look_back)
# 创建SVR模型并拟合数据
model = SVR()
model.fit(train_X, train_y)
# 进行预测并计算RMSE
train_predict = model.predict(train_X)
test_predict = model.predict(test_X)
train_rmse = np.sqrt(mean_squared_error(train_y, train_predict))
test_rmse = np.sqrt(mean_squared_error(test_y, test_predict))
print("Train RMSE: %.2f" % train_rmse)
print("Test RMSE: %.2f" % test_rmse)
# 绘制训练集和测试集的真实值和预测值曲线
plt.plot(train_data.index[look_back:], train_y, label='Train True')
plt.plot(train_data.index[look_back:], train_predict, label='Train Predict')
plt.plot(test_data.index[look_back:], test_y, label='Test True')
plt.plot(test_data.index[look_back:], test_predict, label='Test Predict')
plt.legend()
plt.show()
```
说明:
- `data.csv` 文件是包含单列数据的 CSV 文件。
- `train_size` 变量定义了训练集和测试集的比例。
- `create_dataset` 函数将数据集转换为 X 和 y,并将数据集按照给定的 `look_back` 参数进行切割。
- `train_X`、`train_y`、`test_X` 和 `test_y` 分别是训练集和测试集的 X 和 y,用于训练和测试模型。
- `SVR` 类是支持向量机回归模型,可以用于预测连续变量。
- `model.fit` 方法用于拟合训练集数据。
- `model.predict` 方法用于预测训练集和测试集数据。
- `mean_squared_error` 函数用于计算均方根误差(RMSE)。
- `plt.plot` 函数用于绘制真实值和预测值曲线。
阅读全文