J'essaie de compiler une liste d'algorithmes de clustering qui sont:
- Mis en œuvre dans R
- Opérer sur des matrices de données éparses (pas des matrices de (dis) similitude), telles que celles créées par la fonction sparseMatrix .
Il y a plusieurs autres questions sur CV qui discutent de ce concept, mais aucune d'entre elles n'est liée à des packages R qui peuvent fonctionner directement sur des matrices clairsemées:
- Regroupement de jeux de données volumineux et clairsemés
- Regroupement de données binaires clairsemées de grande dimension
- Recherche d'implémentation de clustering clairsemée et de grande dimension
- Cluster efficace dans l'espace
Jusqu'à présent, j'ai trouvé exactement une fonction dans R qui peut regrouper des matrices clairsemées:
skmeans : kmeans sphériques
Du paquet skmeans . kmeans utilisant la distance cosinus . Fonctionne sur les objets dgTMatrix. Fournit une interface à un algorithme génétique k-means, pclust, CLUTO, gmeans et kmndirs.
Exemple:
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))
Les algorithmes suivants obtiennent des mentions honorables: ils ne sont pas tout à fait des algorithmes de clustering, mais fonctionnent sur des matrices clairsemées.
apriori : l'association règle l'exploitation minière
Du paquet arules . Fonctionne sur les objets "transactions", qui peuvent être forcés à partir d'objets ngCMatrix. Peut être utilisé pour faire des recommandations.
exemple:
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 clairsemée
Du forfait irlba . Est-ce que SVD sur des matrices clairsemées. Peut être utilisé pour réduire la dimensionnalité des matrices clairsemées avant le regroupement avec les packages R traditionnels.
exemple:
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 : Clustering de propagation d'affinité
library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while
Quelles sont les autres fonctions disponibles?
la source
Réponses:
Je n'utilise pas R. Il est souvent très lent et n'a pratiquement aucun support d'indexation. Mais les recommandations de logiciels sont de toute façon considérées comme hors sujet.
Notez que de nombreux algorithmes ne se soucient pas de la façon dont vous stockez vos données. Si vous préférez avoir une matrice clairsemée, cela devrait être votre choix, pas le choix des algorithmes.
Les gens qui utilisent trop R ont tendance à rester coincés dans la réflexion sur les opérations matricielles (car c'est la seule façon d'écrire du code rapide dans R). Mais c'est une façon de penser limitée. Par exemple, k signifie: cela ne fait rien. En particulier, il n'utilise pas du tout les distances par paires. Il a juste besoin d'un moyen de calculer la contribution de la variance; ce qui équivaut à calculer la distance euclidienne au carré.
Ou DBSCAN. Il suffit d'un prédicat "voisin". Il peut fonctionner avec des graphes arbitraires; c'est juste que la distance euclidienne et le seuil d'Epsilon est le moyen le plus courant de calculer le graphe de voisinage qu'il utilise.
PS Votre question n'est pas très précise. Faites-vous référence à des matrices de données clairsemées ou à des matrices de similitude clairsemées ?
la source