使用许多功能更新线性回归

时间:2019-01-02 19:58:07

标签: python scikit-learn regression dask gradient-descent

我遇到的问题如下:

我有一个约有1000万行的csv文件。这样,我想使用许多交互项进行线性回归。最终,我将进行3000次此类交互。因此,手动创建它们会得到形状(10mio,3000)的数据集,该数据集不再适合内存。此外,在拟合之前,我需要先将这些交互项居中。

固定效果是不可能的,因为交互包含连续变量而不是真正的虚拟变量(它们将大部分为0,大约1和少量0.5)。

我现在的计划如下:

  1. 使用dask(http://docs.dask.org/en/latest/dataframe.html)读取csv文件。然后创建交互并将它们保存在核心之外,这样我就不会遇到内存问题,在这里熊猫会失败。如何有效地与dask建立互动?
  2. 使用sklearn的StandardScaler(https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler)将创建的交互条件居中。我是否应该循环遍历合理数量的列(例如100),将这100个列居中,然后将居中的变量再次存储在磁盘上?从dask文档中,我想将dask与sklearn结合起来很容易吗?
  3. 使用带有partial_fit()属性的随机梯度下降(https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDRegressor.html#sklearn.linear_model.SGDRegressor)来拟合模型,以使其在循环中分部进行。我也知道其他更新方式(https://dahtah.wordpress.com/2011/11/29/rank-one-updates-for-faster-matrix-inversion/),但尚未找到python的实现?
  4. 预测循环中的各个部分。

您认为这是一个合理的计划吗?

0 个答案:

没有答案