Python 如何加速随机梯度下降?

Python 如何加速随机梯度下降?,python,machine-learning,scikit-learn,linear-regression,Python,Machine Learning,Scikit Learn,Linear Regression,我试图用L1惩罚来拟合回归模型,但在python中很难找到一个在合理时间内适合的实现。我得到的数据大约是100k乘以500(sidenote;其中几个变量是非常相关的),但是在这个模型上运行sklearn Lasso实现需要12个小时才能适应一个模型(我实际上不确定确切的时间,我让它运行了好几次一夜,但始终没有完成) 我一直在寻找一种更快完成工作的方法。然而,当我使用1e5迭代时,sklearn中的实现需要8小时才能适应。这似乎是一个相对较小的数量(文件甚至建议该模型通常需要大约1e6国际热核聚

我试图用L1惩罚来拟合回归模型,但在python中很难找到一个在合理时间内适合的实现。我得到的数据大约是100k乘以500(sidenote;其中几个变量是非常相关的),但是在这个模型上运行sklearn Lasso实现需要12个小时才能适应一个模型(我实际上不确定确切的时间,我让它运行了好几次一夜,但始终没有完成)

我一直在寻找一种更快完成工作的方法。然而,当我使用1e5迭代时,sklearn中的实现需要8小时才能适应。这似乎是一个相对较小的数量(文件甚至建议该模型通常需要大约1e6国际热核聚变实验堆才能收敛)

我想知道是不是有什么我很愚蠢的事情导致了发作需要很长时间。有人告诉我,SGD经常用于其效率(大约是O(n_iter*n_samp*n_feat),尽管到目前为止,我还没有看到比套索有多大的改进

为了加快速度,我尝试了:

  • 减少n_iter,但这通常会导致一个非常糟糕的解决方案,因为它还没有收敛
  • 增加步长(并降低n_iter),但这通常会导致损失函数爆炸
  • 改变学习速率类型(从反向缩放到基于迭代次数的数量),这似乎也没有带来很大的区别

  • 有没有加快这一过程的建议?似乎部分拟合可能是答案的一部分,尽管这方面的文档有点稀少。我希望能够在不等待三天的情况下拟合这些模型。

    部分拟合不是答案。它不会加快任何速度。如果有任何问题,它会使速度变慢

    实现是相当有效的,我很惊讶你说收敛很慢。我认为你做了很多次迭代。你有没有看到目标是如何减少的

    通常,调整初始学习速率可以提高速度。您的数据集真的不应该是一个问题。我不确定SGDRegressor是否在内部这样做,但将您的目标重新调整为单位方差可能会有所帮助


    您可以尝试vopal wabbit,这是一个更快的实现,但这不是必需的。

    微软研究院发表了一篇有趣的论文,这篇文章可能会很有用。我还查看了sklearn SGD代码,它看起来在每次迭代中都会遍历整个数据集,所以它实际上是mu收敛速度比我想象的要快。部分拟合不是答案。它不会加快任何速度。如果有,它会使速度变慢。实现非常有效,我很惊讶你说收敛速度慢。你运行了多少次迭代,目标是什么样的?通常调整初始学习速度可以加速。你的数据集真的不应该是个问题。你可以尝试vopal wabbit,这是一个更快的实现,但不应该是必要的。同意-见我上面的评论。我没有意识到的是,SGD在每次调用partial_fit时都会迭代整个数据集(而fit方法基本上只调用部分的fit n_iter时间)。我认为我最初对速度的担忧被夸大了。现在我只需要在调整梯度下降迭代参数的丛林中航行:根据我的经验,调整初始学习速率就足够了。