根据所需的精度/召回值生成假模型预测

数据挖掘 Python 麻木的 评估
2022-03-04 10:31:48

假设我为带有N元素的二元分类生成了一组随机目标标签,并且正类 (1) 的某个频率,例如 10%:

targets =     [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, ...]

我现在想生成虚假的分类预测,以使整体预测大致满足所需的精度和召回值,例如precision = 0.8recall = 0.2我不需要确切的值,但喜欢接近,例如0.78and 0.25

predictions = [ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, ...]

有没有办法在 python/numpy 中有效地做到这一点,理想情况下,我可以通过使用不同的随机种子重复生成过程来产生多组预测?

1个回答

当然,您可以根据约束计算每个分类状态需要多少实例。例如:

  • 金正= 10%,即TP+FN=0.1×N
  • 召回 = 0.2,即TP/(TP+FN)=0.2, 所以FN=4×TP

从这两个方程我们得到TP=0.02×NFN=0.08×N

  • 精度 = 0.8,即TP/(TP+FP)=0.8所以FP=0.25×TP=0.005×N
  • 最后 TP+FP+FN+TN=N所以TN=N(TP+FP+FN)=0.895×N

比方说N=1000,我们想要 20 TP、80 FN、5 FP 和 895 TN。

您应该能够编写执行这些计算的代码,然后生成与这些约束匹配的预测列表。

请注意,从技术上讲,这不是模型(甚至不是假模型),因为没有特征,也没有发生真正的分类。