gpt4 book ai didi

machine-learning - 线性回归封闭形式解决方案的实现

转载 作者:行者123 更新时间:2023-12-04 03:30:43 27 4
gpt4 key购买 nike

我想知道你们是否都知道 sklearn 的 LinearRegression 模块的后端是否使用不同的东西来计算最佳 beta 系数。我使用封闭形式解决方案实现了自己的

    if self.solver == "Closed Form Solution":
### optimal beta = (XTX)^{-1}XTy
XtX = np.transpose(X, axes=None) @ X
XtX_inv = np.linalg.inv(XtX)
Xty = np.transpose(X, axes=None) @ y_true
self.optimal_beta = XtX_inv @ Xty

但是,当我打印与 sklearn 的系数相比时,我没有得到完全匹配。我认为拥有一个封闭形式的解决方案可以保证类似的结果(我的代码不处理不可逆)。

我注意到 MSE 相距不远,但这让我怀疑我的实现是否错误(我考虑了偏差)

偏差似乎出现在截距中:

SKLEARN INTERCEPT 1.2490009027033011e-15
HN INTERCEPT 4.440892098500626e-16
First Value HN 183.22200150945497
First Value SKLEARN 183.22200150945548
HN MSE 3.1084228599404546e-27
SKLEARN MSE 2.126667544039961e-25

最佳答案

数字的顺序是10^-15,这意味着它们实际上是0,而且是一样的!

至于为什么有区别:您正在通过直接反转X.T @ X 矩阵来求解正规方程。另一方面,scikit-learn 使用 scipy.linalg.lstsq under the hood ,它使用 for example基于 SVD 的方法。也就是说,那里的机制反转矩阵,因此与您的机制不同。请注意,有许多方法可以解决线性最小二乘问题。

但我们可以说你得到的结果与他们的方式相同,因为这些对矩阵的操作无论如何都会受到舍入误差的影响,而你的“匹配”他们的(反之亦然)对于许多有效数字。

关于machine-learning - 线性回归封闭形式解决方案的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66881829/

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