gpt4 book ai didi

python - 如何使用 Tensorflow 和 scikit-learn 绘制 ROC 曲线?

转载 作者:太空狗 更新时间:2023-10-30 00:19:15 25 4
gpt4 key购买 nike

我正在尝试根据 tensorflow 提供的 CIFAR-10 示例的修改版本绘制 ROC 曲线。现在是 2 节课而不是 10 节课。

网络的输出称为 logits,其形式为:

[[-2.57313061 2.57966399] [ 0.04221377 -0.04033273] [-1.42880082 1.43337202] [-2.7692945 2.78173304] [-2.48195744 2.49331546] [ 2.0941515 -2.10268974] [-3.51670194 3.53267646] [-2.74760485 2.75617766] ...]

首先,这些logits到底代表什么?网络中的最后一层是 WX+b 形式的“softmax 线性”。

模型可以通过调用来计算准确率

top_k_op = tf.nn.in_top_k(logits, labels, 1)

然后一旦图形被初始化:

predictions = sess.run([top_k_op])
predictions_int = np.array(predictions).astype(int)
true_count += np.sum(predictions)
...
precision = true_count / total_sample_count

这很好用。

但现在我该如何绘制 ROC 曲线呢?

我一直在尝试“sklearn.metrics.roc_curve()”函数 (http://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve),但我不知道使用什么作为“y_score”参数。

如有任何帮助,我们将不胜感激!

最佳答案

这里的'y_score'应该是一个数组,对应于每个样本被分类为阳性的概率(如果阳性在你的y_true数组中被标记为1)

实际上,如果您的网络使用 Softmax 作为最后一层,那么模型应该输出该实例每个类别的概率。但是你这里给的数据不符合这个格式。我检查了示例代码:https://github.com/tensorflow/tensorflow/blob/r0.10/tensorflow/models/image/cifar10/cifar10.py它似乎使用了名为 softmax_linear 的层,我对这个示例知之甚少,但我猜你应该使用诸如 Logistic 函数之类的方法处理输出以将其转化为概率。

然后只需将它与您的真实标签“y_true”一起提供给 scikit-learn 函数:

y_score = np.array(output)[:,1]
roc_curve(y_true, y_score)

关于python - 如何使用 Tensorflow 和 scikit-learn 绘制 ROC 曲线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com