繁体   English   中英

指导 tensorflow keras model 训练以实现二进制分类的最佳召回精度 0.95

[英]Guiding tensorflow keras model training to achieve best Recall At Precision 0.95 for binary classification

我希望在标题主题上得到一些帮助。 我有一个数据库,其中包含患有两种相似病症的患者的医疗数据,一种很严重,另一种则不那么严重。 我需要标记大多数前者 (≥95%) 并尽可能多地排除后者。

因此,我想创建一个反映这一点的二元分类器。 环顾 web(不是专家),我将这段代码放在一起,在代码的中间部分用 RecallAtPrecision(0.95) 替换了我找到的指标。 以下是精简版:

import tensorflow as tf

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(10, input_dim=x_train.shape[1], activation='relu', kernel_initializer='he_normal'))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))

model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(), metrics=[tf.keras.metrics.RecallAtPrecision(0.95)])

history = model.fit(x_train, y_train, validation_split=0.33, batch_size=16, epochs=EPOCHS)

但是,它根本不起作用,因为它会引发以下错误:

AttributeError:模块“tensorflow_core.keras.metrics”没有属性“RecallAtPrecision”

我不知道为什么会这样,因为我可以在文档中清楚地看到它。 如果我使用 Recall()、Precision() 或大多数其他指标,代码就可以工作。 再环顾四周,我开始觉得我缺少一些基本的东西。 你们中的任何一位女士们先生们对如何解决这个问题有任何指示吗?

要计算精度和召回率,您不需要 require Keras。如果您将实际值和预期值作为 0/1 的向量,则可以使用tf.count_nonzero计算 TP、FP、FN,您可以轻松地表示它们。

TP = tf.count_nonzero(predicted * actual)
FP = tf.count_nonzero(predicted * (actual - 1))
FN = tf.count_nonzero((predicted - 1) * actual)

您的指标现在很容易计算:

precision = TP / (TP + FP)
recall = TP / (TP + FN)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM