2

我有一个包含文本数据和数字特征的数据框。我已经对文本数据进行了矢量化处理,并计划将其与剩余的数值数据连接起来,以便在机器学习算法上运行。

我使用 TIDF 对文本数据进行了矢量化,如下所示:

from sklearn.feature_extraction.text import TfidfVectorizer
vect = TfidfVectorizer(max_features=10000)
text_vect = vect.fit_transform(myDataframe['text_column'])
text_vect_df = pd.DataFrame.sparse.from_spmatrix(text_vect)

text_vect_df.shape:250000 x 9300

我已将 text_vect_df 转换为 csv 文件并使用 vaex 将其转换为 hdf5,如下所示。Vaex 必须与 hdf5 格式一起工作。

text_vaex_hdf5 = vaex.from_csv('text_vectorized.csv', convert=True, chunk_size=5_000_000)

text_vectorized.csv4GB。vaex.from_csv()花费了太多时间并且内存正在崩溃(8GB RAM)。

我在我的 Jupyterhub(带有外部 GPU)中尝试了它的形状,text_vect_df.shape 200000 x 9300.它以每个 7GB 的块下载,并且阅读它需要太多时间。

text_vectorized.csv_chunk0.hdf5
7.51 GB
text_vectorized.csv_chunk1.hdf5
7.51 GB
text_vectorized.csv_chunk2.hdf5
2.5 GB

问题一:hdf5文件怎么比原来的csv5文件大?不应该更小吗?问题 2:如果较小的大小失败/崩溃,我如何存储 950000 x 10000 大小的数据帧?

我读过关于 vaex 的文章,它看起来真的很酷,因为计算发生在几秒钟内。我很想继续处理这个问题,但我被困住了。我试过了。不如 Vaex 酷。

已经尝试过的解决方案:

  1. Pandas 的 to_hdf 不应该用于存储稀疏矩阵,因为https://vaex.readthedocs.io/en/latest/faq.html

当使用 pandas .to_hdf 方法时,输出的 HDF5 文件具有基于行的格式。另一方面,Vaex 期望基于列的 HDF5 文件

  1. 如果没有 dask 或 vaex,内存在运行 KNN、SVM 或任何 ML 算法时会崩溃。
  2. 尝试使用 dask,没有运气,工人在客户端本地集群中被杀死。
  3. 有了 Vaex,无法前进
4

0 回答 0