sklearn 大数据线性回归

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 中的求解器。

以上是关于sklearn 大数据线性回归的主要内容,如果未能解决你的问题,请参考以下文章

Python Sklearn线性回归不可调用

Python数模笔记-Sklearn线性回归

sklearn线性回归实现房价预测模型

机器学习sklearn(78):算法实例(三十五)回归线性回归大家族多重共线性:岭回归与LassoLasso

sklearn机器学习之线性回归模型

SKlearn 线性回归系数等于 0