【发布时间】:2018-01-13 22:07:14
【问题描述】:
我目前在 Kaggle 上使用 Rotten Tomatoes dataset,同时使用 pandas DataFrame() 来操作数据。
我已经从 sklearn 实现了CountVectorizer() 来提取特征(大小为 5000)。然后,我将 10 万行特征和标签保存到 .csv 中。更准确地说,.csv 总共有 100k 行和 5001 列。
它的大小约为 1gb 内存。
当我尝试阅读 .csv 时,问题出现了:
pd.read_csv('train.csv', header=0,
delimiter=",", engine='c', na_filter=False, dtype=np.int64)
CSV 解析器使用了过多的 RAM。我的系统上有 8gb 的 RAM,这显然是不够的。
有什么方法可以减少 RAM 的使用?我不受限于 pandas 库。
【问题讨论】:
-
好吧
pandas是一个内存数据操作框架,并且通过机器学习,您需要整个数据集来训练而不是块,因此您需要迁移到云端或减少特征数量你有。 -
@aws_apprentice 实际上我可以(而且我确实)使用块。 IE。增量学习。
scikit-learn中的一些分类器有partial_fit方法(我用的是SGDClassifier,它有),所以你可以按块训练分类器。 -
您可以分块(或单独的行)解析数据,将每个块转换为
scipy.sparse.csr_matrix。 -
就像我说的我对机器学习不太熟悉,所以我不知道。如果您可以分块读取它,那么
pandas带有一个chunksize选项,您可以通过将其制成生成器来进一步优化,这样您就不会一次在内存中保存太多数据。
标签: python pandas csv scikit-learn