我有一个功能。例如:
def g(w,d,e):
s = w-1.
s1 = s**d+2.
s2 = 42. + s1*e**(1/2)
return s2
让data = np.array([1,2,3,4,5])
为s2
。但我不知道d
和e
。
我如何估计他们?错误?
它被称为方法" fit"在scipy.stats中进行分发。引擎盖下的这种方法是什么? MLE?采样?函数g
是我的分发函数......
答案 0 :(得分:1)
根据您的问题,您的功能可以写成
def g(w,d,e):
return 42. + ((w-1)**d+2)*e**(1/2)
所以你似乎需要的是一个非线性方程求解器,而不是一个最小化预测值和观测值之间的平方误差的拟合程序。 Scipy提供root功能,可以帮助您做您想做的事情。例如,您可以迭代data
并计算每个data
项的相应参数值
import numpy as np
import scipy.optimize.root as root
sol = []
data = np.array([1,2,3,4,5])
for d in data:
f = lambda x: g(x[0],x[1],x[2])-d
sol.append(root(f,x0).x)
函数参数拟合需要您提供一组独立变量值(x)和观察到的相关值(y)。在拟合期间,您通常会尝试找到最小化预测和观察之间差异的参数。