使用 tensorflow 或 scikit 函数时,keras 中的 AUC ROC 是不同的。

数据挖掘 深度学习 喀拉斯 scikit-学习 表现
2021-10-02 11:50:53

这里提出的两种使用 AUC-ROC 训练 keras 模型的解决方案对我有用。但是使用 tensorflow 或 scikit rocauc 函数我得到了不同的结果。

def auc(y_true, y_pred):
    auc = tf.metrics.auc(y_true, y_pred)[1]
    K.get_session().run(tf.local_variables_initializer())
    return auc

def auc(y_true, y_pred):
    return tf.py_func(roc_auc_score, (y_true, y_pred), tf.double)

根据历史,看起来两者都被应用于训练和验证。当我绘制历史指标时,与 scikit 相比,张量流曲线看起来非常平滑。

我不应该使用这两个函数得到相同的结果吗?

1个回答

不,你不应该有相同的数字。一切都取决于附加参数:

tf.metrics.auc(
    labels,
    predictions,
    weights=None,
    num_thresholds=200,
    metrics_collections=None,
    updates_collections=None,
    curve='ROC',
    name=None,
    summation_method='trapezoidal'
)

这意味着这条曲线将有 200 个点,非常平滑。

sklearn 版本没有这种参数:

roc_auc_score(y_true, y_score, average=’macro’, sample_weight=None, max_fpr=None)

如果我没记错的话,输出的数量取决于曲线和点的数量。