天天看點

混淆矩陣以及ROC圖像

一、混淆矩陣

總結一下混淆矩陣,分類描述及其繪制;ROC曲線含義,及其繪制

1、矩陣圖示

如下圖就是CM混淆矩陣Confusion Matrix

混淆矩陣以及ROC圖像

左邊欄是資料的真實的類别,右欄是預測出的類别。簡介一下TP,TN,FP,FN含義。

TP 就是 Ture Positive :原來是+,判别為 + 簡記為—->“判對為正”

FP 就是 False Positive :原來是 -,判别為 + 簡記為—-> “錯判為正”

FN 就是False Negative :原來是 +,判别為 - 簡記為—-> “錯判成負”

TN 就是 True Negative:原來是 -,判别為 - 簡記為—-> “判對為負”

很顯然上述混淆矩陣适合而分類問題。

sensitivity: 正,判對的機率為 TP / (TP + FN)

specificity: 負,判對的機率為 TN/ (FP + TN)

precision : TP / (TP + FP) 在判為正的裡面,判對的機率

recall :TP / (TP + FN) 正的裡面判對的機率。== sensitivity

後兩者簡記,精确度就縱向求和;召回率橫向求和。

2、F-score

F-score:精度和召回率的評定函數。Precision高,Recall就低,Recall高,Precision就低。在保證召回率的條件下,盡量提升精确率。而像癌症檢測、地震檢測、金融欺詐等,則在保證精确率的條件下,盡量提升召回率。是以,很多時候我們需要綜合權衡這2個名額,這就引出了一個新的名額F-score。這是綜合考慮Precision和Recall的調和值。

混淆矩陣以及ROC圖像

β=1時,就是五五開,同等重要。精确率更重要的時候,就把β調小;召回率重要就把β調大。

3、混淆矩陣CM的繪制方法

# y:真實類别;yp:預測結果類别
def cm_plot(y, yp):
  from sklearn.metrics import confusion_matrix #導入混淆矩陣函數
  cm = confusion_matrix(y, yp) #混淆矩陣如下
 #48 5
 # 0 6
  import matplotlib.pyplot as plt #導入作圖庫
  plt.matshow(cm, cmap=plt.cm.Greens)#畫混淆矩陣圖
  plt.colorbar() #顔色标簽

  for x in range(len(cm)): #資料标簽
    for y in range(len(cm)):
      plt.annotate(cm[x,y], xy=(x, y), horizontalalignment='center',verticalalignment='center')

  plt.ylabel('True label') #坐标軸标簽
  plt.xlabel('Predicted label') #坐标軸标簽
  return plt

#執行畫圖:第四列為真實的類别;前三列為預測集資料
plt = cm_plot(test[:, ], tree.predict(test[:, :]))
plt.show()
           

二、ROC曲線

首先列出下表資料,繪制TPR-FPR的關系圖(y-x)

設定門檻值,來确定最佳曲線

混淆矩陣以及ROC圖像
from sklearn.metrics import roc_curve  # 導入ROC曲線函數
#擷取FPR,TPR的值
fpr, tpr, thresholds = roc_curve(test[:, ], tree.predict_proba(test[:, :])[:, ], pos_label=)

plt.plot(fpr, tpr, linewidth=, label='ROC of CART', color='green')  # 作出ROC曲線
plt.xlabel('False Positive Rate')  # 坐标軸标簽
plt.ylabel('True Positive Rate')  # 坐标軸标簽
plt.ylim(, )  # 邊界範圍
plt.xlim(, )  # 邊界範圍
plt.legend(loc=)  # 圖例
plt.show()  # 顯示作圖結果
           
混淆矩陣以及ROC圖像

多個ROC曲線,越靠近左上角,效果越好!

繼續閱讀