大數(shù)據(jù)機(jī)器學(xué)習(xí)與深度學(xué)習(xí)——回歸模型評(píng)估
回歸模型的性能的評(píng)價(jià)指標(biāo)主要有:MAE(平均絕對(duì)誤差)、MSE(平均平方誤差)、RMSE(平方根誤差)、R2_score。但是當(dāng)量綱不同時(shí),RMSE、MAE、MSE難以衡量模型效果好壞,這就需要用到R2_score。
平均絕對(duì)誤差(MAE Mean Absolute Error)
是絕對(duì)誤差的平均值,能更好地反映預(yù)測(cè)值誤差的實(shí)際情況。
均方誤差(MSE mean-square error)
該統(tǒng)計(jì)參數(shù)是預(yù)測(cè)數(shù)據(jù)和原始數(shù)據(jù)對(duì)應(yīng)點(diǎn)誤差的平方和的均值。
根均方根誤差(RMSE Root Mean Square Error)
求均方誤差的根號(hào)
決定系數(shù)(R-Squared Score)
決定系數(shù)R2 score(coefficient of determination),也稱判定系數(shù)或者擬合優(yōu)度。它是表征回歸方程在多大程度上解釋了因變量的變化,或者說(shuō)方程對(duì)觀測(cè)值的擬合程度如何。擬合優(yōu)度的有效性通常要求:自變量個(gè)數(shù):樣本數(shù)>1:10。
R2 決定系數(shù),反映因變量的全部變異能通過(guò)回歸關(guān)系被自變量解釋的比例。
根據(jù) R-Squared 的取值,來(lái)判斷模型的好壞,其取值范圍為[0,1]:
如果結(jié)果是 0,說(shuō)明模型擬合效果很差;
如果結(jié)果是 1,說(shuō)明模型無(wú)錯(cuò)誤。
一般來(lái)說(shuō),R-Squared 越大,表示模型擬合效果越好。R-Squared 反映的是大概有多準(zhǔn),因?yàn)?,隨著樣本數(shù)量的增加,R-Square必然增加,無(wú)法真正定量說(shuō)明準(zhǔn)確程度,只能大概定量。
所以要想決定系數(shù)R2越接近1,必須滿足MSE越小,也就是真實(shí)值與預(yù)測(cè)值相差不大,也就是模型擬合程度高,同時(shí)var方差越大,也就是我們的樣本離散程度大,對(duì)應(yīng)的我們實(shí)際采樣過(guò)程中,就是要求樣本是隨機(jī)性,以及全面性,覆蓋度廣。
注意
決定系數(shù)適用于線性回歸,單變量或者多元線性;y=ax或者y=ax1+bx2…; - 擬合模型是非線性的,不能用決定系數(shù)來(lái)評(píng)價(jià)其擬合效果,例如:BP神經(jīng)網(wǎng)絡(luò);
當(dāng)擬合程度不行,可以調(diào)整參數(shù)或者權(quán)重-例如a,b,使預(yù)測(cè)值與真實(shí)值越接近。
其中,分子部分表示真實(shí)值與預(yù)測(cè)值的平方差之和,類似于均方差 MSE;分母部分表示真實(shí)值與均值的平方差之和,類似于方差 Var。
(R-Squared score)-深度研究
對(duì)于R-Squared score可以通俗地理解為使用均值作為誤差基準(zhǔn),看預(yù)測(cè)誤差是否大于或者小于均值基準(zhǔn)誤差。
R2_score = 1,樣本中預(yù)測(cè)值和真實(shí)值完全相等,沒(méi)有任何誤差,表示回歸分析中自變量對(duì)因變量的解釋越好。
R2_score =0。此時(shí)分子等于分母,樣本的每項(xiàng)預(yù)測(cè)值都等于均值。
R2_score不是r的平方,也可能為負(fù)數(shù)(分子>分母),模型等于盲猜,還不如直接計(jì)算目標(biāo)變量的平均值。
# 根據(jù)公式,我們可以寫出r2_score實(shí)現(xiàn)代碼
1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)
# 也可以直接調(diào)用sklearn.metrics中的r2_score
sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
# y_true:觀測(cè)值
# y_pred:預(yù)測(cè)值
# sample_weight:樣本權(quán)重,默認(rèn)None
# multioutput:多維輸入輸出,可選‘raw_values’, ‘uniform_average’,‘variance_weighted’或None。默認(rèn)為’uniform_average’;
# raw_values:分別返回各維度得分 uniform_average:各輸出維度得分的平均
# variance_weighted:對(duì)所有輸出的分?jǐn)?shù)進(jìn)行平均,并根據(jù)每個(gè)輸出的方差進(jìn)行加權(quán)。
r2_score: 0.47
r2_score偏小,預(yù)測(cè)效果一般。
注意事項(xiàng)
1、R-Squared score 一般用在線性模型中(非線性模型也可以用)
2、R-Squared score 不能完全反映模型預(yù)測(cè)能力的高低,某個(gè)實(shí)際觀測(cè)的自變量取值范圍很窄,但此時(shí)所建模型的R2 很大,但這并不代表模型在外推應(yīng)用時(shí)的效果肯定會(huì)很好。
3、數(shù)據(jù)集的樣本越大,R2越大,因此,不同數(shù)據(jù)集的模型結(jié)果比較會(huì)有一定的誤差,此時(shí)可以使用Adjusted R-Square (校正決定系數(shù)),能對(duì)添加的非顯著變量給出懲罰
校正決定系數(shù)(Adjusted R-Square)是多元線性回歸模型中用于評(píng)估模型擬合優(yōu)度的一種統(tǒng)計(jì)指標(biāo)。它對(duì)決定系數(shù)(R-Square)進(jìn)行了修正,考慮了模型中使用的自變量的數(shù)量。
決定系數(shù)(R-Square)用于衡量模型對(duì)因變量變異性的解釋程度,其取值范圍在0到1之間,越接近1表示模型對(duì)數(shù)據(jù)的解釋越好。然而,當(dāng)模型中增加自變量時(shí),R-Square的值可能會(huì)增加,即使新加入的變量對(duì)模型的解釋并不顯著。為了解決這個(gè)問(wèn)題,引入了校正決定系數(shù)。
校正決定系數(shù)
計(jì)算公式如下:
其中:
( R^2 ) 是決定系數(shù)。
( n ) 是樣本數(shù)量。
( k ) 是模型中自變量的數(shù)量。
校正決定系數(shù)考慮了模型的自由度,通過(guò)對(duì)決定系數(shù)進(jìn)行修正,避免了在模型中增加自變量時(shí)導(dǎo)致模型擬合度提高的情況。因此,校正決定系數(shù)通常對(duì)模型的泛化能力提供更準(zhǔn)確的評(píng)估。
在實(shí)際應(yīng)用中,分析人員通常會(huì)綜合考慮決定系數(shù)和校正決定系數(shù),以全面評(píng)估模型的擬合質(zhì)量和適應(yīng)性。
其中,n 是樣本數(shù)量,p 是特征數(shù)量。
Adjusted R-Square 抵消樣本數(shù)量對(duì) R-Square的影響,做到了真正的 0~1,越大越好。
python中可以直接調(diào)用。
統(tǒng)計(jì)學(xué)理論
方差(variance):
計(jì)算公式:S2=1/n [(x1-X)2+(x2-X)2+(x3-X)2+…(xn-X)2] (X表示平均數(shù))
方差在概率論和統(tǒng)計(jì)方差衡量隨機(jī)變量或一組數(shù)據(jù)時(shí)離散程度的度量。
概率論中方差用來(lái)度量隨機(jī)變量和其數(shù)學(xué)期望(即均值)之間的偏離程度。
統(tǒng)計(jì)中的方差(樣本方差)是每個(gè)樣本值與全體樣本值的平均數(shù)之差的平方值的平均數(shù)。
代碼實(shí)現(xiàn)
sklearn庫(kù)調(diào)用模型評(píng)估
#導(dǎo)入相應(yīng)的函數(shù)庫(kù)
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
import numpy as np
import pandas as pd
# 使用sklearn調(diào)用衡量線性回歸的MSE 、 RMSE、 MAE、r2
from math import sqrt
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
print("mean_absolute_error:", mean_absolute_error(y_test, y_predict))
print("mean_squared_error:", mean_squared_error(y_test, y_predict))
print("rmse:", sqrt(mean_squared_error(y_test, y_predict)))
print("r2 score:", r2_score(y_test, y_predict))
原生實(shí)現(xiàn)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-757810.html
# 衡量線性回歸的MSE 、 RMSE、 MAE、r2
from math import sqrt
mse = np.sum((y_test - y_predict) ** 2) / len(y_test)
rmse = sqrt(mse)
mae = np.sum(np.absolute(y_test - y_predict)) / len(y_test)
r2 = 1-mse/ np.var(y_test)#均方誤差/方差
print(" mae:",mae,"mse:",mse," rmse:",rmse," r2:",r2)
應(yīng)用文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-757810.html
y_test1=np.array(Y_true_3[:,0:1])
y_predict1=np.array(predict[:,0])
y_test2=np.array(Y_true_3[:,1:2])
y_predict2=np.array(predict[:,1])
print("ROP : R2:%.4f"% r2_score(y_test1, y_predict1), " MSE:%.4f"% mean_squared_error(y_test1, y_predict1), "RMSE:%.4f" % calc_rmse(y_test1, y_predict1))
print("Torque: R2:%.4f"% r2_score(y_test2, y_predict2), "MSE:%.4f"% mean_squared_error(y_test2, y_predic
到了這里,關(guān)于大數(shù)據(jù)機(jī)器學(xué)習(xí)與深度學(xué)習(xí)——回歸模型評(píng)估的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!