如何以并行/分布式方式运行线性回归以进行大数据设置?


13

我正在处理一个非常大的线性回归问题,数据量太大,以至于必须将它们存储在一组机器上。将所有样本聚合到一台计算机的内存(甚至磁盘)中将太大了

为了对这些数据进行回归,我正在考虑一种并行方法,即对每个单独的框进行回归,然后根据每个单独的beta的统计数据(可能是平均值或中位数)来计算beta。

这有意义吗 ?如果是的话,我应该如何获得预期的总R2的每一个人R2

Answers:


10

简短答案:

是的,并行运行线性回归已经完成。例如,孟祥瑞等。(2016)for Apache Spark中的机器学习。它的工作方式是使用随机梯度下降(SGD)。在第三部分的核心功能中,作者提到:

通用线性模型是通过优化算法来学习的,该算法可并行化梯度计算,并使用基于C ++的快速线性代数库进行工人计算。

在我的答案中可以找到一个有关SGD工作原理的示例:与标准梯度下降相比,随机梯度下降如何节省时间?


长答案:

注意,这种表示法与我提供的链接不一致,我觉得矩阵表示法在这个问题上更好。

为了进行线性回归,我们正在尝试做

最小化 Xβ-ÿ2

导数是

2XŤXβ-ÿ

在小数据设置中,我们可以将导数设置为并直接求解。(例如,R中的QR分解。)在大数据设置中,数据矩阵太大而无法存储在内存中,并且可能很难直接求解。(我不熟悉如何对大型矩阵执行QR分解或Cholesky分解)。0X

一种并行化此方法的方法是尝试使用一种迭代方法:随机梯度下降,其中我们可以使用数据的子集来近似梯度。(如果使用,表示数据的子集,则梯度可以近似为,并且可以使用近似的梯度更新)。Xsÿs2XsŤXsβ-ÿsβ

此外,对于统计量,我们可以并行计算所有数据的或通过使用数据的子集对其进行近似。[R2[R2

关于其工作原理的直觉(mapreduce范式):

我一直在说使用子集的近似值。下面的示例描述了这种工作原理的直觉:假设我有1000亿个数据点,并且我们要计算所有数据点的平均值。假设进行这样的操作花费很长时间,并且进一步导致无法将全部数据存储在存储器中。

我们所能做的就是只取一个子集(例如10亿个项目),然后计算出这些项目的平均值。这样产生的近似值应该离真实不远(即,使用整个数据)。

为了并行化,我们可以使用100台计算机,其中每台计算机采用10亿个数据点的不同子集并计算这些平均值。(通常称为MAP步骤)。最后,对这100个数字进行另一个平均值计算(又称为REDUCE步骤)。

请注意,“ mapreduce范式”在某些情况下会很好,但在另一些情况下会不好。例如,前面提到的“平均”操作非常简单,因为我们知道,(假设和的长度相同)。对于某些迭代方法,即当前迭代取决于先前的迭代结果,很难并行化。随机梯度下降通过使用数据子集近似梯度来解决此问题。有关详细信息,请参见@ user20160的答案。意思<Xÿ>=意思X+均值(y)Xÿ

参考文献:

孟祥瑞等。(2016)。MLlib:Apache Spark中的机器学习


8

正如@ hxd1011所提到的,一种方法是将线性回归公式化为一个优化问题,然后使用迭代算法(例如,随机梯度下降)对其进行求解。这种方法可以并行化,但是有两个重要的问题:1)应该如何将问题分解为子问题?2)假设像SGD这样的优化算法本质上是顺序的,那么应该如何组合子问题的解决方案以获得全局解决方案?

Zinkevich等。(2010)描述了一些在多台机器之间并行化的先前方法:

  • 1)如下并行化SGD:在多台计算机之间拆分数据。在每个步骤中,每个本地计算机都使用数据的子集来估计梯度。所有梯度估计值都传递到中央计算机,中央计算机将它们汇总以执行全局参数更新。这种方法的缺点是需要大量的网络通信,从而降低了效率。

  • 2)在本地计算机上均匀划分数据。每台机器都使用批处理求解器针对其自己的数据子集精确地解决了问题。对本地计算机的最终参数估计值求平均值,以生成全局解决方案。这种方法的好处是它只需要很少的网络通信,但是缺点是参数估计可能不是最优的。

他们提出了一种新方法:

  • 3)允许每台本地计算机随机绘制数据点。在每台计算机上运行SGD。最后,对各台机器的参数求平均值以获得全局解决方案。像(2)一样,此方法几乎不需要网络通信。但是,参数估计值更好,因为允许每台机器访问更大一部分数据。

并行优化方法非常通用,适用于许多机器学习算法(不仅限于线性回归)。

另一种选择是使用并行/分布式矩阵分解算法或线性求解器。最小二乘线性回归具有特殊的结构,可以使用矩阵分解方法进行求解。在较小的数据集适合内存的情况下,这通常是解决该问题的方式。可以通过将矩阵的块分布在多台计算机上,然后使用并行/分布式矩阵计算解决问题,从而实现并行化。鉴于此方法更专门用于解决线性系统,因此,将其性能与更通用的分布式优化方法进行比较会很有趣。如果有人可以提供更多有关此的信息,我将很高兴听到。

参考文献:

Zinkevich等。(2010)。平行随机梯度下降。


+1个很好的答案可以解决我没有详细讨论的问题,也就是在近似渐变后该怎么做。
海涛杜

@ hxd1011也向您+1,以便对SGD以及如何将其连接到OP的问题进行详细说明
user20160

2

很久很久,在地图缩小之前,我解决了这个问题。以下是我在《计量经济学杂志》 1980年发表的一篇旧论文的参考。该论文适用于并行非线性最大似然,适用于M估计。

该方法适用于回归。将数据拆分为k个处理器/单元上的k个子集(也可以顺序执行)。k回归是否将回归系数保持为每个X'X矩阵。分别称这些为b1,...,bk和W1,...,Wk,则总回归系数由b = inverse(W1 + .. + Wk)*(W1 * b1 + ... + Wk * bk)给出需要再次遍历数据以使用b作为参数来计算残差,以获得sigma ^ 2估计的误差方差,R ^ 2的整体F等。然后b的协方差矩阵精确地由sigma ^ 2(inverse(W1 + .. + Wk))给出。*上方表示矩阵乘法。

https://www.sciencedirect.com/science/article/pii/0304407680900950


希望我做自己的工作时了解您的工作!academic.oup.com/imaiai/article-abstract/5/4/379/...
JohnRos
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.