具有未定义值的交叉验证性能聚合
Cross-Validation Performance Aggregation with Undefined Values
我想知道在交叉验证中计算多次平均性能的正确方法是什么。
例如,我有 5 个 F1 的值
[0.5 0.3 0.25 null 0.7]
这个系统的平均F1是多少?
- 我可以将 null 取为 0 或者只输出 null 作为平均结果。
- 或者,我可以只取定义的四个值并除以 4,但这也不正确,因为如果有某个系统在这个折叠上做 0.1,它的性能会比 null 差,但是,0.1 比 null 好得多。
这真的取决于上下文。 (在下文中,我包括了对 numpy
的引用,仅供将来使用它的人参考。)
如果 null
发生是因为 cv-fold 在某种程度上未定义该问题,那么您可以忽略它(例如,通过调用 np.nanmean
。大概,对于 "real life",你只是不会有一个数据集相当于这样的折叠。
如果 null
发生是因为预测器完全失败了,那么结果可能是(这是 你的 解释的问题):
nan
,因为整体预测器行为未定义(在这种情况下,您可能只使用 np.mean
)。
最坏情况的平均值(对于 f1 score), if you'd spot for a given set that it's malfunctioning, and output just some arbitrary result (in this case, you might use np.nan_to_num
确实为 0)。
到目前为止,您能做的最好的事情 就是找出这个值的原因,然后消除它。理想情况下,这应该永远不会发生,并且可能应该被视为一个错误;在解决bug之前,请考虑一下您的估算器不适合性能估算。
我想知道在交叉验证中计算多次平均性能的正确方法是什么。
例如,我有 5 个 F1 的值
[0.5 0.3 0.25 null 0.7]
这个系统的平均F1是多少?
- 我可以将 null 取为 0 或者只输出 null 作为平均结果。
- 或者,我可以只取定义的四个值并除以 4,但这也不正确,因为如果有某个系统在这个折叠上做 0.1,它的性能会比 null 差,但是,0.1 比 null 好得多。
这真的取决于上下文。 (在下文中,我包括了对 numpy
的引用,仅供将来使用它的人参考。)
如果
null
发生是因为 cv-fold 在某种程度上未定义该问题,那么您可以忽略它(例如,通过调用np.nanmean
。大概,对于 "real life",你只是不会有一个数据集相当于这样的折叠。如果
null
发生是因为预测器完全失败了,那么结果可能是(这是 你的 解释的问题):nan
,因为整体预测器行为未定义(在这种情况下,您可能只使用np.mean
)。最坏情况的平均值(对于 f1 score), if you'd spot for a given set that it's malfunctioning, and output just some arbitrary result (in this case, you might use
np.nan_to_num
确实为 0)。
到目前为止,您能做的最好的事情 就是找出这个值的原因,然后消除它。理想情况下,这应该永远不会发生,并且可能应该被视为一个错误;在解决bug之前,请考虑一下您的估算器不适合性能估算。