神经网络的ROC曲线绘制代码

ROC曲线的横轴为假正例率(FPR), 纵轴为真正例率(TPR),其曲线下面的面积为AUC

FPR = FP/(FP+TN)
TPR = TP/(TP+FN)

绘制ROC曲线的关键是弄懂ROC曲线的含义,然后改变分类概率的阈值。

代码说明:

    predict是用tensorflow写的神经网络计算出来的分类概率,

    j是从0%~100%的分类概率阈值(默认的二分类概率阈值是50%),

    k是一共有144个样本数量。

 predict = sess.run(tf.nn.softmax(logits), feed_dict={
                    images: testing_images,
                    labels: testing_labels})
                AUC_pro = predict[:, 0]
                probability = predict[:, 0]*100  # 有18x8=144个
                TP = 0
                TN = 0
                FP = 0
                FN = 0
                FPR_list = []
                TPR_list = []
                for j in range(100):  # 101
                    for k in range(144):
                        if probability[k] <= j:  # 预测为1
                            if testing_labels[k] == 1:  # 真实为1
                                TP = TP + 1
                            elif testing_labels[k] == 0:  # 真实为0
                                FP = FP + 1
                        elif probability[k] > j:  # 预测为0
                            if testing_labels[k] == 1:  # 真实为1
                                FN = FN + 1
                            elif testing_labels[k] == 0:  # 真实为0
                                TN = TN + 1
                    FPR = FP/(FP+TN)
                    TPR = TP/(TP+FN)
                    FPR_list.append(FPR)
                    TPR_list.append(TPR)
                    TP = 0
                    TN = 0
                    FP = 0
                    FN = 0

                prediction_tensor = tf.convert_to_tensor(AUC_pro)
                label_tensor = tf.convert_to_tensor(testing_labels)
                auc_value, auc_op = tf.metrics.auc(label_tensor, prediction_tensor, num_thresholds=100)
                sess.run(tf.global_variables_initializer())
                sess.run(tf.local_variables_initializer())
                sess.run(auc_op)
                value = 1 - sess.run(auc_value)
                print("AUC:" + str(value))

ax5.plot(FPR_list, TPR_list)
plt.show()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章