scipy.special.xlogy#
- scipy.special.xlogy(x, y, out=None) = <ufunc 'xlogy'>#
Berechnet
x*log(y), sodass das Ergebnis 0 ist, wennx = 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.
xlogyhat 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 UmgebungsvariableSCIPY_ARRAY_API=1setzen 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.