在sklearn.model_selection.cross_val_predict
页面中规定:
为每个输入数据点生成交叉验证的估计值。是的不适合将这些预测传递到评估度量中。
有人能解释一下这是什么意思吗?如果这给出了每个Y(真Y(的Y(Y预测(的估计,为什么我不能使用这些结果计算RMSE或决定系数等指标?
这似乎是基于如何对样本进行分组和预测。来自cross_val_predict
文档中链接的用户指南:
关于不适当使用cross_val_prdict 的警告说明
的结果cross_val_epredict可能与使用cross_val_score,因为元素以不同的方式分组。这个函数cross_ val_score在交叉验证折叠上取平均值,而cross_val_prdict只是返回标签(或概率(从几个不同的模型中脱颖而出。因此,cross_val_epredict不是广义误差的适当度量。
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
为了增加一点清晰度,如果考虑非线性评分函数,如最大绝对误差,而不是平均绝对误差,则更容易理解差异。
cross_val_score((将计算3次折叠中每一次的最大绝对误差(假设为3次交叉验证器(,并报告3次这样的分数的总和(比如平均值?(。也就是说,类似于(a,b,c(的平均值,其中a、b、c分别是3个折叠的最大abs误差。我想,在平均值或一般情况下,将返回值总结为估计量的最大绝对误差是安全的。
使用crossval_prdict((,您将获得对应于3倍的3组预测,并且在这3组预测的聚合(级联(上取最大绝对误差肯定与上述不同。即使预测值在两种情况下都是相同的,你最终得到的是(a,b,c(的最大值。此外,max(a,b,c(将是对模型的最大绝对误差分数的不合理和过于悲观的描述。