如何在 python 中为多维数据实现非线性最小二乘法?
How do I implement non-linear least squares for multidemnsional data in python?
我必须为此模型函数实现最小二乘拟合算法
Y = a_0 * e^(a_1*x_1+a_2*x_2+...+a_n*x_n)
我找到的方法是定义函数来计算残差并将其传递给 scipy.optimize.leastsq 或 lmfit。然而,当参数是矢量而不是单个值时,我无法使用多维数据。
def residual(variables,X,y):
a_0 = variables[0]
a = variables[1]
return (y - a_0 * np.exp(X.dot(a)))**2
X = np.random.randn(100,5)
y = np.random.randint(low=0,high=2,size=100)
a_0 = 1
a = np.random.randn(X.shape[1])
leastsq(residual,[a_0,a],args=(X,y))
我收到这个错误。
ValueError: setting an array element with a sequence.
你能从这里指出正确的行动方案吗?
我认为像这样的东西应该可以完成工作:
def residual(variables,X,y):
a_0 = variables[0]
a = variables[1:]
return (y - a_0 * np.exp(X.dot(a)))**2
X = np.random.randn(100,5)
y = np.random.randint(low=0,high=2,size=100)
a = np.random.randn(X.shape[1]+1)
a[0] = 1
res = scipy.optimize.leastsq(residual,a,args=(X,y))
此致
我必须为此模型函数实现最小二乘拟合算法
Y = a_0 * e^(a_1*x_1+a_2*x_2+...+a_n*x_n)
我找到的方法是定义函数来计算残差并将其传递给 scipy.optimize.leastsq 或 lmfit。然而,当参数是矢量而不是单个值时,我无法使用多维数据。
def residual(variables,X,y):
a_0 = variables[0]
a = variables[1]
return (y - a_0 * np.exp(X.dot(a)))**2
X = np.random.randn(100,5)
y = np.random.randint(low=0,high=2,size=100)
a_0 = 1
a = np.random.randn(X.shape[1])
leastsq(residual,[a_0,a],args=(X,y))
我收到这个错误。
ValueError: setting an array element with a sequence.
你能从这里指出正确的行动方案吗?
我认为像这样的东西应该可以完成工作:
def residual(variables,X,y):
a_0 = variables[0]
a = variables[1:]
return (y - a_0 * np.exp(X.dot(a)))**2
X = np.random.randn(100,5)
y = np.random.randint(low=0,high=2,size=100)
a = np.random.randn(X.shape[1]+1)
a[0] = 1
res = scipy.optimize.leastsq(residual,a,args=(X,y))
此致