Python 回归大数据
我有两个变量(y,x)的数据:80000组7年的每周数据(364周)。 我需要对数据进行分组,并对y进行回归(x加上需要创建的8个虚拟变量)。有364*80000*10个数据点,约3000万个数据点。我在服务器上“借用”了一个帐户,发现回归至少需要144GB的内存。我通常无法访问此服务器,我的计算机只有24GB的ram 我想把回归分解成8个部分,而不是inv(X'X)X'Y。 回归1使用前10000组的数据。这就得到了X1'X1和X1'y1 回归2使用10001到20000组的数据,得出X2'X2,X2'y2 以此类推,其中X_j=X_j+组的假人 那么我的估计是inv(X1'X1+…X8'X8)(X1y1+…X8y8) 问题在于如何高效地读取数据来执行此操作。 数据位于csv文件中,不按组组织。 我想读入整个数据集并将其转储到一个有组织的新csv文件中。然后我每次读10000*360行,重复8次 我的问题是Python 回归大数据,python,numpy,pandas,scikit-learn,Python,Numpy,Pandas,Scikit Learn,我有两个变量(y,x)的数据:80000组7年的每周数据(364周)。 我需要对数据进行分组,并对y进行回归(x加上需要创建的8个虚拟变量)。有364*80000*10个数据点,约3000万个数据点。我在服务器上“借用”了一个帐户,发现回归至少需要144GB的内存。我通常无法访问此服务器,我的计算机只有24GB的ram 我想把回归分解成8个部分,而不是inv(X'X)X'Y。 回归1使用前10000组的数据。这就得到了X1'X1和X1'y1 回归2使用10001到20000组的数据,得出X2'X
如有建议,将不胜感激。提前谢谢。可能不是一个明确的答案,但有一些评论:
inv(X'X)X'Y
numpy.save()
因为它看起来不像能够使用SARK的线性方法()来在AWS或其他服务器上执行回归,所以您可能需要考虑对可用数据执行许多重复的回归(例如100个样本),每次从下一组随机选择的观察值中删除之前样本的观察值,直到没有更多样本为止
这不仅可以让您了解数据集是否遵循大数定律(您可以对每个样本进行假设检验),而且累积起来,所有样本的平均拟合线可能比整个数据集的OLS拟合更精确sm.OLS的一个可能替代方法是使用sklean.linear_model.LinearRegression()运行回归 计算矩阵逆矩阵的规模不太大,而且在数值上可能不稳定,尤其是当您的特征集接近(或超过)您拥有的训练示例数量时。您可能希望使用梯度下降来计算回归系数。查看Andrew Ng机器学习课程的讲稿第5页:
谢谢您的评论。由于许可协议的原因,我无法将数据放在aws上。我尝试了很多方法,sklearn的线性回归似乎是目前为止最好的选择。干杯