我刚开始与Mahout合作,有一件事让我非常困惑,那就是缺乏线性回归。即使是更难的逻辑回归,随着研究的进行,也在一定程度上得到了支持,但在线性回归方面却完全沉默!
据我所知,OLS是最容易解决的问题之一-
Y=Xb+e
具有b=(X^T X)^(-1)X^T Y的线性回归解,其中X^T是X的转置,如果矩阵(X^X)是奇异的(即不可逆的),则即使存在使用广义逆的解,也可以显示错误消息。
计算X^T X和X^Y只是计算元素的和和和乘积,据我所知,这可能是使用MapReduce最简单的事情。
(这让我想……有没有任何模块支持计算回归系数所需的原生矩阵运算?这确实会使回归模块变得不必要……)
我是不是错过了一些让回归在Mahout中难以计算的东西?
我不知道这样的事情是否有"为什么"。它根本不存在。
然而,我认为这与你的想法相反;这太"容易"了。除非你正在解决一个1000万个方程的解决方案,否则它可能不是Hadoop所要求的规模。有很多现有的软件包可以在一台机器上很好地做到这一点。如果您想从Apache获得Java版本的东西,只需看看Commons Math即可。
并不是说项目中不可能有一个好的非分布式版本,但由于重点主要是大规模和Hadoop,这可能就是"原因"。
我认为这只是因为NxN矩阵反演的复杂度为O(N^3),并且存在数值不稳定性,这在稀疏高维矩阵中很常见。
有人有其他解释吗?或者有人能证实我的想法吗?