2011-06-16 11 views
9

Tengo que realizar un agrupamiento k-means en una matriz realmente enorme (aproximadamente 300,000x100,000 valores que es más de 100Gb). Quiero saber si puedo usar el software R para realizar esto o weka. Mi computadora es un multiprocesador con 8 Gb de RAM y cientos de Gb de espacio libre.K-medias con matriz realmente grande

Tengo espacio suficiente para los cálculos, pero cargar una matriz así parece ser un problema con R (no creo que usar el paquete bigmemory me ayude a utilizar una matriz grande y automáticamente toda mi memoria RAM, entonces mi archivo de intercambio si no suficiente espacio).

Así que mi pregunta es: ¿qué software debo usar (eventualmente en asociación con algunos otros paquetes o configuraciones personalizadas).

Gracias por ayudarme.

Nota: Utilizo linux.

+0

El problema es muy probable que se ejecute en que la R es que el almacenamiento de estos datos en una matriz limita los índices al valor entero máximo (2147483647) y tiene más elementos que eso. Esto no es una limitación de memoria, sino una limitación que resulta del uso de enteros para indexar los datos. ¿Puedes probar la matriz en su lugar? – Noah

+1

¿Por qué quieres agrupar los 300,000 objetos a la vez? ¿Por qué no tomar una muestra más pequeña, agrupar eso y luego asignar los objetos restantes a su clúster más cercano? –

+0

¿Cuántos conglomerados estás buscando? ¿Hay muestras con agrupamiento conocido, para validación? – denis

Respuesta

7

¿Tiene que ser K-means? Otro enfoque posible es transformar primero los datos en una red y luego aplicar la agrupación gráfica. Soy el autor de MCL, un algoritmo que se utiliza con bastante frecuencia en bioinformática. La implementación vinculada debería ampliarse fácilmente a redes con millones de nodos; su ejemplo tendría 300K nodos, suponiendo que tiene 100K atributos. Con este enfoque, los datos se reducirán naturalmente en el paso de transformación de datos, y ese paso probablemente se convierta en el cuello de botella. ¿Cómo se calcula la distancia entre dos vectores? En las aplicaciones que he tratado, utilicé la correlación de Pearson o Spearman, y MCL se envía con software para realizar de manera eficiente este cálculo en datos a gran escala (puede utilizar varias CPU y varias máquinas).

Todavía hay un problema con el tamaño de los datos, ya que la mayoría de los algoritmos de clúster requerirán al menos realizar todas las comparaciones por parejas al menos una vez. ¿Sus datos están realmente almacenados como una matriz gigante? ¿Tienes muchos ceros en la entrada? Alternativamente, ¿tiene alguna forma de descartar elementos más pequeños? ¿Tiene acceso a más de una máquina para distribuir estos cálculos?

+1

micans +1 MCL, +1 si pudiera "¿Cómo se calcula la distancia entre dos vectores?" - importante. Delphine, primer experimento en conjuntos de entrenamiento de muestra que se ejecutan rápidamente, ver cómo se agrupan. – denis

+0

+1 no por reciprocidad, sino por los conjuntos de entrenamiento de muestra más pequeños, bastante importantes. Delphine, sería bueno si te comprometieras un poco más. Me pregunto si su conjunto de datos se describe mejor como unidades, cada una con 100 000 atributos, de ahí mi pregunta si es escasa (cero). Si ese es el caso, la distancia entre los vectores podría de hecho parecerse más a una distancia de tipo superposición entre los conjuntos, y en mi opinión fortalecer el caso para un enfoque basado en la red. – micans

1

Guardo el link (que puede ser útil para el usuario específico) pero estoy de acuerdo con el comentario de Gavin. Para realizar una agrupación en k-means en Big Data, puede usar la función rxKmeans implementada en la implementación patentada Revolution R Enterprise de R (sé que esto puede ser un problema); esta función parece ser capaz de gestionar ese tipo de datos.

+6

En StackOverflow, las respuestas simples que emplean enlaces fuera del sitio están mal vistas, en el mejor de los casos. ¿Qué sucede si esa página se mueve o deja de estar disponible?Trate de incluir suficiente información en su respuesta para que se destaque por sí solo, de todos modos indique de dónde proviene la idea, pero no use simplemente un enlace en una respuesta. –

0

Salida Mahout, lo hará k significa en un gran conjunto de datos:

http://mahout.apache.org/

+0

En caso de que no lo hayas notado: marcó la pregunta "mahout" ... –

Cuestiones relacionadas