在 python 中计算回归系数的最简单方法是什么?

What's the easiest way to calculate regression coefficient in python?

我有一个 100 x 1 的响应变量 Y 和一个 100 x 3 的预测矩阵 X。我想计算回归系数 (X'X)^{-1}X'Y。

目前我是这样操作的:

invXpX=inv(np.dot(np.transpose(X),X))
XpY=np.dot(np.transpose(X),Y)
betahat=np.dot(invXpX,XpY)

这看起来很麻烦,而在 MATLAB 中我们可以像原来的数学公式一样完成它:inv(X'*X)*X'*Y。在python中有没有更简单的方法来计算这个回归系数? 谢谢!

是的,它可以写得更紧凑,但请注意,这并不总是会提高您的代码或可读性。

可以使用点 T (.T) 找到 numpy 数组的转置。如果你使用 numpy 矩阵而不是 numpy 数组,你也可以使用 .I 作为逆,但我建议你使用 ndarray。对于点积,您可以使用 @。因此 np.dot(X,Y) = X.dot(Y)XY 是 numpy 数组时。

import numpy as np
# Simulate data using a quadratic equation with coefficients y=ax^2+bx+c 
a, b, c = 1, 2, 3
x = np.arange(100)
# Add random component to y values for estimation
y = a*x**2 + b*x + c + np.random.randn(100)
# Get X matrix [100x3]
X = np.vstack([x**2, x, np.ones(x.shape)]).T

# Estimate coefficients a, b, c
x_hat = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
>>> array([0.99998334, 2.00246583, 2.95697339])
x_hat = np.linalg.inv(X.T@(X))@(X.T)@(y)
>>> array([0.99998334, 2.00246583, 2.95697339])

# Use matrix:
X_mat = np.matrix(X)
x_hat = (X_mat.T@X_mat).I@X_mat.T@y
>>> matrix([[0.99998334, 2.00246583, 2.95697339]])

# without noise:
y = a*x**2 + b*x + c 
x_hat = (X_mat.T@X_mat).I@X_mat.T@y
>>> matrix([[1., 2., 3.]])

你可以试试这个:

np.invert(X.T @ X) @ (X.T @ Y)