Кластеризация большого количества текстовых файлов с KMeans - PullRequest
0 голосов
/ 06 марта 2019

У меня есть папка с предварительно извлеченными текстовыми файлами (данные из изображений, PDF-файлов, документов и т. Д.).Всего это около 222 МБ или 27 600 документов.

Папка скомпилирована в словарь:

data = {'file_name':'document text',...}

Затем я векторизирую словарь

X = vectorizer.fit_transform(documents.values())
X = X.toarray()

Экспорт 'X'в текстовый файл показывает, что это около 7 ГБ в размере!

Я пытаюсь преобразовать векторизованные данные в 2D-массив с PCA

pca = PCA(n_components=2)
two_dim = pca.fit_transform(X)

Я начинаю получать следующие ошибки:

two_dim = pca.fit_transform(vectorized_data)
array = np.array(array, dtype=dtype, order=order)
MemoryError

Насколько я знаю, я использую 64-битный Python.Я запустил $ py -0, и звездочка была рядом с 64-битной версией.

У меня 32 ГБ памяти, Intel i7-8700K

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Почему toarray?

Текстовые данные разреженные , вы хотите использовать разреженную матрицу.

Вы также можете использовать сферический k-означает не стандартное kmeans.

PCA - тоже плохая идея.

0 голосов
/ 06 марта 2019

Вы можете попытаться использовать IncrementalPCA из sklearn с управляемым размером партии, или вы можете использовать автоэнкодер с функциями линейной активации (https://stats.stackexchange.com/questions/120080/whatre-the-differences-between-pca-and-autoencoder), так как автоэнкодеры могут также обучаться в партиях. Однако увеличение размера связано сразреженности текстовых данных, так как матрица, полученная в результате векторизации, содержит в основном нули. И это увеличение делает вас неспособным обрабатывать PCA. Надеюсь, это поможет.

...