当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy stats.boxcox_normmax用法及代码示例


本文简要介绍 python 语言中 scipy.stats.boxcox_normmax 的用法。

用法:

scipy.stats.boxcox_normmax(x, brack=None, method='pearsonr', optimizer=None)#

计算输入数据的最佳Box-Cox 变换参数。

参数

x array_like

输入数组。所有条目必须是正数、有限实数。

brack 2 元组,可选,默认 (-2.0, 2.0)

默认 optimize.brent 解算器的下坡括号搜索的起始间隔。请注意,这在大多数情况下并不重要;最终结果允许在这个括号之外。如果优化器通过,brack 必须为 None。

method str,可选

确定最优变换参数的方法( boxcox lmbda参数)。选项是:

‘pearsonr’(默认)

最大化 Pearson 相关系数y = boxcox(x)和预期值y如果x将是normally-distributed。

‘mle’

最大化对数似然 boxcox_llf 。这是 boxcox 中使用的方法。

‘all’

使用所有可用的优化方法,并返回所有结果。有助于比较不同的方法。

optimizer 可调用的,可选的

优化器是一个接受一个参数的可调用对象:

乐趣 可调用的

要最小化的目标函数。 fun 接受一个参数,即 Box-Cox 变换参数 lmbda,并返回所提供参数处的函数值(例如负对数似然)。优化器的工作是找到使乐趣最小化的 lmbda 值。

并返回一个对象,例如scipy.optimize.OptimizeResult,它持有的最优值lmbda在一个属性中x.

有关详细信息,请参阅下面的示例或 scipy.optimize.minimize_scalar 的文档。

返回

maxlog 浮点数或 ndarray

找到的最佳变换参数。 method='all' 的数组而不是标量。

例子

>>> import numpy as np
>>> from scipy import stats
>>> import matplotlib.pyplot as plt

我们可以通过各种方式生成一些数据并确定最佳lmbda

>>> rng = np.random.default_rng()
>>> x = stats.loggamma.rvs(5, size=30, random_state=rng) + 5
>>> y, lmax_mle = stats.boxcox(x)
>>> lmax_pearsonr = stats.boxcox_normmax(x)
>>> lmax_mle
2.217563431465757
>>> lmax_pearsonr
2.238318660200961
>>> stats.boxcox_normmax(x, method='all')
array([2.23831866, 2.21756343])
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> prob = stats.boxcox_normplot(x, -10, 10, plot=ax)
>>> ax.axvline(lmax_mle, color='r')
>>> ax.axvline(lmax_pearsonr, color='g', ls='--')
>>> plt.show()
scipy-stats-boxcox_normmax-1_00_00.png

或者,我们可以定义自己的优化器函数。假设我们只对值感兴趣lmbda在区间 [6, 7] 上,我们要使用scipy.optimize.minimize_scalarmethod='bounded',并且我们希望在优化对数似然函数时使用更严格的容差。为此,我们定义一个接受位置参数的函数乐趣和用途scipy.optimize.minimize_scalar尽量减少乐趣受限于提供的界限和公差:

>>> from scipy import optimize
>>> options = {'xatol': 1e-12}  # absolute tolerance on `x`
>>> def optimizer(fun):
...     return optimize.minimize_scalar(fun, bounds=(6, 7),
...                                     method="bounded", options=options)
>>> stats.boxcox_normmax(x, optimizer=optimizer)
6.000...

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.boxcox_normmax。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。