Tengo una matriz semi-pequeña de características binarias de dimensión 250k x 100. Cada fila es un usuario y las columnas son "etiquetas" binarias de algún comportamiento del usuario, por ejemplo, "likes_cats".
user 1 2 3 4 5 ...
-------------------------
A 1 0 1 0 1
B 0 1 0 1 0
C 1 0 0 1 0
Me gustaría encajar a los usuarios en grupos de 5-10 y analizar las cargas para ver si puedo interpretar grupos de comportamiento del usuario. Parece haber bastantes enfoques para ajustar clusters en datos binarios: ¿cuál creemos que podría ser la mejor estrategia para estos datos?
PCA
Hacer una matriz de similitud Jaccard , ajustar un grupo jerárquico y luego usar los "nodos" superiores.
K-medianas
K-medoides
Proximus ?
Inés
Hasta ahora he tenido cierto éxito con el uso de la agrupación jerárquica, pero realmente no estoy seguro de que sea la mejor manera de hacerlo ...
tags = read.csv("~/tags.csv")
d = dist(tags, method = "binary")
hc = hclust(d, method="ward")
plot(hc)
cluster.means = aggregate(tags,by=list(cutree(hc, k = 6)), mean)
fuente
Respuestas:
El análisis de clase latente es un enfoque posible.
Tome la siguiente distribución de probabilidad donde A, B y C pueden tomar valores de 1 o 0.
Si estos fueran independientes entre sí, entonces esperaríamos ver:
Una vez que se elimina esta posibilidad, podríamos plantear la hipótesis de que cualquier dependencia observada se debe a la agrupación de valores dentro de subgrupos no observados. Para probar esta idea, podemos estimar el siguiente modelo:
Sin embargo, tratar de identificar patrones significativos en 100 variables con 5-10 grupos probablemente requerirá reducir esa lista antes de estimar el modelo, que es un tema bastante complicado por derecho propio ( REF ).
fuente
En realidad, la extracción frecuente de conjuntos de elementos puede ser una mejor opción que la agrupación en dichos datos.
El conjunto habitual de algoritmos orientados a vectores no tiene mucho sentido. K-means, por ejemplo, producirá medios que ya no son binarios.
fuente