scipy.special.xlogy#
- scipy.special.xlogy(x, y, out=None) = <ufunc 'xlogy'>#
计算
x*log(y)
,以便在x = 0
时结果为 0。- 参数:
- xarray_like
乘数
- yarray_like
参数
- outndarray, optional
用于函数结果的可选输出数组
- 返回值:
- z标量或 ndarray
计算得到的 x*log(y)
注释
计算中使用的对数函数是自然对数。
添加于 0.13.0 版本。
xlogy
除了 NumPy 之外,还实验性地支持与 Python Array API 标准兼容的后端。 请考虑通过设置环境变量SCIPY_ARRAY_API=1
并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。 支持以下后端和设备(或其他功能)的组合。库
CPU
GPU
NumPy
✅
不适用
CuPy
不适用
✅
PyTorch
✅
✅
JAX
✅
✅
Dask
✅
不适用
有关更多信息,请参阅 对数组 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
较低的损失通常更好,因为它表明预测与实际标签相似。 在此示例中,由于我们的预测概率接近实际标签,因此我们获得的总体损失相当低且适当。