Keras 3 API 文件 / 指標 / 基於真陽性/假陽性和真陰性/假陰性的分類指標

基於真陽性/假陽性和真陰性/假陰性的分類指標

[原始碼]

AUC 類別

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,
)

逼近 ROC 或 PR 曲線的 AUC(曲線下面積)。

ROC(接收者操作特徵;預設)或 PR(精確度召回)曲線的 AUC(曲線下面積)是二元分類器的品質衡量標準。與準確度不同,且類似於交叉熵損失,ROC-AUC 和 PR-AUC 會評估模型的所有操作點。

此類別使用黎曼和逼近 AUC。在指標累積階段,預測會根據值累積在預定義的桶中。然後透過內插每個桶的平均值來計算 AUC。這些桶定義了評估的操作點。

此指標會建立四個區域變數 true_positivestrue_negativesfalse_positivesfalse_negatives,這些變數用於計算 AUC。為了離散化 AUC 曲線,使用線性間隔的一組閾值來計算召回率和精確度值的配對。因此,ROC 曲線下的面積是使用召回率值的高度乘以假陽性率來計算,而 PR 曲線下的面積是使用精確度值的高度乘以召回率來計算。

此值最終會以 auc 的形式傳回,這是一個等冪運算,用於計算精確度與召回率值的離散曲線下的面積(使用上述變數計算)。num_thresholds 變數控制離散化的程度,閾值數量越大,越能逼近真正的 AUC。逼近的品質可能會因 num_thresholds 而有很大差異。thresholds 參數可用於手動指定閾值,以更均勻地分割預測。

為了獲得真實 AUC 的最佳逼近值,predictions 應該在大約 [0, 1] 範圍內均勻分佈(如果 from_logits=False)。如果情況並非如此,AUC 逼近的品質可能會很差。將 summation_method 設定為「minoring」或「majoring」可以透過提供 AUC 的下限或上限估計值來幫助量化逼近中的誤差。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

引數

  • num_thresholds:(可選)離散化 ROC 曲線時要使用的閾值數量。值必須 > 1。預設為 200
  • curve:(可選)指定要計算的曲線名稱,'ROC'(預設)或 'PR' 代表精確度召回曲線。
  • summation_method:(可選)指定使用的 黎曼求和方法。「interpolation」(預設)將中點求和方案應用於 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 時,每個標籤-預測配對都會被視為個別的資料點。對於多類別資料,應設定為 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 不應用於多類別資料。
  • from_logits:布林值,指示預測(update_state 中的 y_pred)是機率還是 sigmoid logits。根據經驗法則,當使用 keras 損失時,損失的 from_logits 建構子引數應與 AUC from_logits 建構子引數相符。

範例

>>> m = 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()
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()
1.0

搭配 compile() API 使用

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

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

[原始碼]

Precision 類別

keras.metrics.Precision(
    thresholds=None, top_k=None, class_id=None, name=None, dtype=None
)

計算預測相對於標籤的精確度。

此指標會建立兩個區域變數 true_positivesfalse_positives,這些變數用於計算精確度。此值最終會以 precision 的形式傳回,這是一個等冪運算,只會將 true_positives 除以 true_positivesfalse_positives 的總和。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

如果設定了 top_k,我們會計算精確度,方法是計算批次項目中具有最高預測值的 top-k 個類別中,平均而言有多少個類別是正確的,並且可以在該項目的標籤中找到。

如果指定了 class_id,我們會透過僅考慮批次中 class_id 高於閾值且/或在 top-k 個最高預測中的項目,並計算其中 class_id 實際上是正確標籤的比例來計算精確度。

引數

  • thresholds:(可選)一個浮點值,或一個浮點閾值值的 Python 列表/元組,介於 [0, 1] 之間。將閾值與預測值進行比較,以判斷預測的真值(即,高於閾值為 True,低於閾值為 False)。如果與設定 from_logits=True 的損失函數一起使用(即,未對預測套用 sigmoid),則應將 thresholds 設定為 0。會為每個閾值產生一個指標值。如果未設定 thresholds 也未設定 top_k,則預設會以 thresholds=0.5 計算精確度。
  • top_k:(可選)預設為未設定。一個整數值,指定計算精確度時要考慮的 top-k 個預測。
  • class_id:(可選)我們想要二元指標的整數類別 ID。這必須位於半開區間 [0, num_classes) 內,其中 num_classes 是預測的最後一個維度。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.Precision()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result()
