为什么在线性回归的情况下需要独立特征矩阵的转置?

数据挖掘 线性回归 线性代数
2022-03-11 11:17:46

我可以遵循经典的线性回归步骤:

Xw=y

X1Xw=X1y

Iw=X1y

w=X1y

但是,在 Python 中实现时,我发现不是简单地使用

w = inv(X).dot(y)

他们申请

w = inv(X.T.dot(X)).dot(X.T).dot(y)

这里的转置和两次乘法的解释是什么?我很困惑...

3个回答

OLS(线性回归)将通过以下方式解决:

(XX)1Xy=β^.

假设 Python 中的矩阵X(每行的第一列等于 1 以模拟截距)和向量y,您可以通过以下方式求解β^

np.linalg.inv(X.T @ X) @ X.T @ y

这个答案来自一组权重(或),它分析地解决了定义为的成本函数wθ

J(θ)=(Xθy)T(Xθy)

(有关更多信息,请参见此处

扩展我们得到的成本函数

J(θ)=θTXTXθ2yTXθ+yTy

(请注意,所有三个术语都是缩放器)

在我们进行下一步之前,我们需要复习一下矩阵的导数

一些常用的矩阵导数公式供参考:

(AX)X=AT ; (XTA)X=A ; (XTX)X=2X ; (XTAX)X=AX+ATX

使用这些规则,我们可以得到成本函数关于θ

J(θ)θ=2XTXθ2XTy

将此设置为 0 我们得到

2XTXθ2XTy=0

求解我们得到θ

θ=(XTX)1XTy

写在代码中

w = inv(X.T.dot(X)).dot(X.T).dot(y)

希望这可以帮助。

你的程序不正确。您正在使用逆(在一般情况下不存在)。你必须使用转置。

y=Xβ
XTy=XTXβ
β^=[XTX]1XTy

您可能会问为什么我们要乘以转置。一般来说,你的数据矩阵不是正方形的,因此它是不可逆的。为了得到正方形格式/尺寸的东西,我们乘以如果行(观察)和列(特征、输入),则转置有行和列。因此作为其维度的平方。在大多数情况下,我们可以反转这个产品。XXTXnmmnXTXm×m