在使用model = ARIMA(train_data_arr, order=(0, 1, 1))进行训练后,想要对在测试集test_data_arr上进行预测,并绘制预测值和真实值的图,怎么做
时间: 2024-02-13 20:59:55 浏览: 81
在使用ARIMA模型进行训练后,可以使用`forecast`方法对测试集进行预测,并使用Matplotlib库绘制预测值和真实值的图。下面是一个示例代码:
```python
import pandas as pd
import numpy as np
from statsmodels.tsa.arima_model import ARIMA
import matplotlib.pyplot as plt
# 训练 ARIMA 模型
model = ARIMA(train_data_arr, order=(0, 1, 1))
model_fit = model.fit(disp=0)
# 对测试集进行预测
predictions = model_fit.forecast(steps=len(test_data_arr))[0]
# 绘制预测值和真实值的图
plt.plot(test_data_arr, label='true')
plt.plot(predictions, label='predicted')
plt.legend()
plt.show()
```
在这个例子中,我们首先训练了ARIMA模型,并使用`forecast`方法对测试集进行预测,得到预测结果`predictions`。然后,我们使用Matplotlib库绘制预测值和真实值的图,其中`plot`函数用于绘制折线图,`label`用于设置图例,`legend`用于显示图例,`show`用于显示图形。
相关问题
在使用model = ARIMA(train_data_arr, order=(0, 1, 1))进行训练后,想要对在测试集test_data_arr上使用函数model.fit().predict()来进行预测,并打印真实值和预测值的对照表,计算相对误差和残差,并将其导出到一张excel表中,该怎么做
可以按照以下步骤来实现:
1. 使用ARIMA模型对训练集进行训练,即执行model = ARIMA(train_data_arr, order=(0, 1, 1))。
2. 对测试集进行预测,即执行predictions = model.fit().predict(start=len(train_data_arr), end=len(train_data_arr)+len(test_data_arr)-1, typ='levels')。
3. 创建一个DataFrame对象来存储真实值和预测值,即执行results = pd.DataFrame({'Actual': test_data_arr, 'Predicted': predictions})。
4. 计算相对误差,即执行results['Error'] = (results['Actual'] - results['Predicted']) / results['Actual']。
5. 计算残差,即执行results['Residuals'] = results['Actual'] - results['Predicted']。
6. 将结果导出到Excel表中,即执行results.to_excel('results.xlsx')。
完整代码如下所示:
```
import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
# 训练集和测试集数据
train_data_arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
test_data_arr = [11, 12, 13, 14, 15]
# 使用ARIMA模型进行训练
model = ARIMA(train_data_arr, order=(0, 1, 1))
# 对测试集进行预测
predictions = model.fit().predict(start=len(train_data_arr), end=len(train_data_arr)+len(test_data_arr)-1, typ='levels')
# 创建一个DataFrame对象来存储真实值和预测值
results = pd.DataFrame({'Actual': test_data_arr, 'Predicted': predictions})
# 计算相对误差
results['Error'] = (results['Actual'] - results['Predicted']) / results['Actual']
# 计算残差
results['Residuals'] = results['Actual'] - results['Predicted']
# 将结果导出到Excel表中
results.to_excel('results.xlsx')
```
注意:以上代码仅是示例,具体实现需要根据自己的数据和需求进行调整。
在使用model = ARIMA(train_data, order=(0, 1, 1))进行训练时,报错:ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).怎么解决?
该错误通常是由于Pandas数据类型不受支持所导致的。解决此问题的方法是将Pandas数据转换为NumPy数组。可以使用`values`属性或`to_numpy()`方法将Pandas数据类型转换为NumPy数组。
例如,假设您有一个名为`train_data`的Pandas DataFrame对象,您可以使用以下代码将其转换为NumPy数组:
```python
import numpy as np
import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
train_data = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
# 将 Pandas 数据转换为 NumPy 数组
train_data_arr = np.asarray(train_data)
# 训练 ARIMA 模型
model = ARIMA(train_data_arr, order=(0, 1, 1))
```
在这个例子中,我们首先将Pandas数据转换为NumPy数组,然后将其传递给ARIMA模型进行训练。
另外,如果您的Pandas DataFrame对象中包含非数值类型的数据列,则需要将其删除或转换为数值类型,否则会出现与数据类型相关的错误。
阅读全文