Sto cercando di compilare un elenco di algoritmi di clustering che sono:
- Implementato in R
- 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:
- Cluster di set di dati grandi e sparsi
- Raggruppamento di dati binari sparsi ad alta dimensione
- Alla ricerca di un'implementazione di clustering sparsa e ad alta dimensione
- 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?