回歸模型是機器學習中很重要的一類模型,不同於常見的分類模型,回歸模型的性能評價指標跟分類模型也相差很大,這里簡單基於工作中的一點實踐來記錄一下基於sklearn庫計算回歸模型中常用的四大評價指標主要包括:explained_variance_score、mean_absolute_error、mean_squared_error、r2_score,詳細的解釋已經在代碼注釋中了,就不再多解釋了,具體實踐如下:
1、可解釋方差(explained_variance_score)
解釋回歸模型的方差得分,其值取值范圍是[0,1],越接近於1說明自變量越能解釋因變量的方差變化,值越小則說明效果越差。
y_hat :預測值, y :真實值, var :方差
在理解“可解釋方差”前,需要先了解下方差:離平均的平方距離的平均。方差很難理解,其中的一個原因是很難可視化。可解釋方差並不意味着解釋了方差,僅僅意味着我們可以使用一個或多個變量來比以前更准確地預測事物。在許多模型中,如果X與Y相關,X可以說是”解釋”了Y中的方差,即使X並不真正導致Y。在下面的例子中,Y的方差的80%是由於X,剩下的20%由其他的一些Error導致的。由於X與Error非相關的z-score值,路徑系數等於與Y的相關系數。
2、平均絕對誤差(mean_absolute_error)
平均絕對誤差(Mean Absolute Error,MAE),用於評估預測結果和真實數據集的接近程度的程度,其值越小說明擬合效果越好。平均絕對誤差 (MAE)是最容易理解的回歸誤差指標。 我們將為每個數據點計算殘差,只取每個殘差的絕對值,以使負殘差和正殘差不會被抵消。 然后,我們取所有這些殘差的平均值。 有效地,MAE描述了殘差的典型大小。 MAE優缺點:雖然平均絕對誤差能夠獲得一個評價值,但是你並不知道這個值代表模型擬合是優還是劣,只有通過對比才能達到效果。
3、均方誤差(mean_squared_error)
均方差(Mean squared error,MSE),該指標計算的是擬合數據和原始數據對應樣本點的誤差的平方和的均值,其值越小說明擬合效果越好。由於MSE與我們的目標變量的量綱不一致,為了保證量綱一致性,我們需要對MSE進行開方,即均方根誤差(RMSE):均方根誤差 Root Mean Squared Error(RMSE)
均方根誤差RMSE(root-mean-square error), 均方根誤差亦稱標准誤差,它是觀測值與真值偏差的平方與觀測次數比值的平方根。均方根誤差是用來衡量觀測值同真值之間的偏差。標准誤差對一組測量中的特大或特小誤差反映非常敏感,所以,標准誤差能夠很好地反映出測量的精密度。可用標准誤差作為評定這一測量過程精度的標准。
這不就是MSE開個根號么。有意義么?其實實質是一樣的。只不過用於數據更好的描述。例如:要做房價預測,每平方是萬元,我們預測結果也是萬元。那么差值的平方單位應該是 千萬級別的。那我們不太好描述自己做的模型效果。我們的模型誤差是多少千萬?於是干脆就開個根號就好了。我們誤差的結果就跟我們數據是一個級別的,可在描述模型的時候就說,我們模型的誤差是多少萬元。
RMSE與MAE對比:RMSE相當於L2范數,MAE相當於L1范數。次數越高,計算結果就越與較大的值有關,而忽略較小的值,所以這就是為什么RMSE針對異常值更敏感的原因(即有一個預測值與真實值相差很大,那么RMSE就會很大)。
4、決定系數、R方(r2_score)
判定系數,其含義是也是解釋回歸模型的方差得分,其值取值范圍是[0,1],越接近於1說明自變量越能解釋因變量的方差變化,值越小則說明效果越差。又稱為the coefficient of determination。判斷的是預測模型和真實數據的擬合程度,最佳值為1,同時可為負值。如果結果是0,就說明我們的模型跟瞎猜差不多。如果結果是1。就說明我們模型無錯誤。如果結果是0-1之間的數,就是我們模型的好壞程度。如果結果是負數。說明我們的模型還不如瞎猜。
R方可以理解為因變量y中的變異性能能夠被估計的多元回歸方程解釋的比例,它衡量各個自變量對因變量變動的解釋程度,其取值在0與1之間,其值越接近1,則變量的解釋程度就越高,其值越接近0,其解釋程度就越弱。
一般來說,增加自變量的個數,回歸平方和會增加,殘差平方和會減少,所以R方會增大;反之,減少自變量的個數,回歸平方和減少,殘差平方和增加。為了消除自變量的數目的影響,引入了調整的R方。
Q:我知道r2_score
表示的是在總變量中模型解釋的百分比。但是explained_variance_score
和它有什么區別?
從公式的差別角度看:當殘差的均值為0時,它倆是一樣的。至於用哪個,就看你有沒有假設殘差均值為0。
#!usr/bin/env python #encoding:utf-8 from __future__ import division ''' __Author__:沂水寒城 功能:計算回歸分析模型中常用的四大評價指標 ''' from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score def calPerformance(y_true,y_pred): ''' 模型效果指標評估 y_true:真實的數據值 y_pred:回歸模型預測的數據值 explained_variance_score:解釋回歸模型的方差得分,其值取值范圍是[0,1],越接近於1說明自變量越能解釋因變量 的方差變化,值越小則說明效果越差。 mean_absolute_error:平均絕對誤差(Mean Absolute Error,MAE),用於評估預測結果和真實數據集的接近程度的程度 ,其其值越小說明擬合效果越好。 mean_squared_error:均方差(Mean squared error,MSE),該指標計算的是擬合數據和原始數據對應樣本點的誤差的 平方和的均值,其值越小說明擬合效果越好。 r2_score:判定系數,其含義是也是解釋回歸模型的方差得分,其值取值范圍是[0,1],越接近於1說明自變量越能解釋因 變量的方差變化,值越小則說明效果越差。 ''' model_metrics_name=[explained_variance_score, mean_absolute_error, mean_squared_error, r2_score] tmp_list=[] for one in model_metrics_name: tmp_score=one(y_true,y_pred) tmp_list.append(tmp_score) print ['explained_variance_score','mean_absolute_error','mean_squared_error','r2_score'] print tmp_list return tmp_list
結果如下:
['explained_variance_score', 'mean_absolute_error', 'mean_squared_error', 'r2_score']
[0.709825411300075, 4.719, 112.613, 0.6725361793319165]
參考文獻: