迴歸模型的演算法效能評價

归去_来兮發表於2024-06-05

一、概述

在一般形式的迴歸問題中,會得到系列的預測值,它們與真實值(ground truth)的比較表徵了模型的預測能力,為有效量化這種能力,常見的效能評價指標有可解釋方差(EVS)、平均絕對誤差(MAE)、均方誤差(MSE)、均方根誤差(RMSE)、決定係數(R2)等。值得一提的是,迴歸問題分單輸出情形和多輸出情形,在多輸出情形下,可以對各維度結果進行平均計算或以不同的權重進行計算。

二、評價指標

1. 平均絕對誤差(Mean Absolute Error,MAE)

MAE是計算預測值與真實值之差的絕對值之和,再求平均。表示式為

\[MAE=\frac{1}{n}\sum_{i=1}^{n}{\left| y_i-\hat{y}_i \right|} \]

其中,\(y_i\)為真實值,\(\hat{y}_i\)為預測值。

2. 均方誤差(Mean Squared Error,MSE)

MSE是計算預測值與真實值之差的平方之和,再求平均。表示式為

\[MSE=\frac{1}{n}\sum_{i=1}^{n}{\left( y_i-\hat{y}_i \right)^{2}} \]

其中,\(y_i\)為真實值,\(\hat{y}_i\)為預測值。

3. 均方根誤差(Root Mean Squared Error,RMSE)

RMSE是對MSE作開方處理。表示式為

\[RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}{\left( y_i-\hat{y}_i \right)^{2}}} \]

其中,\(y_i\)為真實值,\(\hat{y}_i\)為預測值。

4. 決定係數(The Coefficient of Determination,R2)

R2表徵自變數對因變數的可解釋程度,從波動性的角度衡量了模型對資料的契合程度,取值範圍通常為[0,1]。值越接近於1,效能越好;值越接近於0,效能越差。表示式為

\[R^{2}=1-\frac{\sum_{i=1}^{n}{\left( y_i-\hat{y}_i \right)^{2}}}{\sum_{i=1}^{n}{\left( y_i-\bar{y}_i \right)^{2}}} \]

其中,\(\bar{y}=\frac{1}{n}\sum_{i=1}^{n}{y_i}\)\(y_i\)為真實值,\(\hat{y}_i\)為預測值。

5. 可解釋方差(Explained Variance Score,EVS)

EVS是模型的解釋方差得分,與決定係數R2作用一致,用以衡量從波動性角度解釋模型對資料的契合程度,取值範圍通常為[0,1]。值越接近於1,效能越好;值越接近於0,效能越差。表示式為

\[EVS=1-\frac{Var\{y-\hat{y}\}}{Var\{y\}} \]

其中,\(y_i\)為真實值,\(\hat{y}_i\)為預測值。

三、Python實現

import numpy as np
import sklearn.metrics as mr

## 單輸出情形
y_true = [[4],
          [5],
          [6],
          [7]]

y_pred = [[3],
          [4.2],
          [5],
          [6.3]]

print('\n 單輸出情形:')

print('平均絕對誤差MAE:',mr.mean_absolute_error(y_true, y_pred))
print('均方誤差MSE:',mr.mean_squared_error(y_true, y_pred))
print('均方根誤差RMSE:',np.sqrt(mr.mean_squared_error(y_true, y_pred)))
print('R2:',mr.r2_score(y_true, y_pred))
print('可解釋方差EVS:',mr.explained_variance_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average'))

print('\n----------')

## 多輸出情形
y_true = [[1, 2, 3],
          [3, 4, 5],
          [5, 6, 7]]

y_pred = [[1.2, 2, 3.6],
          [3.3, 4, 5.7],
          [5.4, 6, 7.8]]


print('\n 多輸出情形:')
print('平均絕對誤差MAE_平均:',mr.mean_absolute_error(y_true, y_pred))
print('均方誤差MSE:',mr.mean_squared_error(y_true, y_pred))
print('均方根誤差RMSE:',np.sqrt(mr.mean_squared_error(y_true, y_pred)))
print('R2: ', mr.r2_score(y_true, y_pred))
print('可解釋方差EVS:',mr.explained_variance_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average'))


'''
注:其中可加入multioutput引數屬性,multioutput='raw_values'是按維度計算指標值;multioutput=[p1,p2...,pn]是加權計算指標值。如
平均絕對誤差MAE_按維度:,mr.mean_absolute_error(y_true, y_pred,multioutput='raw_values')
平均絕對誤差MAE_加權:,mr.mean_absolute_error(y_true, y_pred,multioutput=[0.25,0.3,0.45])
'''



End.

相關文章