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 值。
此指标不是可与
GridSearchCV或RandomizedSearchCV等工具一起使用的内置字符串名称评分器。相反,您可以使用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}