用Python计算点估计预测评价指标(误差指标RMSE、MSE、MAE、MAPE) ,画图展示

本文介绍了一个用于评估机器学习回归模型的Python函数,该函数能够计算包括MAE、RMSE、MAPE和R2在内的多种评价指标,并展示了如何通过柱状图直观地比较不同模型的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

机器学习的回归问题常用RMSE,MSE, MAE,MAPE等评价指标,还有拟合优度R2。由于每次预测出来的预测值再去和原始数据进行误差评价指标的计算很麻烦,所以这里就直接给出他们五个指标的计算函数。把每次预测出来的值和真实值输入这个函数就可以得到上面这些指标,很方便。然后计算出来放一起还可以画柱状图

先放计算公式:

mse就是rmse的平方,公式是差不多的。


 Python计算代码:

import numpy as np
import pandas as pd
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error,r2_score

def evaluation(y_test, y_predict):
    mae = mean_absolute_error(y_test, y_predict)
    mse = mean_squared_error(y_test, y_predict)
    rmse = np.sqrt(mean_squared_error(y_test, y_predict))
    mape=(abs(y_predict -y_test)/ y_test).mean()
    r_2=r2_score(y_test, y_predict)
    return mae, rmse, mape,r_2  #mse

 这个函数就两个参数,一个测试集的真实值,一个预测的预测值,放入就可以计算上面的各种指标了。函数的返回值就是他们的mae,rmse,mape,R2的值。


画图展示

df_allmodel用来装不同模型的预测结果,然后计算四个误差指标。

我这里采用了四个不同的神经网络模型对比,DBN,RNN,CNN,MLP四个模型,df_allmodel每一列就是不同模型的预测结果,行就是不同的样本。

新建df_eval评价数据框,然后循环每一个模型的预测结果,用上面定义的函数计算评价指标,储存到df_eval里面。

df_eval=pd.DataFrame(columns=['MAE','RMSE','MAPE','R2'])
for i,col in enumerate(df_allmodel.columns):
    score=list(evaluation(y_test,np.array(df_allmodel[col])))
    df_eval.loc[col,:]=score
df_eval

 然后对df_eval进行画图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams ['font.sans-serif'] ='SimHei'               #显示中文
plt.rcParams ['axes.unicode_minus']=False               #显示负号


bar_width = 0.4
fig, ax = plt.subplots(2,2,figsize=(8,5))
for i,col in enumerate(df_eval.columns):
    n=int(str('22')+str(i+1))
    plt.subplot(n)
    df_col=df_eval[col]
    m =np.arange(len(df_col))
    
    #hatch=['-','/','+','x'],
    plt.bar(x=m,height=df_col.to_numpy(),width=bar_width,color=colors2)
    
    #plt.xlabel('Methods',fontsize=12)
    names=df_col.index
    plt.xticks(range(0, 4),names,fontsize=14)
    
    if col=='R2':
        plt.ylabel(r'$R^{2}$',fontsize=14)
    else:
        plt.ylabel(col,fontsize=14)
plt.tight_layout()
plt.savefig('柱状图.jpg',dpi=512)
plt.show()

这里画的是2*2的多子图,每一个小子图就是一个误差指标,x轴就是不同模型,y轴就是误差指标的数值大小。

就画出来了四个模型在四个误差指标上对比,还是很直观方便。


PS:有关于区间估计的评价指标的计算 ,可以看我上篇文章:

