gpt4 book ai didi

python - 使用 IRLS 了解 scipy 的最小二乘函数

转载 作者:太空狗 更新时间:2023-10-29 18:00:56 31 4
gpt4 key购买 nike

我在理解这个函数的工作原理时遇到了一些麻烦。

a, b = scipy.linalg.lstsq(X, w*signal)[0]

我知道 signal 是表示信号的数组,目前 w 只是 [1,1,1,1,1...]

我应该如何操作 Xw 来模拟加权最小二乘法或迭代重新加权最小二乘法?

最佳答案

如果用 sqrt(weight) 乘积 X 和 y,则可以计算加权最小二乘法。您可以通过以下链接获取公式:

http://en.wikipedia.org/wiki/Linear_least_squares_%28mathematics%29#Weighted_linear_least_squares

这是一个例子:

准备数据:

import numpy as np
np.random.seed(0)
N = 20
X = np.random.rand(N, 3)
w = np.array([1.0, 2.0, 3.0])
y = np.dot(X, w) + np.random.rand(N) * 0.1

最小二乘法:

from scipy import linalg
w1 = linalg.lstsq(X, y)[0]
print w1

输出:

[ 0.98561405  2.0275357   3.05930664]

WLS:

weights = np.linspace(1, 2, N)
Xw = X * np.sqrt(weights)[:, None]
yw = y * np.sqrt(weights)
print linalg.lstsq(Xw, yw)[0]

输出:

[ 0.98799029  2.02599521  3.0623824 ]

通过statsmodels查看结果:

import statsmodels.api as sm
mod_wls = sm.WLS(y, X, weights=weights)
res = mod_wls.fit()
print res.params

输出:

[ 0.98799029  2.02599521  3.0623824 ]

关于python - 使用 IRLS 了解 scipy 的最小二乘函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19624997/

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