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