0.6666667
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0
>>> # With top_k=2, it will calculate precision over y_true[:2]
>>> # and y_pred[:2]
>>> m = keras.metrics.Precision(top_k=2)
>>> m.update_state([0, 0, 1, 1], [1, 1, 1, 1])
>>> m.result()
0.0
>>> # With top_k=4, it will calculate precision over y_true[:4]
>>> # and y_pred[:4]
>>> m = keras.metrics.Precision(top_k=4)
>>> m.update_state([0, 0, 1, 1], [1, 1, 1, 1])
>>> m.result()
0.5

搭配 compile() API 使用

model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=[keras.metrics.Precision()])

搭配 from_logits=True 的損失使用

model.compile(optimizer='adam',
              loss=keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=[keras.metrics.Precision(thresholds=0)])

[原始碼]

Recall 類別

keras.metrics.Recall(
    thresholds=None, top_k=None, class_id=None, name=None, dtype=None
)

計算預測相對於標籤的召回率。

此指標會建立兩個區域變數 true_positivesfalse_negatives,這些變數用於計算召回率。此值最終會以 recall 的形式傳回,這是一個等冪運算,只會將 true_positives 除以 true_positivesfalse_negatives 的總和。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

如果設定了 top_k,則會計算召回率,方法是計算批次項目的標籤中,平均而言有多少個類別在 top-k 個預測中。

如果指定了 class_id,我們會透過僅考慮批次中標籤中包含 class_id 的項目,並計算其中 class_id 高於閾值且/或在 top-k 個預測中的比例來計算召回率。

引數

  • thresholds:(可選)一個浮點值,或一個浮點閾值值的 Python 列表/元組,介於 [0, 1] 之間。將閾值與預測值進行比較,以判斷預測的真值(即,高於閾值為 True,低於閾值為 False)。如果與設定 from_logits=True 的損失函數一起使用(即,未對預測套用 sigmoid),則應將 thresholds 設定為 0。會為每個閾值產生一個指標值。如果未設定 thresholds 也未設定 top_k,則預設會以 thresholds=0.5 計算召回率。
  • top_k:(可選)預設為未設定。一個整數值,指定計算召回率時要考慮的 top-k 個預測。
  • class_id:(可選)我們想要二元指標的整數類別 ID。這必須位於半開區間 [0, num_classes) 內,其中 num_classes 是預測的最後一個維度。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.Recall()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result()
0.6666667
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

搭配 compile() API 使用

model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=[keras.metrics.Recall()])

搭配 from_logits=True 的損失使用

model.compile(optimizer='adam',
              loss=keras.losses.BinaryCrossentropy(from_logits=True),
              metrics=[keras.metrics.Recall(thresholds=0)])

[原始碼]

TruePositives 類別

keras.metrics.TruePositives(thresholds=None, name=None, dtype=None)

計算真陽性的數量。

如果給定 sample_weight,則計算真陽性的權重總和。此指標會建立一個區域變數 true_positives,用於追蹤真陽性的數量。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

引數

  • thresholds:(可選)預設為 0.5。一個浮點值,或一個浮點閾值值的 Python 列表/元組,介於 [0, 1] 之間。將閾值與預測值進行比較,以判斷預測的真值(即,高於閾值為 True,低於閾值為 False)。如果與設定 from_logits=True 的損失函數一起使用(即,未對預測套用 sigmoid),則應將 thresholds 設定為 0。會為每個閾值產生一個指標值。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.TruePositives()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [1, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[原始碼]

TrueNegatives 類別

keras.metrics.TrueNegatives(thresholds=None, name=None, dtype=None)

計算真陰性的數量。

如果給定 sample_weight,則計算真陰性的權重總和。此指標會建立一個區域變數 accumulator,用於追蹤真陰性的數量。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

引數

  • thresholds:(可選)預設為 0.5。一個浮點值,或一個浮點閾值值的 Python 列表/元組,介於 [0, 1] 之間。將閾值與預測值進行比較,以判斷預測的真值(即,高於閾值為 True,低於閾值為 False)。如果與設定 from_logits=True 的損失函數一起使用(即,未對預測套用 sigmoid),則應將 thresholds 設定為 0。會為每個閾值產生一個指標值。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.TrueNegatives()
>>> m.update_state([0, 1, 0, 0], [1, 1, 0, 0])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 0, 0], [1, 1, 0, 0], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[原始碼]

