r2_score#

sklearn.metrics.r2_score(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', force_finite=True)[原始碼]#

\(R^2\)(決定係數)迴歸評分函數。

最佳可能分數為 1.0,且可能為負值(因為模型可能任意變差)。在真實 y 為非恆定的情況下,一個總是預測平均 y 而忽略輸入特徵的恆定模型將獲得 \(R^2\) 分數 0.0。

y_true 為常數的特殊情況下,\(R^2\) 分數不是有限的:它可能是 NaN(完美預測)或 -Inf(不完美預測)。為了防止這種非有限數字污染更高層級的實驗(如網格搜尋交叉驗證),預設情況下,這些情況會分別替換為 1.0(完美預測)或 0.0(不完美預測)。您可以將 force_finite 設定為 False 來防止此修復發生。

注意:當預測殘差的平均值為零時,\(R^2\) 分數與 解釋變異 分數 相同。

使用者指南 中閱讀更多資訊。

參數:
y_true形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列

真實(正確)目標值。

y_pred形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列

估計的目標值。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。

multioutput{'raw_values'、'uniform_average'、'variance_weighted'},形狀為 (n_outputs,) 的類陣列或 None,預設值為 'uniform_average'

定義多個輸出分數的聚合方式。類陣列值定義用於平均分數的權重。預設值為 “uniform_average”。

‘raw_values’

在多輸出輸入的情況下,傳回完整的分數集。

‘uniform_average’

所有輸出的分數都以統一權重進行平均。

‘variance_weighted’

所有輸出的分數都進行平均,並按每個個別輸出的變異數加權。

在 0.19 版本中變更:多輸出的預設值為 ‘uniform_average’。

force_finitebool,預設值為 True

旗標指示是否應將由恆定資料產生的 NaN-Inf 分數替換為實數(如果預測完美,則為 1.0,否則為 0.0)。預設值為 True,這是超參數搜尋程序(例如,網格搜尋交叉驗證)的方便設定。

在 1.1 版本中新增。

傳回值:
z浮點數或浮點數的 ndarray

如果 ‘multioutput’ 為 ‘raw_values’,則為 \(R^2\) 分數或分數的 ndarray。

備註

這不是對稱函數。

與大多數其他分數不同,\(R^2\) 分數可能為負值(它實際上不一定是數量 R 的平方)。

此度量對於單個樣本來說沒有明確定義,如果 n_samples 小於 2,將傳回 NaN 值。

參考文獻

範例

>>> from sklearn.metrics import r2_score
>>> y_true = [3, -0.5, 2, 7]
>>> y_pred = [2.5, 0.0, 2, 8]
>>> r2_score(y_true, y_pred)
0.948...
>>> y_true = [[0.5, 1], [-1, 1], [7, -6]]
>>> y_pred = [[0, 2], [-1, 2], [8, -5]]
>>> r2_score(y_true, y_pred,
...          multioutput='variance_weighted')
0.938...
>>> y_true = [1, 2, 3]
>>> y_pred = [1, 2, 3]
>>> r2_score(y_true, y_pred)
1.0
>>> y_true = [1, 2, 3]
>>> y_pred = [2, 2, 2]
>>> r2_score(y_true, y_pred)
0.0
>>> y_true = [1, 2, 3]
>>> y_pred = [3, 2, 1]
>>> r2_score(y_true, y_pred)
-3.0
>>> y_true = [-2, -2, -2]
>>> y_pred = [-2, -2, -2]
>>> r2_score(y_true, y_pred)
1.0
>>> r2_score(y_true, y_pred, force_finite=False)
nan
>>> y_true = [-2, -2, -2]
>>> y_pred = [-2, -2, -2 + 1e-8]
>>> r2_score(y_true, y_pred)
0.0
>>> r2_score(y_true, y_pred, force_finite=False)
-inf