回歸模型的性能的評價指標主要有:RMSE(平方根誤差)、MAE(平均絕對誤差)、MSE(平均平方誤差)、R2_score。但是當量綱不同時,RMSE、MAE、MSE難以衡量模型效果好壞。這就需要用到R2_score,實際使用時,會遇到許多問題,今天我們深度研究一下。
預備知識搞清楚R2_score計算之前,我們還需要了解幾個統計學概念。
若用
回歸平方和:SSR
即估計值與平均值的誤差,反映自變量與因變量之間的相關程度的偏差平方和
殘差平方和:SSE
即估計值與真實值的誤差,反映模型擬合程度
總離差平方和:SST
即平均值與真實值的誤差,反映與數學期望的偏離程度
R2_score計算公式R^2 score,即決定係數,反映因變量的全部變異能通過回歸關係被自變量解釋的比例。計算公式:
即
進一步化簡
分子就變成了常用的評價指標均方誤差MSE,分母就變成了方差。
對於
R2_score = 1,樣本中預測值和真實值完全相等,沒有任何誤差,表示回歸分析中自變量對因變量的解釋越好。
R2_score = 0。此時分子等於分母,樣本的每項預測值都等於均值。
R2_score不是r的平方,也可能為負數(分子>分母),模型等於盲猜,還不如直接計算目標變量的平均值。
r2_score使用方法根據公式,我們可以寫出r2_score實現代碼
1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)
也可以直接調用sklearn.metrics中的r2_score
sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
#y_true:觀測值
#y_pred:預測值
#sample_weight:樣本權重,默認None
#multioutput:多維輸入輸出,可選『raw_values』, 『uniform_average』, 『variance_weighted』或None。默認為』uniform_average』;
raw_values:分別返回各維度得分
uniform_average:各輸出維度得分的平均
variance_weighted:對所有輸出的分數進行平均,並根據每個輸出的方差進行加權。
sklearn.metrics.r2_score使用方法
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import r2_score
#導入數據
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
diabetes_X = diabetes_X[:, np.newaxis, 2]
#劃分測試集驗證集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]
# 創建線性回歸模型
regr = linear_model.LinearRegression()
# 訓練模型
regr.fit(diabetes_X_train, diabetes_y_train)
# 預測
diabetes_y_pred = regr.predict(diabetes_X_test)
# 模型評價
print('r2_score: %.2f'
% r2_score(diabetes_y_test, diabetes_y_pred))
# 繪製預測效果圖
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
r2_score: 0.47
r2_score偏小,預測效果一般。
注意事項1、
2、
3、數據集的樣本越大,R²越大,因此,不同數據集的模型結果比較會有一定的誤差,此時可以使用Adjusted R-Square (校正決定係數),能對添加的非顯著變量給出懲罰:
n是樣本的個數,p是變量的個數
Referencehttps://zhuanlan.zhihu.com/p/36305931https://blog.csdn.net/Dear_D/article/details/86144696