FalsePositives 類別

keras.metrics.FalsePositives(thresholds=None, name=None, dtype=None)

計算假陽性的數量。

如果給定 sample_weight,則計算假陽性的權重總和。此指標會建立一個區域變數 accumulator,用於追蹤假陽性的數量。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

引數

  • thresholds:(可選)預設為 0.5。一個浮點值,或一個浮點閾值值的 Python 列表/元組,介於 [0, 1] 之間。將閾值與預測值進行比較,以判斷預測的真值(即,高於閾值為 True,低於閾值為 False)。如果與設定 from_logits=True 的損失函數一起使用(即,未對預測套用 sigmoid),則應將 thresholds 設定為 0。會為每個閾值產生一個指標值。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.FalsePositives()
>>> m.update_state([0, 1, 0, 0], [0, 0, 1, 1])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 0, 0], [0, 0, 1, 1], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[原始碼]

FalseNegatives 類別

keras.metrics.FalseNegatives(thresholds=None, name=None, dtype=None)

計算假陰性的數量。

如果給定 sample_weight,則計算假陰性的權重總和。此指標會建立一個局部變數 accumulator,用於追蹤假陰性的數量。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

引數

  • thresholds:(可選)預設為 0.5。一個浮點值,或一個浮點閾值值的 Python 列表/元組,介於 [0, 1] 之間。將閾值與預測值進行比較,以判斷預測的真值(即,高於閾值為 True,低於閾值為 False)。如果與設定 from_logits=True 的損失函數一起使用(即,未對預測套用 sigmoid),則應將 thresholds 設定為 0。會為每個閾值產生一個指標值。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.FalseNegatives()
>>> m.update_state([0, 1, 1, 1], [0, 1, 0, 0])
>>> m.result()
2.0
>>> m.reset_state()
>>> m.update_state([0, 1, 1, 1], [0, 1, 0, 0], sample_weight=[0, 0, 1, 0])
>>> m.result()
1.0

[原始碼]

PrecisionAtRecall 類別

keras.metrics.PrecisionAtRecall(
    recall, num_thresholds=200, class_id=None, name=None, dtype=None
)

計算召回率 >= 指定值時的最佳精確度。

此指標會建立四個局部變數:true_positivestrue_negativesfalse_positivesfalse_negatives,用於計算指定召回率的精確度。計算給定召回率值的閾值,並用於評估相應的精確度。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

如果指定 class_id,我們會僅考慮批次中 class_id 高於閾值預測的條目來計算精確度,並計算其中 class_id 確實為正確標籤的比例。

引數

  • recall:範圍在 [0, 1] 中的純量值。
  • num_thresholds:(選用)預設值為 200。用於匹配給定召回率的閾值數量。
  • class_id:(可選)我們想要二元指標的整數類別 ID。這必須位於半開區間 [0, num_classes) 內,其中 num_classes 是預測的最後一個維度。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.PrecisionAtRecall(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result()
0.5
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
...                sample_weight=[2, 2, 2, 1, 1])
>>> m.result()
0.33333333

搭配 compile() API 使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.PrecisionAtRecall(recall=0.8)])

[原始碼]

RecallAtPrecision 類別

keras.metrics.RecallAtPrecision(
    precision, num_thresholds=200, class_id=None, name=None, dtype=None
)

計算精確度 >= 指定值時的最佳召回率。

對於給定的分數-標籤分佈,可能無法達到所需的精確度,在這種情況下,會回傳 0.0 作為召回率。

此指標會建立四個局部變數:true_positivestrue_negativesfalse_positivesfalse_negatives,用於計算給定精確度的召回率。計算給定精確度值的閾值,並用於評估相應的召回率。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

