模型評(píng)估在統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)中具有至關(guān)重要,它幫助我們主要目標(biāo)是量化模型預(yù)測(cè)新數(shù)據(jù)的能力。
在這個(gè)數(shù)據(jù)充斥的時(shí)代,沒有評(píng)估的模型就如同盲人摸象,可能帶來誤導(dǎo)和誤判。
模型評(píng)估不僅是一種方法,更是一種保障,確保我們?cè)跀?shù)據(jù)海洋中航行時(shí),能夠依賴準(zhǔn)確的模型,做出明智的決策。
本篇主要介紹模型評(píng)估時(shí),如何利用scikit-learn
幫助我們快速進(jìn)行各種誤差的分析。
1. 平均絕對(duì)誤差
平均絕對(duì)誤差(Mean Absolute Error,簡(jiǎn)稱MAE
),它用于度量預(yù)測(cè)值與真實(shí)值之間的平均誤差大小。
它能直觀地反映出預(yù)測(cè)的準(zhǔn)確性,MAE越小,說明模型的預(yù)測(cè)能力越好。
1.1. 計(jì)算公式
平均絕對(duì)誤差的計(jì)算公式如下:
\(\text{MAE}(y, \hat{y}) = \frac{1}{n} \sum_{i=0}^{n-1} \left| y_i - \hat{y}_i \right|.\)
其中,\(n\)是樣本數(shù)量,\(y_i\)是真實(shí)值,\(\hat{y_i}\)是預(yù)測(cè)值。
1.2. 使用示例
from sklearn.metrics import mean_absolute_error
import numpy as np
# 隨機(jī)生成100個(gè)sample
n = 100
y_true = np.random.randint(1, 100, n)
y_pred = np.random.randint(1, 100, n)
mean_absolute_error(y_true, y_pred)
mean_absolute_error
就是scikit-learn
中用來計(jì)算MAE
的函數(shù)。
2. 均方誤差
均方誤差(Mean Squared Error
,簡(jiǎn)稱MSE
),它用于衡量模型的預(yù)測(cè)值與實(shí)際觀測(cè)值之間的差異。MSE
越小,表示模型的預(yù)測(cè)值與實(shí)際觀測(cè)值之間的差異較小,即模型具有較高的預(yù)測(cè)精度。
2.1. 計(jì)算公式
\(\text{MSE}(y, \hat{y}) = \frac{1}{n} \sum_{i=0}^{n - 1} (y_i - \hat{y}_i)^2.\)
其中,\(n\)是樣本數(shù)量,\(y_i\)是真實(shí)值,\(\hat{y_i}\)是預(yù)測(cè)值。
2.2. 使用示例
from sklearn.metrics import mean_squared_error
import numpy as np
n = 100
y_true = np.random.randint(1, 100, n)
y_pred = np.random.randint(1, 100, n)
mean_squared_error(y_true, y_pred)
mean_squared_error
就是scikit-learn
中用來計(jì)算MSE
的函數(shù)。
3. 均方對(duì)數(shù)誤差
均方對(duì)數(shù)誤差(Mean Squared Log Error
,簡(jiǎn)稱MSLE
),與均方誤差(MSE
)相比,MSLE
在計(jì)算誤差時(shí)先對(duì)預(yù)測(cè)值和真實(shí)值取對(duì)數(shù)。
通過對(duì)數(shù)轉(zhuǎn)換,MSLE
能夠減小較大值和較小值之間的差異,使得誤差度量更為穩(wěn)定。MSLE
的值越小,表示預(yù)測(cè)結(jié)果與真實(shí)值的差異越小,即模型的擬合程度越好。
3.1. 計(jì)算公式
\(\text{MSLE}(y, \hat{y}) = \frac{1}{n} \sum_{i=0}^{n - 1} (\log_e (1 + y_i) - \log_e (1 + \hat{y}_i) )^2.\)
其中,\(n\)是樣本數(shù)量,\(y_i\)是真實(shí)值,\(\hat{y_i}\)是預(yù)測(cè)值。
3.2. 使用示例
from sklearn.metrics import mean_squared_log_error
import numpy as np
n = 100
y_true = np.random.randint(1, 100, n)
y_pred = np.random.randint(1, 100, n)
mean_squared_log_error(y_true, y_pred)
mean_squared_log_error
就是scikit-learn
中用來計(jì)算MSLE
的函數(shù)。
4. 平均絕對(duì)百分比誤差
平均絕對(duì)百分比誤差(Mean Absolute Percentage Error
,簡(jiǎn)稱MAPE
),平均絕對(duì)誤差(MAE
)相比,MAPE
將誤差轉(zhuǎn)化為百分比形式,這使得它在不同尺度的數(shù)據(jù)上具有更好的可比性。MAPE
越小,表示模型的預(yù)測(cè)結(jié)果與實(shí)際結(jié)果的差異較小,即模型的預(yù)測(cè)準(zhǔn)確性較高。
4.1. 計(jì)算公式
\(\text{MAPE}(y, \hat{y}) = \frac{1}{n} \sum_{i=0}^{n-1} \frac{{}\left| y_i - \hat{y}_i \right|}{\max(\epsilon, \left| y_i \right|)}\)
其中,\(n\)是樣本數(shù)量,\(y_i\)是真實(shí)值,\(\hat{y_i}\)是預(yù)測(cè)值。
\(\epsilon\)是一個(gè)任意小但嚴(yán)格為正的數(shù),以避免在\(y_i\)為零時(shí)出現(xiàn)未定義的結(jié)果。
4.2. 使用示例
from sklearn.metrics import mean_absolute_percentage_error
import numpy as np
n = 100
y_true = np.random.randint(1, 100, n)
y_pred = np.random.randint(1, 100, n)
mean_absolute_percentage_error(y_true, y_pred)
mean_absolute_percentage_error
就是scikit-learn
中用來計(jì)算MAPE
的函數(shù)。
5. 絕對(duì)誤差中值
絕對(duì)誤差中值(Median Absolute Error
,簡(jiǎn)稱MedAE
),它用于衡量預(yù)測(cè)模型對(duì)于數(shù)據(jù)集的精度。
與平均誤差相比,中值對(duì)異常值更為穩(wěn)健,對(duì)于數(shù)據(jù)集中的異常值和離群點(diǎn),絕對(duì)誤差中值具有較強(qiáng)的抗性。MedAE
越小的模型,通常意味著它在大多數(shù)數(shù)據(jù)點(diǎn)上的預(yù)測(cè)更為準(zhǔn)確。
5.1. 計(jì)算公式
\(\text{MedAE}(y, \hat{y}) = \text{median}(\mid y_1 - \hat{y}_1 \mid, \ldots, \mid y_n - \hat{y}_n \mid).\)
其中,\(y_i\)是真實(shí)值,\(\hat{y_i}\)是預(yù)測(cè)值,\(median\)表示取中位數(shù)。
5.2. 使用示例
from sklearn.metrics import median_absolute_error
import numpy as np
n = 100
y_true = np.random.randint(1, 100, n)
y_pred = np.random.randint(1, 100, n)
median_absolute_error(y_true, y_pred)
median_absolute_error
就是scikit-learn
中用來計(jì)算MedAE
的函數(shù)。
6. 最大誤差
最大誤差(Max Error
),它用于衡量模型預(yù)測(cè)值與真實(shí)值之間的最大差異,揭示模型在最壞情況下的表現(xiàn)。
如果模型在大多數(shù)情況下的預(yù)測(cè)誤差都很小,但最大誤差很大,那么這可能意味著模型對(duì)于某些特定情況的處理不夠好,需要進(jìn)一步優(yōu)化。
6.1. 計(jì)算公式
\(\text{Max Error}(y, \hat{y}) = \max(| y_i - \hat{y}_i |)\)
其中,\(y_i\)是真實(shí)值,\(\hat{y_i}\)是預(yù)測(cè)值,\(max\)表示取最大值。
6.2. 使用示例
from sklearn.metrics import max_error
import numpy as np
n = 100
y_true = np.random.randint(1, 100, n)
y_pred = np.random.randint(1, 100, n)
max_error(y_true, y_pred)
max_error
就是scikit-learn
中用來計(jì)算Max Error
的函數(shù)。
7. 總結(jié)
本篇主要介紹了6種常用的誤差分析函數(shù),包括:文章來源:http://www.zghlxwxcb.cn/news/detail-815132.html
- 平均絕對(duì)誤差
- 均方誤差
- 均方對(duì)數(shù)誤差
- 平均絕對(duì)百分比誤差
- 絕對(duì)誤差中值
- 最大誤差
誤差的計(jì)算方式其實(shí)也不算不復(fù)雜,不過,掌握scikit-learn
中封裝好的各種誤差計(jì)算函數(shù),
還是可以幫助我們?cè)谠u(píng)估回歸模型時(shí)節(jié)約不少時(shí)間。文章來源地址http://www.zghlxwxcb.cn/news/detail-815132.html
到了這里,關(guān)于【scikit-learn基礎(chǔ)】--『回歸模型評(píng)估』之誤差分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!