gluonts.mx.distribution.box_cox_transform 模块#
- class gluonts.mx.distribution.box_cox_transform.BoxCoxTransform(lambda_1: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], lambda_2: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], tol_lambda_1: float = 0.01, F=None)[source]#
- 基类: - gluonts.mx.distribution.bijection.Bijection- 实现单变量随机变量的 Box-Cox 变换。 - 观测值 \(z\) 的 Box-Cox 变换由下式给出 \[\begin{split}BoxCox(z; \lambda_1, \lambda_2) = \begin{cases} ((z + \lambda_2)^{\lambda_1} - 1) / \lambda_1, \quad & \text{如果 } \lambda_1 \neq 0, \\ \log (z + \lambda_2), \quad & \text{否则.} \end{cases}\end{split}\]- 其中 \(\lambda_1\) 和 \(\lambda_2\) 是可学习参数。注意,变换的定义域没有限制。 - 为了数值稳定性,我们不检查 \(\lambda_1\) 是否精确为零,而是使用以下条件 \[|\lambda_1| < tol\_lambda\_1\]- 对于预先指定的容差 tol_lambda_1。 - Box-Cox 变换的逆变换由下式给出 \[\begin{split}BoxCox^{-1}(y; \lambda_1, \lambda_2) = \begin{cases} (y \lambda_1 + 1)^{(1/\lambda_1)} - \lambda_2, \quad & \text{if } \lambda_1 \neq 0, \\ \exp (y) - \lambda_2, \quad & \text{otherwise.} \end{cases}\end{split}\]- 关于数值稳定性的注意事项 - 1. 对于正向变换,必须始终选择 \(\lambda_2\) 以满足 \[z + \lambda_2 > 0.\]- 要实现这一点,需要预先知道观测值的下界。由于 \(\lambda_2\) 是可学习的,这在 BoxCoxTransformOutput 中设置。 - 2. 类似地,为了使逆变换可靠工作,一个充分条件是 \[y \lambda_1 + 1 \geq 0,\]- 其中 \(y\) 是逆变换的输入。 - 这不能总是保证,特别是当 \(y\) 是从变换后的分布中采样时。因此,我们总是将 \(y \lambda_1 + 1\) 在零处截断。 - 一个例子说明这种情况可能在我们这里发生:考虑用参数对单位区间 (0, 1) 的观测值进行变换 \[\begin{split}\begin{align} \lambda_1 = &\ 1.1, \\ \lambda_2 = &\ 0. \end{align}\end{split}\]- 则变换的范围是 (-0.9090, 0.0)。如果将高斯分布拟合到变换后的观测值并从中采样,则样本很可能落在此范围之外,例如当均值接近 -0.9 时。随后的样本的逆变换就不再是实数了。 - >>> y = -0.91 >>> lambda_1 = 1.1 >>> lambda_2 = 0.0 >>> (y * lambda_1 + 1) ** (1 / lambda_1) + lambda_2 (-0.0017979146510711471+0.0005279153735965289j) - 参数
- lambda_1 – 
- lambda_2 – 
- tol_lambda_1 – 为数值稳定性,如果 lambda_1 小于 tol_lambda_1,则将其视为零 
- F – 
 
 - arg_names = ['box_cox.lambda_1', 'box_cox.lambda_2']#
 - property args: List#
- 参数的当前值 - 类型
- List 
 
 - property event_dim: int#
 - f(z: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
- 观测值 z 的正向变换 - 参数
- z – 观测值 
- 返回
- 变换后的观测值 
- 返回类型
- Tensor 
 
 - f_inv(y: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
- Box-Cox 变换的逆变换。 - 参数
- y – 变换后的观测值 
- 返回
- 观测值 
- 返回类型
- Tensor 
 
 - log_abs_det_jac(z: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], y: Optional[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]] = None) Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol][source]#
- 对应于 Box-Cox 变换的雅可比行列式的绝对值的对数由下式给出。 \[\begin{split}\log \frac{d}{dz} BoxCox(z; \lambda_1, \lambda_2) = \begin{cases} \log (z + \lambda_2) (\lambda_1 - 1), \quad & \text{if } \lambda_1 \neq 0, \\ -\log (z + \lambda_2), \quad & \text{otherwise.} \end{cases}\end{split}\]- 注意,变换的导数总是非负的。 - 参数
- z – 观测值 
- y – 未使用 
 
- 返回类型
- Tensor 
 
 - property sign: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]#
- 返回雅可比行列式的符号。 
 
- class gluonts.mx.distribution.box_cox_transform.BoxCoxTransformOutput(lb_obs: float = 0.0, fix_lambda_2: bool = True)[source]#
- 基类: - gluonts.mx.distribution.bijection_output.BijectionOutput- args_dim: Dict[str, int] = {'box_cox.lambda_1': 1, 'box_cox.lambda_2': 1}#
 - domain_map(F, *args: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol]) Tuple[Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], ...][source]#
 - property event_shape: Tuple#
 
- class gluonts.mx.distribution.box_cox_transform.InverseBoxCoxTransform(lambda_1: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], lambda_2: Union[mxnet.ndarray.ndarray.NDArray, mxnet.symbol.symbol.Symbol], tol_lambda_1: float = 0.01, F=None)[source]#
- 基类: - gluonts.mx.distribution.bijection.InverseBijection- 将 Box-Cox 变换的逆变换作为双射实现。 - arg_names = ['box_cox.lambda_1', 'box_cox.lambda_2']#
 - property event_dim: int#
 
- class gluonts.mx.distribution.box_cox_transform.InverseBoxCoxTransformOutput(lb_obs: float = 0.0, fix_lambda_2: bool = True)[source]#
- 基类: - gluonts.mx.distribution.box_cox_transform.BoxCoxTransformOutput- args_dim: Dict[str, int] = {'box_cox.lambda_1': 1, 'box_cox.lambda_2': 1}#
 - property event_shape: Tuple#