gpt4 book ai didi

python - Sklearn K-Fold 交叉验证内存问题

转载 作者:行者123 更新时间:2023-11-28 22:42:59 25 4
gpt4 key购买 nike

我正在尝试使用简单的文本分类器运行一些监督实验,但在使用 Sklearn 中的 K Fold 生成器时遇到了内存问题。我收到的错误是:“您的系统已用完应用程序内存”,但我的数据集只有 ~245K 行 x ~81K 列。大 ish,当然,但不是很大。该程序永远不会终止,而是“挂起”,直到我手动关闭终端应用程序。我让它这样运行了大约 30 分钟,但没有任何进展。

我还编写了 print 语句来查看代码在交叉验证 for 循环中的哪个位置卡住了。看起来训练和测试集的索引已经生成,但是代码永远不会使用这些索引来切分特征和标签的实际训练和测试集。我在运行 10.9.5 的 Macbook Pro 上运行它。我已经运行此关闭除终端应用程序之外的所有其他应用程序,但没有成功。有没有其他人遇到过这个问题,或者这可能是我的机器特有的问题?

编辑:我已经使用 10 折和 5 折交叉验证运行此程序,但每次都遇到相同的问题。

最佳答案

我认为第一个问题来自这部分:

my dataset is only ~245K rows x ~81K columns. Large-ish, sure, but not huge.

245K x 80K 听起来并不大,但让我们算一下,假设每个元素存储 8 个字节。如果你的矩阵不是稀疏矩阵(显然在你的情况下它是一个稀疏矩阵),那就是 245 * 80 * 8 MB 大约 160 GB 需要存储在您的 RAM 中。这实际上是巨大的!

你提到了文本分类,所以我猜你的特征是 tf-idf 或单词计数,而且它非常稀疏。您现在需要注意的是在每一步都保持稀疏性,并且只使用处理稀疏数据并且不会分配大小为n_samples * n_features<的密集矩阵的算法.

朴素贝叶斯分类器(参见 sklearn.naive_bayes.MultinomialNB 例如)在文本分类方面取得了不错的成功,我将从这里开始。

这样的分类器可以轻松处理 250K x 80K 矩阵,只要它是稀疏矩阵(当然实际上足够稀疏)。

如果您仍想减少从 tf-idf 获得的功能数量,您有多种选择:

  1. 删除停用词,使用停用词列表或将 max_df 参数设置为 0.7 左右或更低的值(这将丢弃超过 70% 的文档中的任何术语) .
  2. 在训练分类器之前应用特征选择。 This scikit-learn example展示了如何使用卡方统计来根据稀疏数据选择特征。
  3. 应用降维技术,例如 SVD(我会研究 Latent semantic indexing,但我并不精通)。

选项 1. 和 2. 的组合应该已经可以让您显着减少特征的数量。

如果有帮助,请告诉我。

关于python - Sklearn K-Fold 交叉验证内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31297490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com