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