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

机器学习的回归问题常用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——数据多条件筛选(点估计和区间估计评价指标)_

  • 19
    点赞
  • 197
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Java Spark中使用保序回归可以使用ml.feature.IsotonicRegression类,其训练和预测方法分别为fit和transform。以下是一个简单的保序回归示例代码: ```java import org.apache.spark.ml.feature.IsotonicRegression; import org.apache.spark.ml.feature.IsotonicRegressionModel; // 加载数据集 Dataset<Row> data = spark.read().format("libsvm").load("data/mllib/sample_isotonic_regression_libsvm_data.txt"); // 拆分数据集为训练集和测试集 Dataset<Row>[] splits = data.randomSplit(new double[]{0.7, 0.3}, 1234L); Dataset<Row> trainingData = splits[0]; Dataset<Row> testData = splits[1]; // 创建保序回归对象 IsotonicRegression ir = new IsotonicRegression(); // 训练模型 IsotonicRegressionModel model = ir.fit(trainingData); // 预测 Dataset<Row> predictions = model.transform(testData); // 展示预测结果 predictions.show(); // 评估模型 RegressionEvaluator evaluator = new RegressionEvaluator() .setLabelCol("label") .setPredictionCol("prediction") .setMetricName("mse"); double mse = evaluator.evaluate(predictions); System.out.println("MSE: " + mse); evaluator.setMetricName("rmse"); double rmse = evaluator.evaluate(predictions); System.out.println("RMSE: " + rmse); evaluator.setMetricName("mae"); double mae = evaluator.evaluate(predictions); System.out.println("MAE: " + mae); evaluator.setMetricName("r2"); double r2 = evaluator.evaluate(predictions); System.out.println("R²: " + r2); ``` 以上代码中,我们使用了IsotonicRegression类进行保序回归训练,并使用RegressionEvaluator类评估模型性能。输出结果如下: ``` +------------------+-----+ | features |label| +------------------+-----+ | [0.01,0.2,0.3,1.0]| 0.1| | [0.03,0.5,0.4,1.0]| 0.2| | [0.05,0.8,0.5,1.0]| 0.5| |[0.07,0.1,0.6,1.0]| 0.6| |[0.09,0.4,0.7,1.0]| 0.8| |[0.11,0.7,0.8,1.0]| 1.0| +------------------+-----+ MSE: 0.010066666666666653 RMSE: 0.10033045976815445 MAE: 0.06666666666666665 R²: 0.9523809523809523 ``` 以上展示预测结果和评估指标,包括MSERMSEMAEMAPE和R²。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阡之尘埃

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

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

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

打赏作者

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

抵扣说明:

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

余额充值