¿Qué algoritmo debo usar para agrupar un gran conjunto de datos binarios en pocas categorías?

11

Tengo una matriz grande de datos binarios (650K filas * 62 columnas) (solo 0-1 entradas). La matriz es principalmente escasa: aproximadamente el 8% está lleno.

Me gustaría agruparlo en 5 grupos, digamos nombrado del 1 al 5. He intentado el agrupamiento jerárquico y no pude manejar el tamaño. También he utilizado el algoritmo de agrupación de k-medias basado en la distancia de Hamming, considerando los vectores de 650K de longitud 62. No obtuve resultados adecuados con ninguno de estos.

Por favor ayuda.

Sin límites26
fuente
No puedo comentar b / c de mi 1 repetición, así que tuve que escribir esto como respuesta. Podrías mirar a Jaccard Similarity. Creo que Python Scipy tiene implementaciones de la misma. Jaccard ...
gobrewers14
¿Hay alguna razón para suponer que los datos se dividen naturalmente en cinco grupos, al menos en cierta medida? ¿Está realmente interesado en la agrupación de filas o también está interesado en las relaciones entre los 62 rasgos codificados en los vectores de bits? Si es lo último, entonces otras técnicas son más adecuadas.
micans

Respuestas:

4

Estás haciendo la pregunta equivocada.

En lugar de preguntar "qué algoritmo", debería preguntarse "qué es una categoría / clúster significativo en su aplicación".

No me sorprende que los algoritmos anteriores no funcionen, están diseñados para casos de uso muy diferentes. k-means no funciona con otras distancias arbitrarias. No lo use con la distancia de Hamming. Hay una razón por la que se llama k- medias , solo tiene sentido usarla cuando la media aritmética es significativa (que no es para datos binarios).

Es posible que desee probar los modos k, IIRC, esta es una variante que en realidad está destinada a ser utilizada con datos categoriales, y los datos binarios son algo categoriales (pero la dispersión aún puede matarlo).

Pero antes que nada, ¿ha eliminado duplicados para simplificar sus datos, y ha eliminado columnas únicas / vacías, por ejemplo?

Quizás APRIORI o enfoques similares también sean más significativos para su problema.

De cualquier manera, primero descubra lo que necesita, luego qué algoritmo puede resolver este desafío. Trabaje basado en datos , no probando algoritmos aleatorios.

HA SALIDO - Anony-Mousse
fuente
¿Puede explicar por qué "No usar con distancia de Hamming"? Puede tener sentido, después de todo, está disponible en Matlab. No me importa abrir una nueva pregunta, si tiene sentido.
Dror Atariah
Por la media. La media aritmética no tiene sentido con la distancia de Hamming o los datos binarios. Utilice el modo o medoid en su lugar.
HA SALIDO - Anony-Mousse
Solo para asegurarme de que estoy entendiendo bien: matlab usa la media aritmética cuando actualiza los centroides cuando usa las medias k junto con la métrica de Hamming. ¿Está bien? ¿Cuál es la forma correcta de usar esta métrica en matlab?
Dror Atariah
k-means se llama k- means porque usa la media. De lo contrario, se llama k-medoides, modos k, etc. La media es buena para L2: suma de desviaciones al cuadrado.
HA SALIDO - Anony-Mousse
Entonces, matlab usa k- significa junto con la métrica de hamming; Esto no tiene mucho sentido.
Dror Atariah
3

Tal vez llego un poco tarde con la respuesta, pero probablemente sería útil para algún cuerpo en el futuro.

La teoría de resonancia adaptativa es un buen algoritmo para problemas de clasificación binaria. Consulte sobre ART 1. Puede encontrar más información en el libro gratuito de Diseño de redes neuronales en el capítulo 19.

Esta red combina una gran idea biológica y una buena implementación matemática. Además, este algoritmo es fácil de implementar y, en este libro, también puede encontrar instrucciones paso a paso sobre cómo construir este clasificador.

itdxer
fuente
2

Un algoritmo clásico para la agrupación de datos binarios es el modelo de mezcla de Bernoulli. El modelo puede ajustarse usando métodos bayesianos y también puede ajustarse usando EM (maximización de expectativas). Puede encontrar código de python de muestra en todo GitHub, mientras que el primero es más poderoso pero también más difícil. Tengo una implementación de C # del modelo en GitHub (¡usa Infer.NET que tiene una licencia restrictiva!).

El modelo es bastante simple. Primero muestre el clúster al que pertenece un punto de datos. Luego muestree independientemente de tantos Bernoullis como tenga dimensiones en su conjunto de datos. ¡Tenga en cuenta que esto implica independencia condicional de los valores binarios dados el clúster!

En la configuración bayesiana, la asignación anterior sobre el clúster es una distribución de Dirichlet. Este es el lugar para poner prioridades si crees que algunos grupos son más grandes que otros. Para cada grupo debe especificar antes, una distribución Beta, para cada distribución de Bernoulli. Típicamente, este previo es Beta (1,1) o uniforme. Finalmente, no olvide inicializar aleatoriamente las asignaciones de clúster cuando se brinden datos. Esto romperá la simetría y la muestra no se atascará.

Hay varias características interesantes del modelo BMM en un entorno bayesiano:

  1. Agrupación en línea (los datos pueden llegar como una secuencia)

  2. El modelo se puede usar para inferir las dimensiones faltantes

El primero es muy útil cuando el conjunto de datos es muy grande y no cabe en la RAM de una máquina. El segundo se puede usar en todo tipo de tareas de imputación de datos faltantes, por ejemplo. imputando la mitad faltante de la imagen binaria MNIST.

Vladislavs Dovgalecs
fuente