class_likelihood_ratios#

sklearn.metrics.class_likelihood_ratios(y_true, y_pred, *, labels=None, sample_weight=None, raise_warning='deprecated', replace_undefined_by=nan)[Quelle]#

Berechnet die positiven und negativen Likelihood-Verhältnisse für die binäre Klassifikation.

Das positive Likelihood-Verhältnis ist LR+ = Sensitivität / (1 - Spezifität), wobei die Sensitivität oder der Recall das Verhältnis tp / (tp + fn) ist und die Spezifität tn / (tn + fp) ist. Das negative Likelihood-Verhältnis ist LR- = (1 - Sensitivität) / Spezifität. Hier ist tp die Anzahl der True Positives, fp die Anzahl der False Positives, tn die Anzahl der True Negatives und fn die Anzahl der False Negatives. Beide Klassen-Likelihood-Verhältnisse können verwendet werden, um Post-Test-Wahrscheinlichkeiten zu erhalten, gegeben eine Pre-Test-Wahrscheinlichkeit.

LR+ reicht von 1,0 bis unendlich. Ein LR+ von 1,0 bedeutet, dass die Wahrscheinlichkeit, die positive Klasse vorherzusagen, für Stichproben, die zu beiden Klassen gehören, gleich ist; daher ist der Test nutzlos. Je größer LR+ ist, desto wahrscheinlicher ist eine positive Vorhersage ein True Positive im Vergleich zur Pre-Test-Wahrscheinlichkeit. Ein Wert von LR+ kleiner als 1,0 ist ungültig, da er bedeuten würde, dass die Chancen, dass eine Stichprobe ein True Positive ist, im Vergleich zu den Pre-Test-Chancen sinken.

LR- reicht von 0,0 bis 1,0. Je näher er an 0,0 liegt, desto geringer ist die Wahrscheinlichkeit, dass eine gegebene Stichprobe ein False Negative ist. Ein LR- von 1,0 bedeutet, dass der Test nutzlos ist, da sich die Chancen, die Bedingung zu haben, nach dem Test nicht geändert haben. Ein Wert von LR- größer als 1,0 macht den Klassifikator ungültig, da er eine Erhöhung der Chancen anzeigt, dass eine Stichprobe zur positiven Klasse gehört, nachdem sie als negativ klassifiziert wurde. Dies ist der Fall, wenn der Klassifikator systematisch das Gegenteil des wahren Labels vorhersagt.

Eine typische Anwendung in der Medizin ist die Identifizierung der positiven/negativen Klasse für das Vorhandensein/Nichtvorhandensein einer Krankheit. Der Klassifikator ist ein diagnostischer Test; die Pre-Test-Wahrscheinlichkeit, dass eine Person die Krankheit hat, kann die Prävalenz dieser Krankheit sein (Anteil einer bestimmten Bevölkerung, der von einer medizinischen Erkrankung betroffen ist); und die Post-Test-Wahrscheinlichkeiten wären die Wahrscheinlichkeit, dass die Erkrankung nach einem positiven Testergebnis tatsächlich vorliegt.

Lesen Sie mehr im Benutzerhandbuch.

Parameter:
y_true1D Array-ähnlich oder Label-Indikator-Array / Sparse Matrix

Wahre (korrekte) Zielwerte. Sparse Matrix wird nur unterstützt, wenn die Ziele vom Typ Multilabel sind.

y_pred1D Array-ähnlich oder Label-Indikator-Array / Sparse Matrix

Geschätzte Ziele, wie sie von einem Klassifikator zurückgegeben werden. Sparse Matrix wird nur unterstützt, wenn die Ziele vom Typ Multilabel sind.

labelsarray-artig, Standardwert=None

Liste der Labels, um die Matrix zu indizieren. Dies kann verwendet werden, um die positive und negative Klasse mit der Reihenfolge labels=[negative_Klasse, positive_Klasse] auszuwählen. Wenn None angegeben wird, werden diejenigen verwendet, die mindestens einmal in y_true oder y_pred vorkommen, in sortierter Reihenfolge.

sample_weightarray-like der Form (n_samples,), Standardwert=None

