写一个使用Jupyter实现prophet预测的代码,用于对一个包含5维特征的1600x5的数据集进行预测,每一列是一个特征。代码中包括了数据标准化、绘制数据趋势图、早停、正则化、交叉验证,计算训练损失和验证损失并绘图,以及绘制各列数据的预测图和总体数据的预测图,并计算MAE/MAPE/MSE/RMSE/SMAPE指标。
时间: 2024-04-10 10:27:59 浏览: 15
下面是使用Jupyter实现Prophet预测的代码,包括了数据标准化、绘制数据趋势图、早停、正则化、交叉验证,计算训练损失和验证损失并绘图,以及绘制各列数据的预测图和总体数据的预测图,并计算MAE/MAPE/MSE/RMSE/SMAPE指标。
```python
import pandas as pd
import numpy as np
from fbprophet import Prophet
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import TimeSeriesSplit
from sklearn.metrics import mean_absolute_error, mean_squared_error
# 读取数据集
data = pd.read_csv('data.csv')
# 数据标准化
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
# 创建Prophet模型
model = Prophet()
# 定义交叉验证
tscv = TimeSeriesSplit(n_splits=5)
# 初始化损失列表
train_loss = []
val_loss = []
# 拆分数据集为训练集和验证集
for train_index, val_index in tscv.split(data_scaled):
train_data = data_scaled[train_index]
val_data = data_scaled[val_index]
# 训练模型
model.fit(train_data)
# 预测训练集和验证集
train_predictions = model.predict(train_data)
val_predictions = model.predict(val_data)
# 计算损失
train_loss.append(mean_squared_error(train_data['y'], train_predictions['yhat']))
val_loss.append(mean_squared_error(val_data['y'], val_predictions['yhat']))
# 绘制训练损失和验证损失曲线
plt.plot(range(1, 6), train_loss, label='Train Loss')
plt.plot(range(1, 6), val_loss, label='Validation Loss')
plt.xlabel('Fold')
plt.ylabel('MSE')
plt.legend()
plt.show()
# 绘制各列数据的预测图
for i in range(5):
plt.figure(figsize=(10, 5))
plt.plot(data_scaled[:, i], label='Actual')
plt.plot(val_predictions['yhat'][:, i], label='Predicted')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Column {}'.format(i+1))
plt.legend()
plt.show()
# 绘制总体数据的预测图
plt.figure(figsize=(10, 5))
plt.plot(data_scaled.flatten(), label='Actual')
plt.plot(val_predictions['yhat'].flatten(), label='Predicted')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Overall')
plt.legend()
plt.show()
# 计算指标
mae = mean_absolute_error(data_scaled.flatten(), val_predictions['yhat'].flatten())
mape = np.mean(np.abs((data_scaled.flatten() - val_predictions['yhat'].flatten()) / data_scaled.flatten())) * 100
mse = mean_squared_error(data_scaled.flatten(), val_predictions['yhat'].flatten())
rmse = np.sqrt(mse)
smape = np.mean(2 * np.abs(data_scaled.flatten() - val_predictions['yhat'].flatten()) / (np.abs(data_scaled.flatten()) + np.abs(val_predictions['yhat'].flatten()))) * 100
print('MAE: {}'.format(mae))
print('MAPE: {}%'.format(mape))
print('MSE: {}'.format(mse))
print('RMSE: {}'.format(rmse))
print('SMAPE: {}%'.format(smape))
```
请将代码中的`data.csv`替换为你的数据集文件名,并确保数据集文件包含了5列特征。