К-значит с действительно большой матрицей - PullRequest
9 голосов
/ 16 июня 2011

Я должен выполнить кластеризацию k-средних на действительно огромной матрице (около 300.000x100.000 значений, что превышает 100 Гб). Я хочу знать, могу ли я использовать программное обеспечение R для выполнения этого или weka. Мой компьютер является мультипроцессором с 8 ГБ оперативной памяти и сотнями ГБ свободного места.

У меня достаточно места для вычислений, но загрузка такой матрицы, по-видимому, является проблемой для R (я не думаю, что использование пакета bigmemory помогло бы мне, и большая матрица автоматически использует всю мою оперативную память, а затем файл подкачки, если этого недостаточно. пространство).

Итак, мой вопрос: какое программное обеспечение мне следует использовать (в конечном счете, в сочетании с некоторыми другими пакетами или пользовательскими настройками).

Спасибо за помощь.

Примечание: я использую Linux.

Ответы [ 4 ]

7 голосов
/ 16 июня 2011

Должно ли это быть K-средних? Другой возможный подход - сначала преобразовать ваши данные в сеть, а затем применить кластеризацию графов. Я являюсь автором MCL , алгоритма, который довольно часто используется в биоинформатике. Связанная с реализацией реализация должна легко масштабироваться до сетей с миллионами узлов - в вашем примере будет 300 000 узлов, при условии, что у вас есть 100 000 атрибутов. При таком подходе данные будут естественным образом сокращены на этапе преобразования данных, и этот этап, скорее всего, станет узким местом. Как вы рассчитываете расстояние между двумя векторами? В приложениях, с которыми я имел дело, я использовал корреляцию Пирсона или Спирмена, и MCL поставляется с программным обеспечением для эффективного выполнения этих вычислений для крупномасштабных данных (оно может использовать несколько процессоров и несколько машин).

По-прежнему существует проблема с размером данных, поскольку большинство алгоритмов кластеризации требуют, чтобы вы хотя бы один раз выполняли все парные сравнения. Ваши данные действительно хранятся в виде гигантской матрицы? У вас много нулей на входе? В качестве альтернативы, у вас есть способ отбросить более мелкие элементы? Есть ли у вас доступ к нескольким машинам для распространения этих вычислений?

1 голос
/ 16 июня 2011

Я сохраняю ссылку (которая может быть полезна для конкретного пользователя), но я согласен с комментарием Гэвина! Для выполнения кластеризации k-средних на больших данных вы можете использовать функцию rxKmeans, реализованную в Revolution R Enterprise собственной реализации R (я знаю, что это может быть проблемой); эта функция, по-видимому, способна управлять такими данными.

0 голосов
/ 15 сентября 2012

Проверьте Mahout, он сделает k средств для большого набора данных:

http://mahout.apache.org/

0 голосов
/ 22 июня 2011

Поскольку мы ничего не знаем ни о данных, ни о целях опрашивающего для этого просто пара общих ссылок:
I. Видеолекции Гайона & mdash; много бумаг и книг тоже.
выбор функции на stats.stackexchange

...