當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python tf.keras.metrics.AUC用法及代碼示例

近似 ROC 或 PR 曲線的 AUC(曲線下麵積)。

繼承自:MetricLayerModule

用法

tf.keras.metrics.AUC(
    num_thresholds=200, curve='ROC',
    summation_method='interpolation', name=None, dtype=None,
    thresholds=None, multi_label=False, num_labels=None, label_weights=None,
    from_logits=False
)

參數

  • num_thresholds (可選)默認為 200。離散化 roc 曲線時使用的閾值數。值必須 > 1。
  • curve (可選)指定要計算的曲線的名稱,'ROC' [默認] 或 'PR' 用於 Precision-Recall-curve。
  • summation_method (可選)指定黎曼求和法用過的。 'interpolation'(默認)應用mid-point求和方案ROC.對於PR-AUC,插入(真/假)陽性,但不插入精確率(詳見 Davis & Goadrich 2006); 'minoring' 對遞增區間應用左求和,對遞減區間應用右求和; 'majoring' 則相反。
  • name (可選)指標實例的字符串名稱。
  • dtype (可選)度量結果的數據類型。
  • thresholds (可選)用作離散化曲線閾值的浮點值列表。如果設置,num_thresholds 參數將被忽略。值應在 [0, 1] 中。端點閾值等於 {-epsilon, 1+epsilon} 對於小的正 epsilon 值將自動包含在這些閾值中,以正確處理等於 0 或 1 的預測。
  • multi_label 布爾值,表示是否應該這樣對待多標簽數據,其中 AUC 是針對每個標簽單獨計算,然後在標簽之間進行平均,或者(當為 False 時)是否應該在 AUC 計算之前將數據展平為單個標簽。在後一種情況下,當多標簽數據傳遞到 AUC 時,每個 label-prediction 對都被視為一個單獨的數據點。對於multi-class 數據,應設置為 False。
  • num_labels (可選)標簽的數量,當multi_label 為 True 時使用。如果未指定 num_labels ,則在第一次調用 update_state 時創建狀態變量。
  • label_weights (可選)用於計算多標簽數據的 AUC 的非負權重列表、數組或張量。當multi_label 為 True 時,權重將應用於各個標簽 AUC,然後對它們進行平均以生成多標簽 AUC。當它為 False 時,它​​們用於在計算扁平數據上的混淆矩陣時對各個標簽預測進行加權。請注意,這與 class_weights 不同,因為 class_weights 根據其標簽的值對示例進行加權,而 label_weights 僅取決於展平前該標簽的索引;因此label_weights 不應用於multi-class 數據。
  • from_logits 布爾值,指示預測(update_state 中的 y_pred)是概率還是 sigmoid logits。根據經驗,當使用 keras 損失時,損失的 from_logits 構造函數參數應該與 AUC from_logits 構造函數參數匹配。

屬性

  • thresholds 用於評估 AUC 的閾值。

ROC(接收器操作特征;默認)或 PR(精確召回)曲線的 AUC(曲線下麵積)是二元分類器的質量度量。與準確度不同,與 cross-entropy 損失一樣,ROC-AUC 和 PR-AUC 評估模型的所有操作點。

此類使用黎曼和來近似 AUC。在度量累積階段,預測在預定義的桶中按值累積。然後通過插值 per-bucket 平均值來計算 AUC。這些桶定義了評估的操作點。

該指標創建四個局部變量,true_positives , true_negatives , false_positivesfalse_negatives,用於計算 AUC。為了離散化 AUC 曲線,使用一組線性間隔的閾值來計算成對的召回率和精度值。因此,ROC-curve 下的區域是通過誤報率使用召回值的高度來計算的,而 PR-curve 下的區域是使用召回率的精度值的高度來計算的。

該值最終以 auc 的形式返回,這是一種冪等運算,用於計算精度與召回值的離散曲線下的麵積(使用上述變量計算)。 num_thresholds 變量控製離散化程度,閾值越多越接近真實 AUC。根據 num_thresholds 的不同,近似的質量可能會有很大差異。 thresholds 參數可用於手動指定閾值,從而更均勻地分割預測。

為了獲得真實 AUC 的最佳近似值,predictions 應大致均勻分布在 0、1 範圍內。如果不是這種情況,AUC 近似值的質量可能會很差。將 summation_method 設置為 'minoring' 或 'majoring' 可以通過提供 AUC 的下限或上限估計值來幫助量化近似誤差。

如果 sample_weightNone ,則權重默認為 1。使用 0 的 sample_weight 來屏蔽值。

單機使用:

m = tf.keras.metrics.AUC(num_thresholds=3)
m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
# threshold values are [0 - 1e-7, 0.5, 1 + 1e-7]
# tp = [2, 1, 0], fp = [2, 0, 0], fn = [0, 1, 2], tn = [0, 2, 2]
# tp_rate = recall = [1, 0.5, 0], fp_rate = [1, 0, 0]
# auc = ((((1+0.5)/2)*(1-0)) + (((0.5+0)/2)*(0-0))) = 0.75
m.result().numpy()
0.75
m.reset_state()
m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9],
               sample_weight=[1, 0, 0, 1])
m.result().numpy()
1.0

compile() API 的用法:

# Reports the AUC of a model outputting a probability.
model.compile(optimizer='sgd',
              loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=[tf.keras.metrics.AUC()])

# Reports the AUC of a model outputting a logit.
model.compile(optimizer='sgd',
              loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=[tf.keras.metrics.AUC(from_logits=True)])

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.keras.metrics.AUC。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。