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 大数据线性回归的主要内容,如果未能解决你的问题,请参考以下文章