机器学习的回归问题常用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:有关于区间估计的评价指标的计算 ,可以看我上篇文章: