如何根据百分比正确生成训练数据?

How to correctly generate training data based on percentages?

我有一个问题。

我目前正在为我的贝叶斯网络生成训练数据,如下所示: (也作为下面的代码)

->infected代表被感染的人(0=未感染,1=感染) -> p_tests 是测试结果(0= 测试阴性,1= 测试阳性)

TP、FN、FP、TN中是否有0或1是这样决定的:

data = np.random.randint(2, size=(10, 2))
columns = ['infected', 'p_tests']
df = pd.DataFrame(data=data, columns=columns)

df["TP"] = ((df['infected'] == 1) & (df['p_tests'] == 1)).astype(int)
df["FN"] = ((df['infected'] == 1) & (df['p_tests'] == 0)).astype(int)
df["FP"] = ((df['infected'] == 0) & (df['p_tests'] == 1)).astype(int)
df["TN"] = ((df['infected'] == 0) & (df['p_tests'] == 0)).astype(int)

print(df)

这样 运行 很好。

我现在的问题是,我该如何决定,例如。根据我的概率,感染组的 1 和 0。

被感染的几率是 10%。我如何对数据进行编程,以便我的集合中有 10% 的值为 1(表明 10% 已被感染)?

同样是TP(80%),TN(98%),FP(2%),FN(20%)的概率

有没有人有关于如何解决这个问题的想法?

以设定的概率随机分配值,例如P(infected) = 0.9,可以这样进行:

  1. (0, 1.0)

    范围内随机选择 floating-point 个值 r
     df['r'] = np.random.uniform(0, 1.0, size=df.shape[0])
    
  2. 根据概率阈值设置infected的值:

     df['infected'] = (df['r'] >= 0.9).astype(int)