线性回归 - 使用啥算法来解决最小二乘法 - 逆或 LU 或......?

Posted

技术标签:

【中文标题】线性回归 - 使用啥算法来解决最小二乘法 - 逆或 LU 或......?【英文标题】:Linear Regression - What algorithm to use to solve least squares method - inverse or LU or ...?线性回归 - 使用什么算法来解决最小二乘法 - 逆或 LU 或......? 【发布时间】:2013-10-21 17:05:01 【问题描述】:

我正在研究对一个或多个自变量执行线性回归的算法。

即:(如果我有m 真实世界的值并且在两个独立变量ab 的情况下)

C + D*a1 + E* b1 = y1

C + D*a2 + E* b2 = y2

...

C + D*am + E* bm = ym

我想使用最小二乘法找到最合适的直线。

我将使用矩阵表示法 所以

其中 Beta 是向量 [C, D, E],其中这些值将是最佳拟合线。

问题 解决这个公式的最佳方法是什么?我应该计算的倒数吗?

或者我应该使用矩阵的 LU 分解/分解。每个在大量数据上的性能是什么(即 m 的大值,可能是 10^8 ...)

编辑

如果答案是使用 Cholesky 分解或 QR 分解,是否有任何实现提示/简单的库可供使用。 我正在用 C/C++ 编写代码。

【问题讨论】:

【参考方案1】:

想到解决密集超定系统 Ax=b 的两种直接方法:

    形成 A^T A x = A b,然后 Cholesky 因式分解 A^T A = L L^T,然后进行两次反解。这通常会让你得到一个精确到 sqrt(machine epsilon) 的答案。

    计算 QR 分解 A = Q*R,其中 Q 的列是正交的,R 是正方形和上三角形,使用类似 Householder 消除的方法。然后通过反向替换为 x 求解 Rx = Q^T b。这通常可以让您得到精确到机器 epsilon 的答案——精度是 Cholesky 方法的两倍,但所需时间大约是两倍。

对于稀疏系统,我通常更喜欢 Cholesky 方法,因为它可以更好地利用稀疏性。

【讨论】:

【参考方案2】:

您的 X^TX 矩阵应该具有 Cholesky 分解。我会在 LU 之前研究这种分解。更快:http://en.wikipedia.org/wiki/Cholesky_decomposition

【讨论】:

如何计算逆?我应该避免这种情况吗? -- 谢谢 一般首选避免矩阵求逆。您可能会遇到数值稳定性问题,并且存储倒数可能会导致内存效率低下。坚持使用分解方法(它们的存在是有原因的)。 Cholesky 方法可以在许多包中找到(gsl 等...) 谢谢。感谢您的回复 您使用哪种语言? 由于您的矩阵大小,@Saher 您可能也会阅读这篇文章:***.com/questions/13148052/…

以上是关于线性回归 - 使用啥算法来解决最小二乘法 - 逆或 LU 或......?的主要内容,如果未能解决你的问题,请参考以下文章

最小二乘法的多元线性回归

机器学习模型和算法

最小二乘法求解线性回归模型

线性回归——最小二乘法

最小二乘法公式推导以及在线性回归中的应用

最小二乘法公式推导以及在线性回归中的应用