jax.numpy.polyfit#
- jax.numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)[来源]#
对数据进行最小二乘多项式拟合。
Jax 对
numpy.polyfit()的实现。给定一组数据点
(x, y)和多项式次数deg,该函数找到一个形式为\[y = p(x) = p[0] x^{deg} + p[1] x^{deg - 1} + ... + p[deg]\]- 参数:
x (ArrayLike) – 形状为
(M,)的数据点数组。y (ArrayLike) – 形状为
(M,)或(M, K)的数据点数组。deg (int) – 多项式的次数。必须静态指定。
rcond (float | None) – 拟合的相对条件数。默认值为
len(x) * eps。必须静态指定。full (bool) – 控制返回值。默认为
False,将返回值限制为多项式系数数组p。如果为True,则函数返回一个元组(p, resids, rank, s, rcond)。必须静态指定。w (ArrayLike | None) – 权重数组,形状为
(M,)。如果为 None,则所有数据点都被认为具有相等的权重。如果不为 None,则权重 \(w_i\) 应用于 \(x_i\) 处 \(y_i - \widehat{y}_i\) 的未平方残差,其中 \(\widehat{y}_i\) 是 \(y_i\) 的拟合值。默认为 None。cov (bool) – 布尔值或字符串。如果为
True,则返回按resids/(M-deg-1)缩放的协方差矩阵以及多项式系数。如果cov='unscaled',则返回协方差矩阵的未缩放版本。默认为False。如果full=True,则忽略cov。必须静态指定。
- 返回:
如果
full=False且cov=False,则为多项式系数数组p。如果
full=True,则为数组元组(p, resids, rank, s, rcond)。其中p是一个形状为(M,)或(M, K)的数组,包含多项式系数。resids是残差平方和,形状为 () 或 (K,)。rank是矩阵x的秩。s是矩阵x的奇异值。rcond作为数组。
如果
full=False且cov=True,则为数组元组(p, C)。其中p是一个形状为(M,)或(M, K)的数组,包含多项式系数。C是多项式系数的协方差矩阵,形状为(deg + 1, deg + 1)或(deg + 1, deg + 1, 1)。
- 返回类型:
注意
与
numpy.polyfit()实现不同,jax.numpy.polyfit()不会对表明矩阵病态的秩亏损发出警告。另请参阅
jax.numpy.poly(): 查找给定根序列的多项式系数。jax.numpy.polyval(): 在特定值处求多项式。jax.numpy.roots(): 计算给定系数的多项式的根。
示例
>>> x = jnp.array([3., 6., 9., 4.]) >>> y = jnp.array([[0, 1, 2], ... [2, 5, 7], ... [8, 4, 9], ... [1, 6, 3]]) >>> p = jnp.polyfit(x, y, 2) >>> with jnp.printoptions(precision=2, suppress=True): ... print(p) [[ 0.2 -0.35 -0.14] [-1.17 4.47 2.96] [ 1.95 -8.21 -5.93]]
如果
full=True,则返回如下数组元组:>>> p, resids, rank, s, rcond = jnp.polyfit(x, y, 2, full=True) >>> with jnp.printoptions(precision=2, suppress=True): ... print("Polynomial Coefficients:", "\n", p, "\n", ... "Residuals:", resids, "\n", ... "Rank:", rank, "\n", ... "s:", s, "\n", ... "rcond:", rcond) Polynomial Coefficients: [[ 0.2 -0.35 -0.14] [-1.17 4.47 2.96] [ 1.95 -8.21 -5.93]] Residuals: [0.37 5.94 0.61] Rank: 3 s: [1.67 0.47 0.04] rcond: 4.7683716e-07
如果
cov=True且full=False,则返回包含多项式系数和协方差矩阵的数组元组。>>> p, C = jnp.polyfit(x, y, 2, cov=True) >>> p.shape, C.shape ((3, 3), (3, 3, 3))