使用Bag of Words提取特征导致Google Colab运行崩溃该如何处理?
问题解答
你完全可以继续使用Bag of Words(词袋)或TF-IDF进行文本特征提取,当前内存溢出报错并非特征提取方法本身的问题,而是模型选型和稀疏矩阵处理方式不当导致的,可按以下方案调整:
1. 优先更换适配稀疏矩阵的模型
你当前使用的GaussianNB只支持稠密矩阵输入,调用toarray()会将原本只存非零值、内存占用极低的稀疏矩阵转换为保存所有零值的稠密矩阵,当文本词汇量较大时就会直接触发内存溢出。
优先替换为原生支持稀疏矩阵输入的朴素贝叶斯实现,无需调用toarray(),内存占用可降低90%以上:
from sklearn.naive_bayes import MultinomialNB # 无需调用toarray(),直接传入稀疏矩阵 model = MultinomialNB() model.fit(x_train_bg, y_train) y_pred = model.predict(x_test_bg)
2. 若必须使用GaussianNB,先做特征维度压缩
如果业务场景必须使用高斯朴素贝叶斯,可先压缩词袋/TF-IDF的特征维度,再转稠密矩阵输入:
- 调整特征提取器参数过滤无效特征:增加
min_df参数过滤低频词,增加max_features参数限制最大特征数,直接减少特征维度
# 示例:只保留至少在3篇文档中出现过的词,最多保留8000个最高频特征 bag_of_words = CountVectorizer(min_df=3, max_features=8000) x_train_bg = bag_of_words.fit_transform(x_train) x_test_bg = bag_of_words.transform(x_test)
- 对稀疏特征做降维处理:使用TruncatedSVD对稀疏特征做降维,将特征维度压缩到数百到数千量级后,再转稠密矩阵喂给
GaussianNB。
3. 超大数据集适配方案
如果是千万级以上的超大规模文本数据集,可改用支持增量训练的HashingVectorizer做特征提取,搭配支持partial_fit的模型分批训练,无需一次性加载全量数据到内存。
内容的提问来源于stack exchange,提问作者Dhruv singhal
相关产品推荐
相关产品推荐

