scipy.special.xlogy#

scipy.special.xlogy(x, y, выход=None) = 'xlogy'>#

Вычислить x*log(y) так, чтобы результат был 0, если x = 0.

Параметры:
xarray_like

Множитель

yarray_like

Аргумент

выходndarray, необязательно

Необязательный выходной массив для результатов функции

Возвращает:
zскаляр или ndarray

Вычислено x*log(y)

Примечания

Логарифмическая функция, используемая в вычислениях, — это натуральный логарифм.

Добавлено в версии 0.13.0.

xlogy имеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окружения SCIPY_ARRAY_API=1 и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).

Библиотека

CPU

GPU

NumPy

н/д

CuPy

н/д

PyTorch

JAX

Dask

н/д

См. Поддержка стандарта array API для получения дополнительной информации.

Примеры

Мы можем использовать эту функцию для вычисления бинарной логистической потери, также известной как бинарная кросс-энтропия. Эта функция потерь используется для бинарных задач классификации и определяется как:

\[\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}\]

Мы можем определить параметры x и y как y и y_pred соответственно. y - массив фактических меток, которые здесь могут быть либо 0, либо 1. y_pred - массив предсказанных вероятностей относительно положительного класса (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

Меньшая потеря обычно лучше, так как указывает на то, что предсказания похожи на фактические метки. В этом примере, поскольку наши предсказанные вероятности близки к фактическим меткам, мы получаем общую потерю, которая достаточно мала и уместна.