【问题标题】:Difference between batch-average and global Fscore批量平均和全局 Fscore 之间的差异
【发布时间】:2019-12-28 02:55:44
【问题描述】:

我正面临一个减少误报的问题,正负的大小之比约为。 1.7:1。 我从answer 了解到,使用精度、召回率、FScore,甚至根据成本不同地加权真阳性、假阳性、真阴性和假阴性来评估不同的模型来处理指定的分类任务。

由于 Precision, Recall, and FScore 已从 keras 中删除,我找到了一些方法可以在训练期间跟踪这些指标,例如 github repo keras-metrics

此外,我还通过像这样定义精度来找到其他解决方案,

def precision(y_true, y_pred):
    """Precision metric.
    Only computes a batch-wise average of precision.
    Computes the precision, a metric for multi-label classification of
    how many selected items are relevant.
    """
    true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
    predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
    precision = true_positives / (predicted_positives + K.epsilon())
    return precision

但是,由于这些方法在训练期间跟踪指标,并且所有这些方法都声称是 batch-wise average 而不是全局值。 我想知道在训练期间跟踪这些指标有多大必要。或者我在训练期间只关注lossaccuracy,并使用scikit-learn 之类的验证函数评估所有模型,以将这些指标与全局方法进行比较。

【问题讨论】:

    标签: python tensorflow keras deep-learning loss-function


    【解决方案1】:

    在 Keras 中,所有训练指标都是批量测量的。 为了获得全局指标,Keras 将对这些批量指标进行平均。

    类似于sum(batch_metrics) / batches

    由于大多数指标是考虑到“样本数”的平均值,因此进行这种平均不会对全局值造成太大影响。

    如果samples % batch_size == 0,那么我们可以这样说:

    sum(all_samples_metrics) / samples == sum(all_batch_metrics) / batches
    

    但是您所说的这些具体指标不是除以“样本数”,而是除以“满足条件”的样本数。因此,每批中的除数是不同的。从数学上讲,对批指标进行平均以获得全局结果的结果不会反映真实的全局结果。

    那么,我们可以说它们不适合训练吗?

    嗯,不。它们可能适合训练。有时,“准确度”对于特定问题来说是一个糟糕的指标。

    按批次使用这些指标的关键是要有足够大的批次大小以避免除数的太多变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      相关资源
      最近更新 更多