моя цель - выполнить кластеризацию текстов из набора данных миллионов строк , где каждая строка представляет собой строку слов, которая не соответствует надлежащему документу, а точнее к списку "ключевых слов". Идея состоит в том, что каждая строка представляет пользователя Twitter со списком ключевых слов, взятых из его / ее твитов , вот пример строки:
"remove United States District Attorney Carmen Ortiz office overreach case Aaron Swartz"
Вот мой код:
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("")
Моя проблема в том, что когда дело доходит до кластеризации, я получаю Ошибка памяти :
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 было то, что могло помочь против ограничений памяти, я также не знаю, что лучшие параметры для использования (я следовал учебнику scikitlearn для KMeans и MiniBatchKMeans для кластеризации текстов в качестве основы, вы можете найти его здесь http://scikit -learn.org / stable / auto_examples / text /document_clustering.html#sphx-glr-auto-examples-text-document-clustering-py).
Что следует помнить:
- Я не могу использовать любой Машинное обучение или НЛП или MapReduce аналогичные методики
- Кластеры должны как-то представлять пользователей со схожими интересами , поэтому использование схожих ключевых слов
Итак, мой вопрос: как мне исправить ошибку памяти ? И если у кого-то есть подсказки о том, как правильно настроить кластеризацию, или если мой подход неверен, это также было бы неплохо.