回歸算法的評估指標

回歸問題是機器學習要解決的四大問題之一,在我們的生活中也存在著很多回歸問題。比如某一地區的房價預測,某一個學生高考成績的預測,某一地區感染病毒人數的預測,某一公司2020年營業收入的預測等等。從以上的例子中,我們可知回歸問題的目標是預測一個數值或者一個區間數值。

回歸算法:對歷史數據進行擬合,形成擬合方程。接下來使用該方程對新數據進行預測。下圖中紅線表示的是一元數據的擬合方程,如果數據是二元數據,那么它的擬合方程就是一個擬合平面,對于更高維的數據,它的擬合方程將更加復雜。


Regression function.png

回歸算法的評估指標:

對于回歸算法,我們評價它的好壞,就是看它的預測結果與我們的真實結果的差異大小。在回歸算法中,我們最常用的四種評估指標分別是:平均絕對值誤差,均方誤差,均方根誤差,可決系數。接下來,我們以boston房價數據集為例,來詳細說明每一個評估指標。并分別采用python的numpy庫和Sklearn.metrics模塊下專有的計算方法來計算這些指標的具體數值。

1.平均絕對值誤差(MAE

計算每一個樣本的預測值和真實值的差的絕對值,然后求和再取平均值。其公式如下,y_i為真實值,f(x_i)與算法的預測值。
MAE = \frac{1}{m}\sum_{i=1}^m(|y_i - f(x_i)|)
導入boston數據集,建立基本的線性回歸模型,并使用模型對測試樣本進行預測。

#導入數據分析的常用工具包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline

#導入boston房價數據集
boston = datasets.load_boston()
#導入特征
X = boston.data
#導入標簽
y = boston.target

#對原始數據進行切分
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 1)

#建立線性回歸模型
from sklearn.linear_model import LinearRegression
LR = LinearRegression()
#對訓練集進行訓練
LR.fit(X_train,y_train)
#對測試集進行預測
prediction = LR.predict(X_test)

使用MAE指標對LR模型的預測結果進行評估。
Python方法:

MAE_1 = np.mean(abs(y_test - prediction))
print(MAE_1)
[out]:3.3446655035987476

使用sklearn.metrics模塊:

from sklearn.metrics import mean_absolute_error
MAE_2 = mean_absolute_error(y_test,prediction)
print(MAE_2)
[out]:3.3446655035987476

可以看出MAE的值為3.3447。

2.均方誤差(MSE)

計算每一個樣本的預測值與真實值差的平方,然后求和再取平均值。
MSE = \frac{1}{m}\sum_{i=1}^m(y_i - f(x_i))^2
下面使用MSE指標來評估該模型的效果。
python方法:

MSE_1 = np.mean((y_test - prediction)**2)
print(MSE_1)
[out]:19.831323672063235

使用sklearn.metrics模塊:

from sklearn.metrics import mean_squared_error
MSE_2 = mean_squared_error(y_test,prediction)
print(MSE_2)
[out]:19.831323672063235

可以看出MSE的值為19.8313。

3.均方根誤差(RMSE

均方根誤差就是在均方誤差的基礎上再開方。
RMSE = \sqrt{\frac{1}{m}\sum_{i=1}^m(y_i - f(x_i))^2}
下面使用RMSE來評估該模型的效果。
python方法:

RMSE_1 = np.sqrt(np.mean((y_test - prediction)**2))
print(RMSE_1)
[out]:4.45323743719816

使用sklearn.metrics模塊:
sklearn.metrics模塊中沒有直接計算均方根誤差的函數,所以需要先計算均方誤差,然后再開根號。

from sklearn.metrics import mean_squared_error
RMSE_2 = np.sqrt(mean_squared_error(y_test,prediction))
print(RMSE_2)
[out]:4.45323743719816

可以看出RMSE的值為4.4532。

4.可決系數(R^2

可決系數R^2的值為0~1之間的值。R^2越接近于1,說明模型的效果越好,越接近于0,說明的模型效果越差,當然R^2也存在負值,此時說明模型的效果非常的差。公式中\overline yy的平均值。
R^2 = 1 - \frac{MSE(y_i,f(x_i))}{\frac{1}{m}\sum_{i=1}^m(y_i - \overline y)^2}
python方法:

R_1 = 1 - np.mean((y_test - prediction)**2)/np.mean((y_test - np.mean(y_test)**2))
print(R_1)
[out]:0.7836295385076281

使用sklearn.metrics模塊

from sklearn.metrics import r2_score
R_2 = r2_score(y_test,prediction)
print(R_2)
[out]:0.7836295385076281

可以看出R^2的值為0.7836。

小結:

1.MAE, MSE, RMSE可以準確的計算出預測結果和真實的結果的誤差大小,但卻無法衡量模型的好壞程度。但是這些指標可以指導我們的模型改進工作,如調參,特征選擇等。
2.R^2的結果可以很清楚的說明模型的好壞,該值越接近于1,表明模型的效果越好。該值越接近于0,表明模型的效果越差。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。