我可以遵循经典的线性回归步骤:
但是,在 Python 中实现时,我发现不是简单地使用
w = inv(X).dot(y)
他们申请
w = inv(X.T.dot(X)).dot(X.T).dot(y)
这里的转置和两次乘法的解释是什么?我很困惑...
我可以遵循经典的线性回归步骤:
但是,在 Python 中实现时,我发现不是简单地使用
w = inv(X).dot(y)
他们申请
w = inv(X.T.dot(X)).dot(X.T).dot(y)
这里的转置和两次乘法的解释是什么?我很困惑...
OLS(线性回归)将通过以下方式解决:
假设 Python 中的矩阵(每行的第一列等于 1 以模拟截距)和向量,您可以通过以下方式求解:
np.linalg.inv(X.T @ X) @ X.T @ y
这个答案来自一组权重(或),它分析地解决了定义为的成本函数
(有关更多信息,请参见此处)
扩展我们得到的成本函数
(请注意,所有三个术语都是缩放器)
在我们进行下一步之前,我们需要复习一下矩阵的导数
一些常用的矩阵导数公式供参考:
使用这些规则,我们可以得到成本函数关于
将此设置为 0 我们得到
求解我们得到
写在代码中
w = inv(X.T.dot(X)).dot(X.T).dot(y)
希望这可以帮助。
你的程序不正确。您正在使用逆(在一般情况下不存在)。你必须使用转置。
您可能会问为什么我们要乘以转置。一般来说,你的数据矩阵不是正方形的,因此它是不可逆的。为了得到正方形格式/尺寸的东西,我们乘以。如果有行(观察)和列(特征、输入),则转置有行和列。因此以作为其维度的平方。在大多数情况下,我们可以反转这个产品。