使用 cross_val_predict sklearn 计算评估指标

Calculate evaluation metrics using cross_val_predict sklearn

sklearn.model_selection.cross_val_predict page 中指出:

Generate cross-validated estimates for each input data point. It is not appropriate to pass these predictions into an evaluation metric.

谁能解释一下这是什么意思?如果这给出了每个 Y(真实 Y)的 Y(y 预测)估计值,为什么我不能使用这些结果计算 RMSE 或决定系数等指标?

这似乎是基于样本的分组和预测方式。来自 cross_val_predict 文档中链接的 user guide

Warning Note on inappropriate usage of cross_val_predict

The result of cross_val_predict may be different from those obtained using cross_val_score as the elements are grouped in different ways. The function cross_val_score takes an average over cross-validation folds, whereas cross_val_predict simply returns the labels (or probabilities) from several distinct models undistinguished. Thus, cross_val_predict is not an appropriate measure of generalisation error.

cross_val_score 似乎说它对 所有 的折叠进行平均,而 cross_val_predict 将单个折叠和不同的模型分组,但不是所有和因此它也不一定会一概而论。例如,使用 sklearn 页面中的示例代码:

from sklearn import datasets, linear_model
from sklearn.model_selection import cross_val_predict, cross_val_score
from sklearn.metrics import mean_squared_error, make_scorer
diabetes = datasets.load_diabetes()
X = diabetes.data[:200]
y = diabetes.target[:200]
lasso = linear_model.Lasso()
y_pred = cross_val_predict(lasso, X, y, cv=3)

print("Cross Val Prediction score:{}".format(mean_squared_error(y,y_pred)))

print("Cross Val Score:{}".format(np.mean(cross_val_score(lasso, X, y, cv=3, scoring = make_scorer(mean_squared_error)))))

Cross Val Prediction score:3993.771257795029
Cross Val Score:3997.1789145156217

只是为了更清楚一点,如果您考虑 non-linear 评分函数(例如 Maximum-Absolute-Error 而不是 mean-absolute 错误之类的东西,则更容易理解差异。

cross_val_score() 将计算每 3 倍的 maximum-absolute-error(假设 3 倍 cross-validator)并报告超过 3 个这样的分数的总和(比如平均值?) .也就是说,类似于 (a, b, c) 的平均值,其中 a 、 b、 c 分别是 3 折的 max-abs-errors 。我想在平均或一般情况下将返回值归结为估算器的 max-absolute-error 是安全的。

with cross_val_predict() 你会得到对应于 3 倍的 3 组预测,并且对这 3 组预测的聚合(串联)进行 maximum-absolute-error 当然不是同上。即使两种情况下的预测值相同,您最终得到的是 (a, b,c) 的最大值。此外,max(a,b,c) 将是模型 max-absolute-error 分数的不合理且过于悲观的表征。