首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniBatchKMeans聚类过程中HashingVectorizer后的记忆错误

MiniBatchKMeans聚类过程中HashingVectorizer后的记忆错误
EN

Stack Overflow用户
提问于 2018-09-01 15:51:21
回答 1查看 398关注 0票数 1

我的目标是从数百万行的数据集中执行文本的集群,其中每一行都是一串单词,这并不对应于一个适当的文档,而是一个“关键字”列表。这样做的想法是,每一行代表一个Twitter用户,其中包含从他/她的tweet中获取的关键字列表,下面是一个行的示例:

代码语言:javascript
复制
"remove United States District Attorney Carmen Ortiz office overreach case Aaron Swartz"

这是我的代码:

代码语言:javascript
复制
from __future__ import print_function
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.cluster import MiniBatchKMeans
from time import time
import csv

# LOAD CSV
print("Loading Dataset from a CSV...")
csvinputfile = '...'
t = time()
dataset = open(csvinputfile, 'r')
print("done in %0.3fs" % (time() - t))
print("")

# TERM OCCURRENCES
print("Calculating Term Occurrences...")
t = time()
vectorizer = HashingVectorizer(n_features=300000, stop_words=None, alternate_sign=False, norm='l2', binary=False)
x = vectorizer.fit_transform(dataset)
print("done in %0.3fs" % (time() - t))
print("")

# CLUSTERING
print("MiniBatchKMeans Clustering...")
t = time()
km = MiniBatchKMeans(n_clusters=10000, init='k-means++', n_init=1, init_size=10000, batch_size=10000, verbose=False)
clusters = km.fit(x)
print("done in %0.3fs" % (time() - t))
print("")

我的问题是,当涉及到集群时,我会得到一个内存错误

代码语言:javascript
复制
MiniBatchKMeans Clustering...
Traceback (most recent call last):
File ".../cluster-users.py", line 32, in <module> clusters = km.fit(x)
File ".../python2.7/site-packages/sklearn/cluster/k_means_.py", line 1418, in fit init_size=init_size)
File ".../python2.7/site-packages/sklearn/cluster/k_means_.py", line 684, in _init_centroids x_squared_norms=x_squared_norms)
File ".../python2.7/site-packages/sklearn/cluster/k_means_.py", line 79, in _k_init centers = np.empty((n_clusters, n_features), dtype=X.dtype)
MemoryError
[Finished in 22.923s]

我对python和scikitlearn非常陌生,所以我不太清楚发生了什么,但我认为这是因为,由于我处理的是一个大型数据集,集群阶段试图将n_samples和n_features的巨大矩阵加载到内存中。

这个错误的一部分,我不明白,因为我认为MiniBatchKMeans和HashingVectorizer可以帮助克服内存限制,我也不知道使用什么是最佳参数(我学习了KMeans和MiniBatchKMeans关于文本聚类的科学学习教程,您可以在这里找到clustering.html#sphx-glr-auto-examples-text-document-clustering-py)。

要记住的事情:

  • I不能使用任何机器学习或NLP或MapReduce类技术
  • 集群需要以某种方式表示具有相似兴趣的用户(),因此使用类似的关键字。

因此,我的问题是:如何修复内存错误?如果有人有一些提示如何正确地设置集群,或者如果我的方法是错误的,那也很好。

EN

回答 1

Stack Overflow用户

发布于 2018-09-02 03:14:49

其中一行包含这样的文字,“撤除美国地区检察官Carmen办公室过了Aaron案”确实是dirty

若要修复内存错误,请确保以下各点正确;

  • 列中的所有关键字都相关吗?如果没有,试着通过删除停止词、标点符号等来减少它们。
  • 重点是从文本中聚合相关的关键字。您可以创建这样的关键字列表。
  • 查找python中的regex库。它可以帮助你清理数据。
  • 要确定最佳参数,请查找像within cluster sums of squaresaverage silhouettegap statistic这样的术语。

聚类不是某种会产生结果的dark-magic。如果您输入垃圾,它将产生垃圾。

请不要为同样的问题制造新的问题。已经有了另一个similar question that you've asked recently。除非,这两个问题完全不同,否则在你的帖子中提出一个新的问题,这个问题和以前的问题有什么不同?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52129773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档