我有依賴于 4 個自變數(x1、x2、x3、x4)的資料,我需要一個模型(在 Python 中可用)來評估資料點之外的 f(x1,x2,x3,x4)。原則上,如果我將 3 個變數設定為常數值,我總是可以使用合理次數 (<5) 的多項式擬合來插入剩余維度中的資料,因此我想生成一個能夠插入的函式使用多元多項式擬合一次所有維度。必須注意的是,底層函式是非線性的(這意味著我應該期望 x1^n*x2^m 形式的項,其中 n,m 不為 0)。你有什么建議嗎?
為了說明,我包含了一小部分資料:
(請注意,某些變數似乎是常數的事實是因為這只是一個小樣本)
x1 x2 x3 x4 f
15 10 5 3 0.621646
15 10 5 5 0.488879
15 10 5 10 0.490204
15 10 7 0 0.616027
15 10 7 0.5 0.615497
15 10 7 1 0.619804
15 10 7 3 0.614494
15 10 7 5 0.556772
15 10 7 10 0.555393
15 20 0.5 0 0.764692
15 20 0.5 0.5 0.78774
15 20 0.5 1 0.799749
15 20 0.5 3 0.567796
15 20 0.5 5 0.328497
15 20 0.5 10 0.0923708
15 20 1 0 0.802219
15 20 1 0.5 0.811475
15 20 1 1 0.822908
15 20 1 3 0.721053
15 20 1 5 0.573549
15 20 1 10 0.206259
15 20 2 0 0.829069
15 20 2 0.5 0.831135
15 0 7 1 0.240144
15 0 7 3 0.258186
15 0 7 5 0.260836
uj5u.com熱心網友回復:
您可以使用該scipy.optimize.curve_fit()功能進行多元曲線擬合。它有據可查,StackOverflow 上有多個關于使用它進行多元擬合的問題和答案。
對于您的情況,這樣的事情可以幫助您開始
import numpy
from scipy.optimize import curve_fit
# Example function to fit to your data
def non_linear_func(x, a, b, c, d):
return x[0] ** a * x[1] ** b x[2] ** c x[3] ** d
# X is your multivariate x data
# f is your y data
# p0 is an initial guess for your a,b,c,d... in your fitting function
p0 = [1,2,3,4]
fitParams, fitCov = curve_fit(non_linear_func, X, y, p0=p0)
有幾件事需要注意,您需要確保您通過的Xand具有正確的尺寸。必須具有 N x M 的維度,其中 N 是您擁有的資料點數,M 是您擁有的自變數數。長度應為 N。ycurve_fit()Xy
您還必須根據您想要的形式定義擬合函式,并嘗試p0對函式中的引數進行初始猜測,以幫助curve_fit找到最佳值。
curve_fit()希望對您有所幫助,關于 StackOverflow上的多變數擬合有很多很好的答案(請參見此處和此處),并且curve_fit 檔案也應該有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/454660.html
