d2_pinball_score#

sklearn.metrics.d2_pinball_score(y_true, y_pred, *, sample_weight=None, alpha=0.5, multioutput='uniform_average')[source]#

\(D^2\) 回归分数函数,pinball loss 解释的比例。

可能的最佳分数为1.0,分数可能为负值(因为模型可能任意糟糕)。一个总是使用 y_true 的经验 alpha-分位数作为常数预测(忽略输入特征)的模型,其 \(D^2\) 分数为0.0。

用户指南中阅读更多内容。

版本 1.1 中新增。

参数:
y_true形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组对象

真实(正确)的目标值。

y_pred形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组对象

估计的目标值。

sample_weightshape 为 (n_samples,) 的 array-like, default=None

样本权重。

alphafloat, default=0.5

弹球偏差的斜率。它决定了弹球偏差以及 D2 最佳的分位数水平 alpha。默认值 alpha=0.5 等同于 d2_absolute_error_score

multioutput{‘raw_values’, ‘uniform_average’} 或形状为 (n_outputs,) 的类数组对象, default=’uniform_average’

定义多个输出值的聚合方式。类数组值定义用于平均分数的权重。

‘raw_values’

在多输出输入情况下返回完整的误差集。

‘uniform_average’

所有输出的分数以均匀权重平均。

返回:
scorefloat 或 ndarray of floats

具有弹球偏差的 \(D^2\) 分数,如果 multioutput='raw_values' 则为分数的 ndarray。

注意事项

\(R^2\) 类似,\(D^2\) 分数可能为负值(它不一定是数量 D 的平方)。

此指标对于单个点没有明确定义,如果 n_samples 小于2,将返回 NaN 值。

此指标不是可与 GridSearchCVRandomizedSearchCV 等工具一起使用的内置字符串名称评分器。相反,您可以使用 make_scorer 创建评分器对象,并设置任何所需的参数。有关详细信息,请参阅 Examples 部分。

References

[1]

Koenker, Roger; Machado, José A. F. (1999). “Goodness of Fit and Related Inference Processes for Quantile Regression”中的等式 (7)

[2]

Hastie, Trevor J., Robert Tibshirani and Martin J. Wainwright. “Statistical Learning with Sparsity: The Lasso and Generalizations.” (2015). https://hastie.su.domains/StatLearnSparsity/ 中的等式 (3.11)

示例

>>> from sklearn.metrics import d2_pinball_score
>>> y_true = [1, 2, 3]
>>> y_pred = [1, 3, 3]
>>> d2_pinball_score(y_true, y_pred)
0.5
>>> d2_pinball_score(y_true, y_pred, alpha=0.9)
0.772...
>>> d2_pinball_score(y_true, y_pred, alpha=0.1)
-1.045...
>>> d2_pinball_score(y_true, y_true, alpha=0.1)
1.0

使用 make_scorer 创建评分器对象

>>> import numpy as np
>>> from sklearn.metrics import make_scorer
>>> from sklearn.model_selection import GridSearchCV
>>> from sklearn.linear_model import QuantileRegressor
>>> X = np.array([[1], [2], [3], [4]])
>>> y = np.array([2.5, 0.0, 2, 8])
>>> pinball_95_scorer = make_scorer(d2_pinball_score, alpha=0.95)
>>> grid = GridSearchCV(
...     QuantileRegressor(quantile=0.95),
...     param_grid={"fit_intercept": [True, False]},
...     scoring=pinball_95_scorer,
...     cv=2,
... ).fit(X, y)
>>> grid.best_params_
{'fit_intercept': True}