scipy.special.xlogy#

scipy.special.xlogy(x, y, out=None) = <ufunc 'xlogy'>#

Berechnet x*log(y), sodass das Ergebnis 0 ist, wenn x = 0.

Parameter:
xarray_like

Multiplikator

yarray_like

Argument

outndarray, optional

Optionales Ausgabe-Array für die Funktionsergebnisse

Rückgabe:
zSkalar oder ndarray

Berechnetes x*log(y)

Hinweise

Die bei der Berechnung verwendete Logarithmusfunktion ist der natürliche Logarithmus.

Hinzugefügt in Version 0.13.0.

xlogy hat neben NumPy experimentelle Unterstützung für Backends, die dem Python Array API Standard entsprechen. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie die Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy-, PyTorch-, JAX- oder Dask-Arrays als Array-Argumente bereitstellen. Die folgenden Kombinationen von Backend und Gerät (oder anderen Fähigkeiten) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

Dask

n/a

Siehe Unterstützung für den Array API Standard für weitere Informationen.

Beispiele

Wir können diese Funktion verwenden, um den binären logistischen Verlust, auch bekannt als binäre Kreuzentropie, zu berechnen. Diese Verlustfunktion wird für binäre Klassifikationsprobleme verwendet und ist definiert als

\[\begin{split}L = 1/n * \\sum_{i=0}^n -(y_i*log(y\\_pred_i) + (1-y_i)*log(1-y\\_pred_i))\end{split}\]

Wir können die Parameter x und y als y und y_pred definieren. y ist das Array der tatsächlichen Labels, die hier entweder 0 oder 1 sein können. y_pred ist das Array der vorhergesagten Wahrscheinlichkeiten in Bezug auf die positive Klasse (1).

>>> import numpy as np
>>> from scipy.special import xlogy
>>> y = np.array([0, 1, 0, 1, 1, 0])
>>> y_pred = np.array([0.3, 0.8, 0.4, 0.7, 0.9, 0.2])
>>> n = len(y)
>>> loss = -(xlogy(y, y_pred) + xlogy(1 - y, 1 - y_pred)).sum()
>>> loss /= n
>>> loss
0.29597052165495025

Ein niedrigerer Verlust ist normalerweise besser, da er anzeigt, dass die Vorhersagen den tatsächlichen Labels ähneln. In diesem Beispiel, da unsere vorhergesagten Wahrscheinlichkeiten nahe an den tatsächlichen Labels liegen, erhalten wir einen insgesamt vernünftig niedrigen und angemessenen Verlust.