Кластеризация ~ 100 000 коротких строк в Python

Я хочу скопировать ~ 100 000 коротких строк на что-то вроде расстояния в q-грамм или простое расстояние до мешка или, может быть, расстояние Левенштейна в Python. Я планировал заполнить матрицу расстояний (100 000 выбрать 2 сравнения), а затем выполнить иерархическую кластеризацию с pyCluster. Но я сталкиваюсь с некоторыми проблемами с памятью, прежде чем даже выйти из-под земли. Например, матрица расстояний слишком велика для numpy.

aa = numpy.zeros((100000, 100000))
ValueError: array is too big.

Это похоже на разумную вещь? Или я обречен на проблемы с памятью в этой задаче? Благодарим за помощь.

Ответы

Ответ 1

100 000 * 100 000 * 32 бит = 40 ГБ, что будет много оперативной памяти, так что да, вам нужно найти другой способ. (И даже если вы можете поместить эти данные в память, расчет займет слишком много времени.)

Один общий и простой ярлык - это скопировать небольшое случайное подмножество данных, и после того, как вы найдете кластеры этого подмножества, просто поместите остальные точки в кластеры, где они лучше всего подходят.

Ответ 2

10 миллиардов элементов - очень много. Я не знаю, из q-граммов, но если эта матрица разрежена, вы можете использовать элемент размером 200 000 элементов.

Ответ 3

Вам нужна матрица? Я предполагаю, что вы хотите использовать матрицу для скорости?

У меня есть k-мерный кластерный алгоритм (а не алгоритм иерархического кластера), и он вычисляет расстояния node по мере необходимости. Тем не менее, возможно, это только жизнеспособно для быстрых метрик. И у вас больше данных, чем я, но вы связаны ограничениями памяти.

Ответ 4

  • В Machine Learning называется метод Embedding, который в принципе может найти решение этой проблемы с использованием O (n + m) памяти вместо O (n * m) (n = 10 ^ 5 элементы, m = 10 ^ 5). К сожалению, я не знаю доступного исходного кода, который реализован в O (m + n). См.:

    Евклидово вложение данных совместного возникновения. Амир Глоберсон, Гал Чечик, Фернандо Перейра и Нафтали Тишби. Журнал исследования машинного обучения, JMLR, 8 (октябрь), 2007. pdf/ Код Matlab

  • Могут быть другие решения. Я думаю, что вы должны задать этот вопрос на форуме пользователей машинного обучения, например https://stats.stackexchange.com/ или даже более конкретно для обработки языка: http://metaoptimize.com/qa/.