Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 评分前的后处理交叉验证预测_Python_Scikit Learn_Cross Validation - Fatal编程技术网

Python 评分前的后处理交叉验证预测

Python 评分前的后处理交叉验证预测,python,scikit-learn,cross-validation,Python,Scikit Learn,Cross Validation,我有一个回归问题,我交叉验证结果并评估性能。我事先知道,基本事实不能小于零。因此,我想截取预测,在它们被输入到分数度量之前,将预测剪裁为零。我认为使用make_scorer函数将非常有用。是否有可能在交叉验证之后,但在对其应用评估指标之前,以某种方式对预测进行后处理 from sklearn.metrics import mean_squared_error, r2_score, make_scorer from sklearn.model_selection import cross_vali

我有一个回归问题,我交叉验证结果并评估性能。我事先知道,基本事实不能小于零。因此,我想截取预测,在它们被输入到分数度量之前,将预测剪裁为零。我认为使用make_scorer函数将非常有用。是否有可能在交叉验证之后,但在对其应用评估指标之前,以某种方式对预测进行后处理

from sklearn.metrics import mean_squared_error, r2_score, make_scorer
from sklearn.model_selection import cross_validate

# X = Stacked feature vectors
# y = ground truth vector
# regr = some regression estimator

#### How to indicate that the predictions need post-processing 
#### before applying the score function???
scoring = {'r2': make_scorer(r2_score),
           'neg_mse': make_scorer(mean_squared_error)}

scores = cross_validate(regr, X, y, scoring=scoring, cv=10)

PS:我知道有约束估计,但我想看看像这样的启发式方法是如何执行的。

您可以做的一件事是按照您的建议,使用
make\u score()
将您要使用的评分器(
r2\u score
mean\u squared\u error
)包装到自定义评分器函数中

请看和以获取一些示例。特别是,您的函数可以执行以下操作:

def clipped_r2(y_true, y_pred):
    y_pred_clipped = np.clip(y_pred, 0, None)
    return r2_score(y_true, y_pred_clipped)

def clipped_mse(y_true, y_pred):
    y_pred_clipped = (y_pred, 0, None)
    return mean_squared_error(y_true, y_pred_clipped)
这允许您在调用计分函数之前在计分器中进行后处理(在这种情况下,
r2\u score
mean\u squared\u error
)。然后要使用它,只需像上面那样使用make_scorer,根据记分器是评分函数(如r2,越大越好)还是损失函数(均方误差为0时越好,即越小)设置
越大越好


谢谢我确实看过这些资源。我只是对那些(剪裁)评估指标如何知道y_pred是什么感到困惑?对于每一次折叠,这应该从回归器内部传递。y_pred是从交叉验证中定义的吗?尽管如此,我还是会尝试。这在
cross\u validate
函数内部发生。如果您感兴趣,可以查看,但它有点难读,因为您必须在一系列函数之间来回切换,以跟踪数据实际用于拟合和评分模型的位置。但是,是的,关键是每个交叉验证折叠都有y_pred和y_测试。我前段时间查看了源代码,确实无法通过反弹代码找到我有限的技能:P。感谢确认,这工作完美且干净!几乎要用Kfold在引擎盖下做这件事。
scoring = {'r2': make_scorer(clipped_r2, greater_is_better=True),
           'neg_mse': make_scorer(clipped_mse, greater_is_better=False)}
scores = cross_validate(regr, X, y, scoring=scoring, cv=10)