Python – 超越RAM限制?

我在尝试分析文本,但我的Mac只有8GB的内存,RidgeRegressor在一段时间后就停止了,显示Killed: 9。我认为这是因为它需要更多的内存。

有没有办法禁用堆栈大小限制器,让算法可以使用某种交换内存?


回答:

你需要手动进行操作。

这里可能有两个不同的核心问题:

  • A:保存训练数据
  • B:训练回归器

对于A,你可以尝试使用numpy的memmap,它可以抽象掉交换操作。作为替代方案,你可以考虑将数据准备成HDF5格式或某种数据库。对于HDF5,你可以使用h5pypytables,这两者都支持类似numpy的使用方式。

对于B:最好使用一些支持离线核心算法的算法。在scikit-learn中,这些算法支持partial_fit

请记住,这个训练过程至少分解为两个新的元素:

  • 在内存方面的效率
    • 交换很慢;你不希望使用在学习过程中需要N^2辅助内存的东西
  • 有效的收敛

上面链接中的那些算法在这两方面应该都合适。

SGDRegressor可以参数化成类似于RidgeRegression。

另外:可能需要手动使用partial_fit,遵守算法的规则(通常为了收敛证明需要某种随机排序)。抽象掉交换的问题在于:如果你的回归器在每个epoch中进行排列,而不知道这有多昂贵,你可能会遇到麻烦!

由于这个问题本身相当困难,因此有一些专门为此构建的库,而sklearn则需要如上所述的更多手动操作。其中一个最极端的库(有很多疯狂的技巧)可能是vowpal_wabbit(其中IO通常是瓶颈!)。当然,还有其他流行的库,比如pyspark,服务于稍微不同的目的(分布式计算)。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注