Python OLS计算

4 投票
2 回答
4560 浏览
提问于 2025-04-16 06:13

有没有什么好的库可以用来在Python中计算线性最小二乘法(OLS,普通最小二乘法)?

谢谢。

编辑:

感谢提到的SciKits和Scipy。 @ars:X可以是一个矩阵吗?举个例子:

y(1) = a(1)*x(11) + a(2)*x(12) + a(3)*x(13)
y(2) = a(1)*x(21) + a(2)*x(22) + a(3)*x(23)
...........................................
y(n) = a(1)*x(n1) = a(2)*x(n2) + a(3)*x(n3)

那么在你的例子中,我该如何传递Y和X矩阵的参数呢?

另外,我的代数基础不太好,如果你们能推荐一些关于这类问题的好教程,我会非常感激。

非常感谢。

2 个回答

4

你有没有看看SciPy这个库?我不确定它是否能做到你想要的,但我觉得它应该可以。

9

试试这个叫做 statsmodels 的包。这里有个简单的例子:

import pylab
import numpy as np
import statsmodels.api as sm

x = np.arange(-10, 10)
y = 2*x + np.random.normal(size=len(x))

# model matrix with intercept
X = sm.add_constant(x)

# least squares fit
model = sm.OLS(y, X)
fit = model.fit()

print fit.summary()

pylab.scatter(x, y)
pylab.plot(x, fit.fittedvalues)

更新 针对更新后的问题,是的,它可以处理矩阵。注意,上面的代码中 x 数据是以数组的形式存在的,但我们构建了一个矩阵 X(大写的X)来传递给 OLSadd_constant 函数的作用是创建一个矩阵,第一列全是1,用于计算截距。在你的情况下,你只需要直接传递你的 X 矩阵,不需要那一步,代码就能正常工作。

撰写回答