神經網絡的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()

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