1

我最近在处理一个安静的大数据集,我打算使用 Tfidfvectorizer 来分析它。

以前有关于实现 Tfidfvectorizer 时的 MemoryError 的帖子,但是,在我的情况下,MemoryError 发生在我将数据输入 Tfidfvectorizer 之前。这是我的代码。

  1. 读取数据

    data = pd.read_csv(...)
    
    data['description'] is the text content
    
  2. 处理数据

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    description_vectorizer = TfidfVectorizer(max_features=500,
                                         min_df=0.2,                                    
                                         ngram_range=(2, 3),
                                         preprocessor=preprocessor,
                                         stop_words='english')
    
    description_vectorizer.fit(data.description.values.astype('U'))
    

这里的很多帖子都谈到了拟合Tfidfvectorizer时的MemoryError,但我发现当我将数据转换为unicode时,即在此步骤中:data.description.values.astype('U'),就会发生MemoryError。

因此,关于如何在 Tfidfvectorizer 中调整参数的策略在我的情况下没有用。

有人遇到过这个问题并且知道如何解决吗?非常感谢。

4

3 回答 3

2

我知道,这个线程已经很老了,但是在刚刚遇到同样的问题并且没有找到任何答案之后,我希望这会帮助有人找到他或她自己处于相同的位置。

解决方案实际上非常简单,它只是代码中的一个小错误:而不是astype()像这样应用于 numpy 数组:

data.description.values.astype('U')

只需交换语句并应用于.astype()pandas 系列:

data.description.astype('U').values

希望这可以帮助!

于 2018-10-04T11:15:31.680 回答
0

如果有人想知道,我找到了一种 Python 方法:使用 .loc 选择数据会产生不同的结果

也许这是一个愚蠢的问题,如果您认为我应该删除它,请告诉我,谢谢。

于 2018-04-24T01:52:27.100 回答
0

我也经历过这个错误。该astype函数返回得如此之快,并且实际分配的额外内存如此之少,我只能假设内存需求的抢先计算失败,它未能找到连续的内存块,或者它是一个错误。

我根本找不到太多关于如何解决这个问题的方法,所以我通过完全删除转换并将底层数据集转换为 Unicode 来避免它,然后再由 pandas 加载。astype

于 2018-06-12T02:45:59.300 回答