gpt4 book ai didi

python - 使用 numpy.polyfit 提取多变量方程系数

转载 作者:行者123 更新时间:2023-12-01 08:23:00 26 4
gpt4 key购买 nike

这是一旦回答后可能会变得完全显而易见的问题之一,但现在我陷入困境。

我正在尝试根据结果数据集和产生它的四个参数重新创建一个方程。

数据位于矩阵中,最后一列是结果。

我看到了numpy.polyfit允许 y 具有多个值,所以我尝试了...

result=data[:,-1]
variables=data[:,0:-1]
factors=numpy.polyfit(result,variables,2)

结果是:

[[-4.69652251e-01  8.09734523e-01  1.93673361e-02 -1.62700198e+00]
[ 1.42092582e+01 -7.06024402e+00 -9.94583683e-02 1.11882833e+01]
[ 7.44030682e+00 2.08161127e+01 2.65025708e-01 1.14229534e+01]]

我假设结果系数的形式为

[[A^2,B^2,C^2,D^2]
[A ,B, C, D]
[const,const,const,const]]

这有点令人费解,特别是因为如果我将系数应用于输入数据,我似乎没有得到任何接近结果数据的东西。

首先,我对 polyfit 结果的含义是否正确?

第二,为什么有四个不同的常量?我应该将它们加在一起,还是什么?

这是否只是解决A与结果,然后B与结果等,而不是整体的组合多维最小化? (如果是这样,我该怎么做?)

或者我只是误导了polyfit首先在做什么?

最佳答案

Polyfit docs告诉我们

Several data sets of sample points sharing the same x-coordinates can be fitted at once by passing in a 2D-array that contains one dataset per column.

让我们来理解一下。首先,让我们考虑一个例子。假设我们在平面上有 3 个点,并且想要通过 1 次多项式对它们进行插值。这意味着我们想要通过给定的 3 个点绘制一条线,并且该线到该点的平方距离应该最小。假设我们有 3 个点:(1, 1)、(2, 2)、(3, 3)。显然,可以毫无错误地找到经过这些点的直线,这条直线就是y = x。如果我们用y = a * x + b来思考直线,那么a = 1, b = 0line y=x

好。现在让我们从 numpy polyfit 的示例开始:

X = np.array([1, 2, 3])
y = np.array([1, 2, 3])

a, b = np.polyfit(X, y, deg=1)

(a, b)
>>> (0.9999999999999997, 1.2083031466395714e-15)

a * 1000 + b
>>> 999.9999999999997

不错。现在让我们用矩阵而不是 y 的一个向量来举例。文档告诉我们,我们只是有多条具有相同 X 坐标的线。让我们检查一下。我们采用两组点:(1, 1), (2, 2), (3, 3) 以及适合它们的直线 y = x(1, 2), (2, 4), (3, 6)。拟合线为y = 2x(检查!)。

two lines

我们正在转置第二个矩阵,因为 polyfit 需要它。

X = np.array([1, 2, 3])
y = np.array([[1, 2, 3], [2, 4, 6]]).T
coeff = np.polyfit(X, y, deg=1)

coeff
>>> array([[1.00000000e+00, 2.00000000e+00],
[1.20830315e-15, 2.41660629e-15]])

我们看到一个矩阵,第一行 (1, 2) 和第二行 (0, 0)。因此,第一列包含第一行的系数,第二列包含第二行的系数。让我们检查一下:

a, b = coeff[:, 0]
a * 10 + b
>>> 9.999999999999998

a, b = coeff[:, 1]
a * 100 + b
>>> 199.99999999999994

因此,您可以传递具有相同 X 坐标的多条线并同时获得多个拟合。例如,它对于转换整组数据的特征很有用。

关于python - 使用 numpy.polyfit 提取多变量方程系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54503836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com