当某些迭代具有 NaN 值时,在 mlr3 ResampleResult 中聚合性能度量
Aggregating performance measures in mlr3 ResampleResult when some iterations have NaN values
我想为留一重采样的所有迭代计算聚合性能度量(精度)。
对于单次迭代,该度量的结果只能是 0、1(如果预测为正 class)或 NaN(如果预测为负 class。
我想对整个重采样的现有值进行聚合,但聚合结果始终为 NaN(自然地,多次迭代都会为 NaN)。我无法弄清楚(从 ResampleResult$aggregate() 的帮助页面)如何做到这一点:
gr = po(lrn("classif.kknn", predict_type = "prob"),
param_vals = list(k = 10, distance=2, kernel='rectangular' )) %>>%
po("threshold", param_vals = list(thresholds = 0.5))
glrn = GraphLearner$new(gr)
resampling = rsmp("loo")
rr = resample(task, glrn, resampling, store_models = TRUE)
rr$aggregate(msr("classif.precision"))
我怀疑这是否是统计上合理的方法,但从技术上讲,您可以通过覆盖 aggregator
插槽来设置度量的聚合函数:
m = msr("classif.precision")
m$aggregator = function(x) mean(x, na.rm = TRUE)
我想为留一重采样的所有迭代计算聚合性能度量(精度)。
对于单次迭代,该度量的结果只能是 0、1(如果预测为正 class)或 NaN(如果预测为负 class。
我想对整个重采样的现有值进行聚合,但聚合结果始终为 NaN(自然地,多次迭代都会为 NaN)。我无法弄清楚(从 ResampleResult$aggregate() 的帮助页面)如何做到这一点:
gr = po(lrn("classif.kknn", predict_type = "prob"),
param_vals = list(k = 10, distance=2, kernel='rectangular' )) %>>%
po("threshold", param_vals = list(thresholds = 0.5))
glrn = GraphLearner$new(gr)
resampling = rsmp("loo")
rr = resample(task, glrn, resampling, store_models = TRUE)
rr$aggregate(msr("classif.precision"))
我怀疑这是否是统计上合理的方法,但从技术上讲,您可以通过覆盖 aggregator
插槽来设置度量的聚合函数:
m = msr("classif.precision")
m$aggregator = function(x) mean(x, na.rm = TRUE)