【问题标题】:Quickest linear regression implementation in pythonpython中最快的线性回归实现
【发布时间】:2014-08-21 14:31:02
【问题描述】:

我正在执行逐步模型选择,逐步删除方差膨胀因子超过某个阈值的变量。

为了做到这一点,我在数百 MB 到 10 gig 的数据集上多次运行 OLS。

对于较大的数据集,最快的 OLS 实施方式是什么? Statsmodel OLS 实现似乎使用 numpy 来反转矩阵。基于梯度下降的方法会更快吗? scikit-learn 有没有特别快的实现?

或者也许使用 pymc 的基于 mcmc 的方法是最快的......

更新 1:似乎 scikit learn 的 LinearRegression 实现是 scipy 实现的包装器。

更新 2:在我非常有限的测试中,通过 scikit 学习 LinearRegression 的 Scipy OLS 的速度是 statsmodels OLS 的两倍...

【问题讨论】:

  • 你有多少行/观察和多少列/解释变量?
  • 大约一百个观察值和数百万行

标签: python scipy scikit-learn statsmodels pymc


【解决方案1】:

scikit-learn SGDRegressor 类是 (iirc) 最快的,但可能比简单的 LinearRegression 更难调整。

我会尝试每一个,看看它们是否满足您的需求。我还建议对您的数据进行二次采样 - 如果您有很多演出,但它们都是来自同一个分布的样本,您可以在几千个样本上训练/调整您的模型(取决于特征的数量)。这应该可以更快地探索您的模型空间,而不会在“重复/无趣”数据上浪费大量时间。

一旦找到一些候选模型,就可以在整个数据集上尝试这些模型。

【讨论】:

    【解决方案2】:

    逐步方法不是执行模型选择的好方法,因为它们完全是临时的,并且高度依赖于您运行逐步过程的方向。使用基于标准的方法或其他生成模型概率的方法要好得多。也许最好的方法是使用可逆跳跃 MCMC,它可以在整个模型空间中拟合模型,而不仅仅是特定模型的参数空间。

    PyMC 本身不实现 rjMCMC,但可以实现。另请注意,PyMC 3 使用其new glm submodule 非常容易拟合回归模型。

    【讨论】:

    • 好点。我也可以使用许多其他方法,例如 elasticnet,但我有我的理由。
    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 2019-06-03
    • 2018-07-28
    • 2020-05-24
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多