Stichprobengewichte.

raise_warningbool, Standard=True

Ob eine fallbezogene Warnmeldung ausgegeben wird, wenn eine Division durch Null auftritt.

Veraltet seit Version 1.7: raise_warning wurde in Version 1.7 als veraltet markiert und wird in Version 1.9 entfernt, wenn eine UndefinedMetricWarning im Falle einer Division durch Null immer ausgelöst wird.

replace_undefined_bynp.nan, 1.0 oder dict, Standard=np.nan

Legt die Rückgabewerte für LR+ und LR- fest, wenn eine Division durch Null auftritt. Kann die folgenden Werte annehmen:

  • np.nan, um np.nan für sowohl LR+ als auch LR- zurückzugeben

  • 1.0, um die schlechtesten möglichen Werte zurückzugeben: {"LR+": 1.0, "LR-": 1.0}

  • ein dict im Format {"LR+": wert_1, "LR-": wert_2}, wobei die Werte nicht-negative Gleitkommazahlen, np.inf oder np.nan im Bereich der Likelihood-Verhältnisse sein können. Zum Beispiel kann {"LR+": 1.0, "LR-": 1.0} verwendet werden, um die schlechtesten Ergebnisse zurückzugeben, was auf ein nutzloses Modell hindeutet, und {"LR+": np.inf, "LR-": 0.0} kann verwendet werden, um die besten Ergebnisse zurückzugeben, was auf ein nützliches Modell hindeutet.

Wenn eine Division durch Null auftritt, wird nur die betroffene Metrik durch den festgelegten Wert ersetzt; die andere Metrik wird wie gewohnt berechnet.

Hinzugefügt in Version 1.7.

Gibt zurück:
(positive_likelihood_ratio, negative_likelihood_ratio)tuple von float

Ein Tupel aus zwei Gleitkommazahlen, die erste enthält das positive Likelihood-Verhältnis (LR+) und die zweite das negative Likelihood-Verhältnis (LR-).

Warnungen:
Löst UndefinedMetricWarning aus, wenn y_true und
y_pred zu den folgenden Bedingungen führen:
  • Die Anzahl der False Positives ist 0 und raise_warning ist auf True (Standard) gesetzt: das positive Likelihood-Verhältnis ist undefiniert.

  • Die Anzahl der True Negatives ist 0 und raise_warning ist auf True (Standard) gesetzt: das negative Likelihood-Verhältnis ist undefiniert.

  • Die Summe der True Positives und False Negatives ist 0 (keine Stichproben der positiven Klasse sind in y_true vorhanden): beide Likelihood-Verhältnisse sind undefiniert.

Für die ersten beiden Fälle kann eine undefinierte Metrik definiert werden, indem der Parameter replace_undefined_by gesetzt wird.

Referenzen

Beispiele

>>> import numpy as np
>>> from sklearn.metrics import class_likelihood_ratios
>>> class_likelihood_ratios([0, 1, 0, 1, 0], [1, 1, 0, 0, 0])
(1.5, 0.75)
>>> y_true = np.array(["non-cat", "cat", "non-cat", "cat", "non-cat"])
>>> y_pred = np.array(["cat", "cat", "non-cat", "non-cat", "non-cat"])
>>> class_likelihood_ratios(y_true, y_pred)
(1.33, 0.66)
>>> y_true = np.array(["non-zebra", "zebra", "non-zebra", "zebra", "non-zebra"])
>>> y_pred = np.array(["zebra", "zebra", "non-zebra", "non-zebra", "non-zebra"])
>>> class_likelihood_ratios(y_true, y_pred)
(1.5, 0.75)

Um Mehrdeutigkeiten zu vermeiden, verwenden Sie die Notation labels=[negative_Klasse, positive_Klasse]

>>> y_true = np.array(["non-cat", "cat", "non-cat", "cat", "non-cat"])
>>> y_pred = np.array(["cat", "cat", "non-cat", "non-cat", "non-cat"])
>>> class_likelihood_ratios(y_true, y_pred, labels=["non-cat", "cat"])
(1.5, 0.75)