指导 tensorflow keras 模型训练,实现二元分类的最佳 Recall At Precision 0.95
python 216
原文标题 :Guiding tensorflow keras model training to achieve best Recall At Precision 0.95 for binary classification
我希望能在这个主题上得到一些帮助。我有一个包含两种相似病理的患者的医学数据数据库,一种是严重的,一种是更轻的。我需要标记大多数前者(≥95%)并省略后者尽可能多。
因此,我想创建一个反映这一点的二进制分类器。在网上四处寻找(不是专家)我将这段代码放在一起,将我找到的指标替换为代码中间部分的 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() 或大多数其他指标,代码就可以工作。再环顾四周,我开始认为我是缺少一些基本的东西。你们中的任何一位女士和先生们对如何解决这个问题有任何指示吗?
回复
我来回复-
Ali zendehbad 评论
要计算准确率和召回率,您不需要 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)
2年前