如果指定 class_id,我們會僅考慮批次中 class_id 高於閾值預測的條目來計算精確度,並計算其中 class_id 確實為正確標籤的比例。

引數

  • precision:範圍在 [0, 1] 中的純量值。
  • num_thresholds:(選用)預設值為 200。用於匹配給定精確度的閾值數量。
  • class_id:(可選)我們想要二元指標的整數類別 ID。這必須位於半開區間 [0, num_classes) 內,其中 num_classes 是預測的最後一個維度。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.RecallAtPrecision(0.8)
>>> m.update_state([0, 0, 1, 1], [0, 0.5, 0.3, 0.9])
>>> m.result()
0.5
>>> 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()
1.0

搭配 compile() API 使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.RecallAtPrecision(precision=0.8)])

[原始碼]

SensitivityAtSpecificity 類別

keras.metrics.SensitivityAtSpecificity(
    specificity, num_thresholds=200, class_id=None, name=None, dtype=None
)

計算特異度 >= 指定值時的最佳靈敏度。

Sensitivity 測量實際正例中被正確識別為正例的比例 (tp / (tp + fn))Specificity 測量實際負例中被正確識別為負例的比例 (tn / (tn + fp))

此指標會建立四個局部變數:true_positivestrue_negativesfalse_positivesfalse_negatives,用於計算給定特異度的靈敏度。計算給定特異度值的閾值,並用於評估相應的靈敏度。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

如果指定 class_id,我們會僅考慮批次中 class_id 高於閾值預測的條目來計算精確度,並計算其中 class_id 確實為正確標籤的比例。

有關特異度和靈敏度的其他資訊,請參閱以下連結

引數

  • specificity:範圍在 [0, 1] 中的純量值。
  • num_thresholds:(選用)預設值為 200。用於匹配給定特異度的閾值數量。
  • class_id:(可選)我們想要二元指標的整數類別 ID。這必須位於半開區間 [0, num_classes) 內,其中 num_classes 是預測的最後一個維度。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.SensitivityAtSpecificity(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result()
0.5
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
...                sample_weight=[1, 1, 2, 2, 1])
>>> m.result()
0.333333

搭配 compile() API 使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.SensitivityAtSpecificity()])

[原始碼]

SpecificityAtSensitivity 類別

keras.metrics.SpecificityAtSensitivity(
    sensitivity, num_thresholds=200, class_id=None, name=None, dtype=None
)

計算靈敏度 >= 指定值時的最佳特異度。

Sensitivity 測量實際正例中被正確識別為正例的比例 (tp / (tp + fn))Specificity 測量實際負例中被正確識別為負例的比例 (tn / (tn + fp))

此指標會建立四個局部變數:true_positivestrue_negativesfalse_positivesfalse_negatives,用於計算給定靈敏度的特異度。計算給定靈敏度值的閾值,並用於評估相應的特異度。

如果 sample_weightNone,則權重預設為 1。使用 0 的 sample_weight 來遮罩值。

如果指定 class_id,我們會僅考慮批次中 class_id 高於閾值預測的條目來計算精確度,並計算其中 class_id 確實為正確標籤的比例。

有關特異度和靈敏度的其他資訊,請參閱以下連結

引數

  • sensitivity:範圍在 [0, 1] 中的純量值。
  • num_thresholds:(選用)預設值為 200。用於匹配給定靈敏度的閾值數量。
  • class_id:(可選)我們想要二元指標的整數類別 ID。這必須位於半開區間 [0, num_classes) 內,其中 num_classes 是預測的最後一個維度。
  • name:(可選)指標實例的字串名稱。
  • dtype:(可選)指標結果的資料類型。

範例

>>> m = keras.metrics.SpecificityAtSensitivity(0.5)
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8])
>>> m.result()
0.66666667
>>> m.reset_state()
>>> m.update_state([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8],
...                sample_weight=[1, 1, 2, 2, 2])
>>> m.result()
0.5

搭配 compile() API 使用

model.compile(
    optimizer='sgd',
    loss='binary_crossentropy',
    metrics=[keras.metrics.SpecificityAtSensitivity()])

