gpt4 book ai didi

python - 尝试在包含 Pandas Dataframe 列(包含字符串)的 TFidfVectorizer 上应用 'fit_transform()' 时出现内存错误

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:58 24 4
gpt4 key购买 nike

我正在尝试类似的操作,如图所示 here 。我首先从 CSV 文件中读取两列,该文件包含 2405 行,格式为:年份,例如: “1995”并清洁,例如["this", "is, "exemplar", "document", "contents"],两列都使用字符串作为数据类型。

    df = pandas.read_csv("ukgovClean.csv", encoding='utf-8', usecols=[0,2])

我已经预先清理了数据,下面显示了前 4 行的格式:

     [IN] df.head()

[OUT] Year cleaned
0 1909 acquaint hous receiv follow letter clerk crown...
1 1909 ask secretari state war whether issu statement...
2 1909 i beg present petit sign upward motor car driv...
3 1909 i desir ask secretari state war second lieuten...
4 1909 ask secretari state war whether would introduc...

[IN] df['cleaned'].head()

[OUT] 0 acquaint hous receiv follow letter clerk crown...
1 ask secretari state war whether issu statement...
2 i beg present petit sign upward motor car driv...
3 i desir ask secretari state war second lieuten...
4 ask secretari state war whether would introduc...
Name: cleaned, dtype: object

然后我初始化 TfidfVectorizer:

    [IN] v = TfidfVectorizer(decode_error='replace', encoding='utf-8')

接下来,调用下面的行会产生:

    [IN] x = v.fit_transform(df['cleaned'])
[OUT] ValueError: np.nan is an invalid document, expected byte or unicode string.

我使用上述 thread 中的解决方案克服了这个问题:

    [IN] x = v.fit_transform(df['cleaned'].values.astype('U'))

但是,这导致了内存错误 ( Full Traceback )。

我尝试使用 Pickle 查找存储来避免大量内存使用,但我不确定如何在这种情况下过滤它。任何提示将不胜感激,感谢您的阅读。

[更新]

@pittsburgh137发布了涉及拟合数据的类似问题的解决方案here ,其中训练数据是使用 pandas.get_dummies() 生成的。我对此所做的是:

    [IN] train_X = pandas.get_dummies(df['cleaned'])
[IN] train_X.shape
[OUT] (2405, 2380)

[IN] x = v.fit_transform(train_X)
[IN] type(x)
[OUT] scipy.sparse.csr.csr_matrix

当我看到我可以用这个开发做些什么时,我想我应该向所有读者更新。如果这种方法有任何预计的陷阱,我很想听听。

最佳答案

我相信这是对 dtype('<Unn') 的转换这可能会给你带来麻烦。仅使用前几个文档加上 NaN 来检查数组的相对大小:

>>> df['cleaned'].values
array(['acquaint hous receiv follow letter clerk crown',
'ask secretari state war whether issu statement',
'i beg present petit sign upward motor car driv',
'i desir ask secretari state war second lieuten',
'ask secretari state war whether would introduc', nan],
dtype=object)

>>> df['cleaned'].values.astype('U').nbytes
1104

>>> df['cleaned'].values.nbytes
48

似乎首先删除 NaN 值是有意义的 ( df.dropna(inplace=True) )。然后,调用 v.fit_transform(df['cleaned'].tolist()) 应该会非常高效。 .

关于python - 尝试在包含 Pandas Dataframe 列(包含字符串)的 TFidfVectorizer 上应用 'fit_transform()' 时出现内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49239943/

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