gpt4 book ai didi

Python lmfit - 线性回归中的截距估计为何取决于起始值?

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:37 31 4
gpt4 key购买 nike

我试图弄清楚如何使用 lmfit 进行截距估计包会产生不同的结果,具体取决于起始值。我使用 statsmodels 将估计结果与标准 OLS 估计结果进行比较。有人可以帮忙吗?

代码:

from lmfit import minimize, Parameters
import numpy as np
import statsmodels.api as sm

x = np.linspace(0, 15, 10)
x_ols = sm.add_constant(x)
y = range(0,10)

model = sm.OLS(y,x_ols)
results = model.fit()
print "OLS: ", format(results.params[0], '.10f'), format(results.params[1], '.10f')


# define objective function: returns the array to be minimized
def fcn2min(params, x, data):
a = params['a'].value
b = params['b'].value

model = a + b * x
return model - data

for i in range(-2,3):
# create a set of Parameters
params = Parameters()
params.add('a', value= i)
params.add('b', value= 20)

# do fit, here with leastsq model
result = minimize(fcn2min, params, args=(x, y))
# print "lmfit: ",result.values # older usage
print "lmfit: ",result.params.values # newer syntax

最佳答案

如果您查看结果,您会发现该常数在 scipy.optimize.leastsq 的默认容差附近接近于零。

OLS:  -0.0000000000 0.6000000000
lmfit: {'a': 1.1967327242889913e-08, 'b': 0.59999999932429748}
lmfit: {'a': 3.2643846243929039e-08, 'b': 0.59999999717671448}
lmfit: {'a': 3.2644232427278463e-08, 'b': 0.59999999717679642}
lmfit: {'a': 1.636450187584131e-08, 'b': 0.59999999900662315}
lmfit: {'a': 3.3578611617157454e-08, 'b': 0.59999999693286854}

如果我使所需的公差更严格,则常数的估计值会更接近于零,并且两个估计系数都会更接近 OLS 解。

xtol 添加到代码后

result = minimize(fcn2min, params, args=(x, y), xtol=1e-12)

我得到:

OLS:  -0.0000000000 0.6000000000
lmfit: {'a': -3.5437341988915725e-32, 'b': 0.59999999999999998}
lmfit: {'a': -1.8490806236697864e-32, 'b': 0.59999999999999998}
lmfit: {'a': -9.8614500814838325e-32, 'b': 0.59999999999999998}
lmfit: {'a': 8.328833474508222e-09, 'b': 0.59999999921839664}
lmfit: {'a': -5.8547746020524404e-32, 'b': 0.59999999999999998}

OLS 使用线性代数来获得显式解(基于广义逆,pinv)。因此数值精度很高。

非线性优化使用迭代解决方案,并在达到所需公差范围内时停止。

示例中仍有一种情况仅在 8e-9 处正确,但这也可能是因为梯度的数值近似以及影响收敛检查的其他因素。

关于Python lmfit - 线性回归中的截距估计为何取决于起始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22580946/

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