Scikit 学习逻辑回归内存泄漏

数据挖掘 效率 表现 scikit-学习
2021-09-18 13:54:22

我很好奇是否有其他人遇到过这种情况。我有一个包含大约 350k 样本的数据集,每个样本都有 4k 稀疏特征。稀疏填充率约为 0.5%。数据存储在一个scipy.sparse.csr.csr_matrix对象中,带有dtype='numpy.float64'.

我将其用作 sklearn 的逻辑回归分类器的输入。文档表明稀疏 CSR 矩阵是该分类器可接受的输入但是,当我训练分类器时,我的记忆性能非常差;我的进程的内存使用量从约 150 MB 爆炸式增长,以填满所有可用内存,然后随着内存交换到磁盘的接管,一切都停止了。

有谁知道为什么这个分类器可能会将稀疏矩阵扩展到密集矩阵?我目前在更新的 anacoda 分布中使用分类器的默认参数。谢谢!

scipy.__version__ = '0.14.0'
sklearn.__version__ = '0.15.2'
1个回答

好的,这最终成为 RTFM 情况,尽管在这种情况下它是 RTF 错误消息。

运行此程序时,我不断收到以下错误:

DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().

我假设,因为这与目标向量有关,并且因为它只是一个警告,所以它只会默默地将我的目标向量更改为一维。

然而,当我明确地将我的目标向量转换为一维时,我的记忆问题就消失了。显然,目标向量的格式不正确导致它将我的输入向量从稀疏向量转换为密集向量。

经验教训:当 sklearn “建议”您做某事时,请遵循建议。