Algoritmos de agrupamiento que operan en matrices de datos dispersos [cerrado]

18

Estoy tratando de compilar una lista de algoritmos de agrupamiento que son:

  1. Implementado en R
  2. Opere en matrices de datos dispersos (no (des) matrices de similitud), como las creadas por la función sparseMatrix .

Hay varias otras preguntas en CV que discuten este concepto, pero ninguna de ellas se vincula a paquetes R que pueden operar directamente en matrices dispersas:

  1. Agrupación de conjuntos de datos grandes y dispersos
  2. Agrupación de datos binarios dispersos de alta dimensión
  3. Buscando una implementación de agrupación dispersa y de alta dimensión
  4. Agrupación de espacio eficiente

Hasta ahora, he encontrado exactamente una función en R que puede agrupar matrices dispersas:

skmeans : kmeans esféricos

Del paquete skmeans . k significa que usa la distancia cosenoidal . Opera en objetos dgTMatrix. Proporciona una interfaz para un algoritmo genético k-means, pclust, CLUTO, gmeans y kmndirs.

Ejemplo:

library(Matrix)
set.seed(42)

nrow <- 1000
ncol <- 10000
i <- rep(1:nrow, sample(5:100, nrow, replace=TRUE))
nnz <- length(i)
M1 <- sparseMatrix(i = i,
                   j = sample(ncol, nnz, replace = TRUE),
                   x = sample(0:1 , nnz, replace = TRUE), 
                   dims = c(nrow, ncol))
M1 <- M1[rowSums(M1) != 0, colSums(M1) != 0]

library(skmeans)
library(cluster)
clust_sk <- skmeans(M1, 10, method='pclust', control=list(verbose=TRUE))
summary(silhouette(clust_sk))

Los siguientes algoritmos obtienen menciones honestas: no son algoritmos de agrupación, sino que funcionan en matrices dispersas.

a priori : la asociación gobierna la minería

Del paquete arules . Opera en objetos de "transacciones", que pueden ser forzados a partir de objetos ngCMatrix. Se puede usar para hacer recomendaciones.

ejemplo:

library(arules)
M1_trans <- as(as(t(M1), 'ngCMatrix'), 'transactions')
rules <- apriori(M1_trans, parameter = 
list(supp = 0.01, conf = 0.01, target = "rules"))
summary(rules)

irlba : SVD escasa

Del paquete irlba . Hace SVD en matrices dispersas. Se puede utilizar para reducir la dimensionalidad de matrices dispersas antes de la agrupación con paquetes R tradicionales.

ejemplo:

library(irlba)
s <- irlba(M1, nu = 0, nv=10)
M1_reduced <- as.matrix(M1 %*% s$v)
clust_kmeans <- kmeans(M1, 10)
summary(silhouette(clust_kmeans$cluster, dist(M1_reduced)))

apcluster : agrupación de propagación de afinidad

library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while

¿Qué otras funciones hay por ahí?

Zach
fuente
¿Quieres decir escaso como en "muchos ceros" o como "muchos valores perdidos"?
cbeleites apoya a Monica el
Esta pregunta parece estar fuera de tema según múltiples criterios en stats.stackexchange.com/help/dont-ask : cada respuesta sería igualmente válida, espera más respuestas además de las proporcionadas, y no hay ningún problema real resuelto
whuber
Me doy cuenta de que esto se cerró, pero he estado tropezando con todas sus preguntas sobre esto mientras busco SO porque tenía un problema similar;) Encontré esta biblioteca que usa propensión de afinidad que puede funcionar con matrices dispersas: bioinf.jku.at / software / apcluster
MarkeD
1
@MarkeD ¡Muchas gracias! Es realmente muy malo que las recomendaciones de software estén fuera de tema aquí, ya que no he encontrado ningún otro lugar en línea para pedirlas.
Zach
3
una vez más, se cierra una pregunta muy útil :( si no conoce la respuesta, ¡simplemente no vote por cierre!
MonsterMMORPG

Respuestas:

1

No uso R. A menudo es muy lento y casi no tiene soporte de indexación. Pero las recomendaciones de software se consideran fuera de tema de todos modos.

Tenga en cuenta que a muchos algoritmos no les importa cómo almacena sus datos. Si prefiere tener una matriz dispersa, esa debería ser su elección, no la elección de algoritmos.

Las personas que usan demasiado R tienden a atascarse en pensar en operaciones matriciales (porque esa es la única forma de escribir código rápido en R). Pero esa es una forma limitada de pensar. Por ejemplo k-significa: no le importa. En particular, no utiliza distancias por pares en absoluto. Solo necesita una manera de calcular la contribución de la varianza; que es equivalente a calcular la distancia euclidiana al cuadrado.

O DBSCAN. Todo lo que necesita es un predicado "vecino". Puede funcionar con gráficos arbitrarios; es solo que la distancia euclidiana y el umbral de Epsilon es la forma más común de calcular el gráfico de vecindad que usa.

PD: Tu pregunta no es muy precisa. ¿Se refiere a matrices de datos dispersas o matrices de similitud dispersas ?

Anony-Mousse -Reinstate a Monica
fuente
1
matrices de datos dispersas
Zach
La mayoría de los algoritmos pueden operar en matrices de datos dispersas. Por ejemplo, AGNES, PAM, DBSCAN, OPTICS, CLARA, ...
Anony-Mousse -Reinstalar a Monica el
No estoy seguro de por qué incluso respondiste si ni siquiera conoces a R.
user3932000
Conozco a R. Probablemente incluso mejor que el usuario promedio de R. Sé que la evaluación no estándar en R y sé que la mayoría de los módulos están escritos en C, por lo que cuando pasa una matriz dispersa, primero se copia en una matriz de detección antes de pasarla al código real. Y cada paquete usa una forma diferente de hacerlo ... Eso no es eficiente. No elige R si necesita eficiencia o buena integración o compatibilidad con versiones anteriores o desarrollo coordinado.
Anony-Mousse -Reinstalar a Monica el