1. 程式人生 > >迴歸評價指標:均方誤差根(RMSE)和R平方(R2)

迴歸評價指標:均方誤差根(RMSE)和R平方(R2)

做迴歸分析,常用的誤差主要有均方誤差根(RMSE)和R-平方(R2)。

RMSE是預測值與真實值的誤差平方根的均值。這種度量方法很流行(Netflix機器學習比賽的評價方法),是一種定量的權衡方法。
””’ 均方誤差根 ”’
def rmse(y_test, y):
return sp.sqrt(sp.mean((y_test - y) ** 2))

R2方法是將預測值跟只使用均值的情況下相比,看能好多少。其區間通常在(0,1)之間。0表示還不如什麼都不預測,直接取均值的情況,而1表示所有預測跟真實結果完美匹配的情況。
””’ 與均值相比的優秀程度,介於[0~1]。0表示不如均值。1表示完美預測. ”’
def R2(y_test, y_true):
return 1 - ((y_test - y_true)**2).sum() / ((y_true - y_true.mean())**2).sum()

本例中使用一個2次函式加上隨機的擾動來生成500個點,然後嘗試1、2、100次方的多項式對該資料進行擬合。擬合的目的是使得根據訓練資料能夠擬合出一個多項式函式,這個函式能夠很好的擬合現有資料,並且能對未知的資料進行預測,擬合結果如下:
這裡寫圖片描述

1次項係數:[-0.16140183 0.99268453] rmse=0.13, R2=0.82, R22=0.58, clf.score=0.82
2次項係數:[ 0.00934527 -0.03591245 1.03065829] rmse=0.11, R2=0.88, R22=0.66, clf.score=0.88
100次項:rmse=0.10, R2=0.89, R22=0.67, clf.score=0.89

過擬合

使用100次方多項式做擬合,效果確實是高了一些,然而該模型的據測能力卻極其差勁,模型產生了過擬合。
而且注意看多項式係數,出現了大量的大數值,甚至達到10的12次方。
將500個樣本中的最後2個從訓練集中移除。然而在測試中卻仍然測試所有500個樣本,擬合結果如下:
這裡寫圖片描述
1次項係數:[-0.17933531 1.0052037 ] rmse=0.12, R2=0.85, R22=0.61, clf.score=0.85
2次項係數:[-0.01631935 0.01922011 0.99193521] rmse=0.10, R2=0.90, R22=0.69, clf.score=0.90
100次項:rmse=0.21, R2=0.57, R22=0.34, clf.score=0.57
僅僅只是缺少了最後2個訓練樣本,紅線(100次方多項式擬合結果)的預測發生了劇烈的偏差,R2也急劇下降到0.57。

這說明高次多項式過度擬合了訓練資料,包括其中大量的噪音,導致其完全喪失了對資料趨勢的預測能力。前面也看到,100次多項式擬合出的係數數值無比巨大。人們自然想到通過在擬合過程中限制這些係數數值的大小來避免生成這種畸形的擬合函式。

其基本原理是將擬合多項式的所有係數絕對值之和(L1正則化)或者平方和(L2正則化)加入到懲罰模型中,並指定一個懲罰力度因子w,來避免產生這種畸形係數。

這樣的思想應用在了嶺(Ridge)迴歸(使用L2正則化)、Lasso法(使用L1正則化)、彈性網(Elastic net,使用L1+L2正則化)等方法中,都能有效避免過擬合,下面使用L2正則化嶺迴歸擬合結果:
這裡寫圖片描述