Algoritmi di clustering che operano su matrici di dati sparsi [chiuso]


18

Sto cercando di compilare un elenco di algoritmi di clustering che sono:

  1. Implementato in R
  2. Operare su matrici di dati sparsi (non matrici di (dis) somiglianza), come quelle create dalla funzione sparseMatrix .

Esistono diverse altre domande sul CV che trattano questo concetto, ma nessuna di esse si collega a pacchetti R che possono operare direttamente su matrici sparse:

  1. Cluster di set di dati grandi e sparsi
  2. Raggruppamento di dati binari sparsi ad alta dimensione
  3. Alla ricerca di un'implementazione di clustering sparsa e ad alta dimensione
  4. Clustering efficiente in termini di spazio

Finora, ho trovato esattamente una funzione in R che può raggruppare matrici sparse:

skmeans : kmean sferici

Dal pacchetto skmeans . kmean usando la distanza del coseno . Funziona su oggetti dgTMatrix. Fornisce un'interfaccia con un algoritmo genetico di k-medie, pclust, CLUTO, gmeans e kmndir.

Esempio:

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))

I seguenti algoritmi ottengono menzioni oneste: non sono abbastanza algoritmi di clustering, ma operano su matrici sparse.

apriori : mining delle regole di associazione

Dal pacchetto arules . Funziona su oggetti "transazioni", che possono essere forzati da oggetti ngCMatrix. Può essere usato per formulare raccomandazioni.

esempio:

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 sparsa

Dal pacchetto irlba . SVD su matrici sparse. Può essere utilizzato per ridurre la dimensionalità delle matrici sparse prima del raggruppamento con i pacchetti R tradizionali.

esempio:

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 : Affinity Propagation Clustering

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

Quali altre funzioni ci sono?


Vuoi dire sparso come in "molti zeri" o come in "molti valori mancanti"?
cbeleites supporta Monica il

Questa domanda sembra off-topic in base a più criteri su stats.stackexchange.com/help/dont-ask : ogni risposta sarebbe ugualmente valida, ci si aspetta più risposte oltre a quelle fornite, e non ci sono problemi reali risolto.
whuber

Mi rendo conto che questo è stato chiuso, ma ho inciampato su tutte le tue domande su questo mentre sfoglio SO poiché ho avuto un problema simile;) Ho trovato questa libreria che utilizza la propensione all'affinità che può funzionare con matrici sparse: bioinf.jku.at / software / apcluster
Contrassegnato

1
@MarkeD Grazie mille! È davvero un peccato che i consigli sul software siano fuori tema qui, dato che non ho trovato altrove online per richiederli.
Zach,

3
ancora una volta la domanda molto utile è chiusa :( se non conosci la risposta non votare per la chiusura!
MonsterMMORPG

Risposte:


1

Non uso R. È spesso molto lento e non ha quasi alcun supporto per l'indicizzazione. Ma i consigli sul software sono comunque considerati fuori tema.

Si noti che molti algoritmi non si preoccupano di come archiviare i dati. Se preferisci avere una matrice sparsa, questa dovrebbe essere la tua scelta, non la scelta degli algoritmi.

Le persone che usano troppa R tendono a rimanere bloccate nel pensare in operazioni a matrice (perché questo è l'unico modo per scrivere codice veloce in R). Ma questo è un modo di pensare limitato. Ad esempio k-significa: non importa. In particolare, non utilizza affatto distanze a coppie. Ha solo bisogno di un modo per calcolare il contributo di varianza; che equivale a calcolare la distanza euclidea quadrata.

O DBSCAN. Tutto ciò di cui ha bisogno è un predicato "vicino". Può funzionare con grafici arbitrari; è solo quella distanza euclidea e la soglia di Epsilon è il modo più comune di calcolare il grafico di quartiere che usa.

PS La tua domanda non è molto precisa. Ti riferisci a matrici di dati sparsi o matrici di somiglianza sparse ?


1
matrici di dati sparse
Zach

La maggior parte degli algoritmi può operare su matrici di dati sparsi. Ad esempio, AGNES, PAM, DBSCAN, OTTICA, CLARA, ...
Anony-Mousse -Reststate Monica

Non sono sicuro del perché hai anche risposto se non conosci nemmeno R.
user3932000

Conosco R. Probabilmente anche meglio dell'utente medio di R. Conosco una valutazione non standard in R e so che la maggior parte dei moduli sono scritti in C, quindi quando si passa una matrice sparsa, viene prima copiata in una matrice di rilevamento prima di passarla al codice effettivo. E ogni pacchetto usa un modo diverso di farlo ... Non è efficiente. Non si sceglie R se si necessita di efficienza, buona integrazione, retrocompatibilità o sviluppo coordinato.
Anony-Mousse - Sostituisci Monica il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.