[原始碼]

F1Score 類別

keras.metrics.F1Score(average=None, threshold=None, name="f1_score", dtype=None)

計算 F-1 分數。

公式

f1_score = 2 * (precision * recall) / (precision + recall)

這是精確度和召回率的調和平均數。其輸出範圍為 [0, 1]。它適用於多類別和多標籤分類。

引數

  • average:要對資料執行的平均類型。可接受的值為 None"micro""macro""weighted"。預設值為 None。如果為 None,則不會執行平均,且 result() 將回傳每個類別的分數。如果為 "micro",則透過計算總計的真正例、假陰性和假陽性來全域計算指標。如果為 "macro",則計算每個標籤的指標,並回傳它們的未加權平均值。這不會考慮標籤不平衡。如果為 "weighted",則計算每個標籤的指標,並回傳它們的平均值,該平均值會根據支援度(每個標籤的真實實例數)進行加權。這會修改 "macro" 以考慮標籤不平衡。它可能會產生不在精確度和召回率之間的分數。
  • threshold:大於 thresholdy_pred 元素會轉換為 1,其餘為 0。如果 thresholdNone,則 y_pred 的 argmax 會轉換為 1,其餘則為 0。
  • name:選用。指標執行個體的字串名稱。
  • dtype:選用。指標結果的資料類型。

回傳

  • F-1 分數:浮點數。

範例

>>> metric = keras.metrics.F1Score(threshold=0.5)
>>> y_true = np.array([[1, 1, 1],
...                    [1, 0, 0],
...                    [1, 1, 0]], np.int32)
>>> y_pred = np.array([[0.2, 0.6, 0.7],
...                    [0.2, 0.6, 0.6],
...                    [0.6, 0.8, 0.0]], np.float32)
>>> metric.update_state(y_true, y_pred)
>>> result = metric.result()
array([0.5      , 0.8      , 0.6666667], dtype=float32)

[原始碼]

FBetaScore 類別

keras.metrics.FBetaScore(
    average=None, beta=1.0, threshold=None, name="fbeta_score", dtype=None
)

計算 F-Beta 分數。

公式

b2 = beta ** 2
f_beta_score = (1 + b2) * (precision * recall) / (precision * b2 + recall)

這是精確度和召回率的加權調和平均數。其輸出範圍為 [0, 1]。它適用於多類別和多標籤分類。

引數

  • average:在多類別情況下要對每個類別的結果執行的平均類型。可接受的值為 None"micro""macro""weighted"。預設值為 None。如果為 None,則不會執行平均,且 result() 將回傳每個類別的分數。如果為 "micro",則透過計算總計的真正例、假陰性和假陽性來全域計算指標。如果為 "macro",則計算每個標籤的指標,並回傳它們的未加權平均值。這不會考慮標籤不平衡。如果為 "weighted",則計算每個標籤的指標,並回傳它們的平均值,該平均值會根據支援度(每個標籤的真實實例數)進行加權。這會修改 "macro" 以考慮標籤不平衡。它可能會產生不在精確度和召回率之間的分數。
  • beta:決定在精確度和召回率之間的調和平均數中給予召回率的權重(請參閱上面的虛擬碼方程式)。預設值為 1
  • threshold:大於 thresholdy_pred 元素會轉換為 1,其餘為 0。如果 thresholdNone,則 y_pred 的 argmax 會轉換為 1,其餘則為 0。
  • name:選用。指標執行個體的字串名稱。
  • dtype:選用。指標結果的資料類型。

回傳

  • F-Beta 分數:浮點數。

範例

>>> metric = keras.metrics.FBetaScore(beta=2.0, threshold=0.5)
>>> y_true = np.array([[1, 1, 1],
...                    [1, 0, 0],
...                    [1, 1, 0]], np.int32)
>>> y_pred = np.array([[0.2, 0.6, 0.7],
...                    [0.2, 0.6, 0.6],
...                    [0.6, 0.8, 0.0]], np.float32)
>>> metric.update_state(y_true, y_pred)
>>> result = metric.result()
>>> result
[0.3846154 , 0.90909094, 0.8333334 ]