(Pandas数据分析33——数据多条件筛选(点估计和区间估计评价指标)_

<think>好的,我现在需要帮用户解决在ARIMA股票预测代码中添加MSEMAE和R²评估指标的问题。用户已经有一个现有的ARIMA代码,现在想增加这些评估指标。首先,我得回忆一下ARIMA模型的基本流程,以及如何在Python中实现这些指标计算。 首先,用户提到的评估指标是均方误差MSE)、平均绝对误差MAE)和决定系数(R²)。这些指标在机器学习中很常见,通常在回归任务中使用。我需要确认这些指标在时间序列预测中的适用性,尤其是R²,因为时间序列数据可能存在自相关性,但用户的需求是计算这些指标,所以应该直接按标准方法处理。 接下来,用户使用的是ARIMA模型,可能在用statsmodels库中的ARIMA类。通常,ARIMA模型拟合后会生成预测值,用户需要将预测值与测试集中的真实值进行比较。因此,步骤应该是:拟合模型,生成预测,然后计算指标。 我需要检查如何获取预测结果。ARIMA模型的predict()方法可以返回预测值,但要注意起始和结束的位置是否正确对应测试集。例如,如果测试集是某个时间段,预测的起始点应该从训练集结束后的下一个时间点开始,确保预测和测试集对齐。 然后,计算各个指标MSE可以用均方误差函数,MAE是平均绝对误差,R²是决定系数。Python中sklearn.metrics模块提供了这些函数,比如mean_squared_error、mean_absolute_error和r2_score。用户需要先导入这些函数,然后将真实值和预测值传入即可得到结果。 现在考虑用户的现有代码结构。用户可能已经将数据分为训练集和测试集,用ARIMA拟合训练集,然后预测测试集的时间段。例如,假设测试集有n个样本,预测结果应该是n个值,与测试集的真实值一一对应。需要确保两者的长度一致,否则计算指标时会出错。 可能的陷阱包括:预测的起始点是否正确,数据是否平稳,以及是否进行了差分转换。ARIMA模型在预测时会考虑差分,因此预测结果可能需要还原到原始数据尺度。如果用户的数据进行了差分处理,预测结果可能需要逆转换才能与原始测试集数据比较。否则,计算指标可能不准确。 例如,如果原始数据经过一阶差分,那么预测的值是差分后的,需要将预测值加上前一期的实际值来还原。如果用户没有处理这一点,那么直接比较会导致错误。因此,需要检查用户的代码是否包含差分的逆步骤。如果用户没有进行逆差分,那么在计算指标前必须进行还原,否则指标无法正确反映预测效果。 假设用户已经正确处理了差分和预测值的还原,那么接下来就是导入评估指标的函数,计算并输出结果。同时,用户可能需要可视化真实值和预测值的对比,如折线图,这有助于直观评估模型表现。 另外,引用中提到的引用[1]、[3]、[4]都涉及MSEMAE、R²的计算和可视化,这可能对用户有帮助。需要参考这些部分,确保代码示例的正确性。例如,引用[1]中的代码展示了如何计算MSE和绘图,引用[3]提到了评估函数和绘图函数,引用[4]则展示了R²的计算。 现在,整合这些信息,给出一个步骤清晰的代码示例。首先,导入必要的库:statsmodels中的ARIMA,sklearn中的评估指标,以及matplotlib用于绘图。然后,加载数据,划分训练集和测试集。接着,拟合ARIMA模型,生成预测。确保预测值与测试集对齐后,计算MSEMAE、R²,并输出结果。最后,绘制真实值与预测值的对比图。 需要注意ARIMA模型的参数(p,d,q)是否正确,这会影响预测结果。用户可能需要调优这些参数,但问题焦点是添加评估指标,所以假设参数已经确定。 总结步骤: 1. 导入所需的库和函数。 2. 准备数据,划分训练集和测试集。 3. 拟合ARIMA模型。 4. 进行预测,确保与测试集对齐。 5. 计算MSEMAE、R²。 6. 输出结果并可视化。 需要提醒用户注意数据预处理,特别是差分还原的问题,以及评估指标的意义。例如,MSE对大的误差更敏感,MAE则更平均,R²表示模型解释变量变化的能力。 最后,用户可能需要扩展功能,比如添加其他模型或优化参数,但当前问题仅限于添加评估指标,因此回答应聚焦于此,同时可以建议相关优化方向作为后续问题。</think>以下是在Python中使用ARIMA模型进行股票预测后添加评估指标的实现步骤和代码示例: ### 1. 评估指标实现代码 ```python from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # 划分训练集和测试集(假设数据已预处理为时间序列格式) train_size = int(len(data) * 0.8) train, test = data[0:train_size], data[train_size:] # 拟合ARIMA模型(需根据实际数据确定p,d,q参数) model = ARIMA(train, order=(5,1,0)) model_fit = model.fit() # 生成预测结果(注意要预测与测试集相同长度) predictions = model_fit.forecast(steps=len(test))[0] # 计算评估指标 mse = mean_squared_error(test, predictions) mae = mean_absolute_error(test, predictions) r2 = r2_score(test, predictions) print(f"MSE: {mse:.4f}") print(f"MAE: {mae:.4f}") print(f"R²: {r2:.4f}") # 可视化对比 plt.figure(figsize=(12,6)) plt.plot(test.index, test, label='True Values') plt.plot(test.index, predictions, label='Predicted Values', alpha=0.7) plt.title('ARIMA Stock Price Prediction') plt.legend() plt.show() ``` ### 2. 关键注意事项 1. **数据对齐**:确保预测结果与测试集长度一致,使用`forecast(steps=len(test))`精确控制预测步数[^2] 2. **差分还原**:如果模型包含差分参数(d>0),需通过`cumsum()`等方法还原预测值到原始数据尺度 3. **参数优化**:建议使用`auto_arima`自动选择最佳(p,d,q)参数组合以提高预测精度[^3] 4. **评估解读**: - MSE < 1 表示预测误差较小(数值单位与数据相关) - R² > 0.8 说明模型能解释80%以上的价格波动[^4] - MAE给出误差的绝对平均值 ### 3. 完整流程优化建议 ```python def evaluate_arima(data, order=(5,1,0)): # 分割数据集 train_size = int(len(data) * 0.8) train, test = data[:train_size], data[train_size:] # 模型训练与预测 model = ARIMA(train, order=order) model_fit = model.fit() predictions = model_fit.forecast(steps=len(test))[0] # 计算指标 metrics = { 'MSE': mean_squared_error(test, predictions), 'MAE': mean_absolute_error(test, predictions), 'R²': r2_score(test, predictions) } return metrics, predictions ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阡之尘埃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值