使用 sklearn 特征提取时出现内存错误

Posted

技术标签:

【中文标题】使用 sklearn 特征提取时出现内存错误【英文标题】:memory error when using sklearn feature extraction 【发布时间】:2015-01-21 06:56:38 【问题描述】:

我一直在使用 python 脚本来标记和计算大量 .txt 文件的 TFIDF,我的脚本如下:

import nltk
import string
import os

from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.stem.porter import PorterStemmer
from nltk.corpus import stopwords
import nltk
import string
from collections import Counter
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.externals import joblib
import re
import scipy.io
import glob

path = 'R'
token_dict = 
stemmer = PorterStemmer()

def stem_tokens(tokens, stemmer):
    stemmed = []
    for item in tokens:
        stemmed.append(stemmer.stem(item))
    return stemmed

def tokenize(text):
    tokens = nltk.word_tokenize(text)
    stems = stem_tokens(tokens, stemmer)
    return stems

for subdir, dirs, files in os.walk(path):
 for file in files:
    #if re.match("text\d+.txt",file):
      #with open(os.path.join(path,file),'r') as f:
       #for shakes in f:

        remove_spl_char_regex = re.compile('[%s]' % re.escape(string.punctuation)) # regex to remove special characters
        remove_num = re.compile('[\d]+')
        file_path = subdir + os.path.sep + file
        shakes = open(file_path, encoding="utf8")

        text = shakes.read()
        lowers = text.lower()
        a1 = lowers.translate(string.punctuation)
        a2 = remove_spl_char_regex.sub(" ",a1)  # Remove special characters
        a3 = remove_num.sub("", a2)  #Remove numbers
        token_dict[file] = a3

tfidf = TfidfVectorizer(tokenizer=tokenize, stop_words='english')
tfs = tfidf.fit_transform(token_dict.values())
scipy.io.savemat('arrdata4.mat', mdict='arr': tfs)

根据文件的大小,我会在 30 分钟后遇到 MemoryError。 任何人都可以向我解释如何增加 python 可以访问的内存或我可以解决此问题的任何其他方式? .

【问题讨论】:

你在哪里得到 MemoryError?在生成tfidffit_transform 时? 生成拟合变换时出现错误 似乎是***.com/a/22006707/522719 中报告的问题。您是否尝试在拟合时拆分数据? 【参考方案1】:

Python 没有超出操作系统规定的内存限制。

确保您没有使用ulimit 或等效项限制进程的内存使用量。 运行top 并查看进程是否使用了所有可用内存。 那么您要么必须减少程序所需的内存,要么增加它可以访问的 RAM/Swap。

【讨论】:

以上是关于使用 sklearn 特征提取时出现内存错误的主要内容,如果未能解决你的问题,请参考以下文章

在 scipy 中计算成对距离时出现内存错误

mysql安装时出现错误

尝试在 opencv 4.5.1 中使用 SIFT 提取特征时出现问题

初始化数组时出现段错误

使用 Firebase 时出现内存不足错误

使用共享内存时出现分段错误