【问题标题】:sklearn linear regression for large datasklearn 大数据线性回归
【发布时间】:2014-05-05 07:08:22
【问题描述】:

sklearn.LinearRegression 是否支持在线/增量学习?

我有 100 组数据,我正在尝试完全实现它们。对于每个组,有超过 10000 个实例和约 10 个特征,因此如果我构造一个巨大的矩阵(10^6 x 10),它将导致 sklearn 的内存错误。如果我每次都可以用新组的批量样本更新回归器,那就太好了。

我发现this post 相关,但可接受的解决方案适用于使用单个新数据(仅一个实例)而不是批量样本的在线学习。

【问题讨论】:

    标签: python scikit-learn regression linear-regression


    【解决方案1】:

    看看linear_model.SGDRegressor,它使用随机梯度学习了一个线性模型。

    一般来说,sklearn 有许多承认“partial_fit”的模型,它们对于不适合 RAM 的中型到大型数据集都非常有用。

    【讨论】:

    • 谢谢曹。这很有帮助。但是 sgdregressor 的输入和普通的线性回归完全一样(我还是需要准备好大数据集)?
    • @ChuNan,不,您不需要形成大型数据集。看一下示例代码:scikit-learn.org/dev/auto_examples/applications/…
    • @ChuNan,特别是看看如何在生成器函数“iter_minibatches”中动态构建数据块。如果你不熟悉 python 生成器的概念,可以看看:wiki.python.org/moin/Generators
    • 这正是我想要的。非常感谢!
    【解决方案2】:

    并非所有算法都可以增量学习,即无需同时查看所有实例。也就是说,所有实现 partial_fit API 的估算器都是小批量学习(也称为“在线学习”)的候选者。

    Here 是一篇介绍增量学习的扩展策略的文章。出于您的目的,请查看 sklearn.linear_model.SGDRegressor 类。 真正在线,所以内存和收敛速度不受batch size的影响。

    【讨论】:

    • 不客气。不,您不需要构建整个矩阵。它是通过yield 生成器在课堂上完成的。
    • 在线学习能力是SGDRegressor和LinearRegression的主要区别吗?
    • SGDRegressor 和 LinearRegression 之间的另一个区别:前者使用“随机梯度下降”来优化损失函数,而后者适用于封闭形式的解决方案(例如 Normal Equation 方法)。对于大量预测变量,LinearRegression() 变得太慢。在这种情况下,您可以使用 SGDRegressor 或更改 LinearRegression 中的求解器。
    猜你喜欢
    • 2018-05-16
    • 2020-12-24
    • 2021-02-20
    • 2018-05-08
    • 2018-08-18
    • 2020-04-20
    • 2018-11-18
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多