Ich versuche, eine Liste von Clustering-Algorithmen zu erstellen, die Folgendes umfassen:
- Implementiert in R
- Arbeiten Sie mit Datenmatrizen mit geringer Dichte (keine (Nicht-) Ähnlichkeitsmatrizen), wie sie mit der Funktion sparseMatrix erstellt wurden .
Es gibt mehrere andere Fragen im Lebenslauf, die dieses Konzept behandeln, aber keine davon ist mit R-Paketen verknüpft, die direkt mit dünnen Matrizen arbeiten können:
- Clustering von großen und spärlichen Datensätzen
- Clustering von hochdimensionalen, spärlichen Binärdaten
- Auf der Suche nach einer spärlichen und hochdimensionalen Clustering-Implementierung
- Platzsparendes Clustering
Bisher habe ich in R genau eine Funktion gefunden, die spärliche Matrizen gruppieren kann:
Skmeans : sphärische kmeans
Aus dem skmeans-Paket . KMeans Verwendung Cosinus Abstand . Funktioniert mit dgTMatrix-Objekten. Bietet eine Schnittstelle zu einem genetischen k-means-Algorithmus, pclust, CLUTO, gmeans und kmndirs.
Beispiel:
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))
Die folgenden Algorithmen werden lobend erwähnt: Sie sind keine reinen Cluster-Algorithmen, sondern arbeiten mit spärlichen Matrizen.
apriori : Verbandsregeln Bergbau
Aus dem Paket arules . Funktioniert mit "Transaktionen" -Objekten, die aus ngCMatrix-Objekten erzwungen werden können. Kann verwendet werden, um Empfehlungen abzugeben.
Beispiel:
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 : spärliche SVD
Aus dem irlba-Paket . Führt SVD auf spärlichen Matrizen durch. Kann verwendet werden, um die Dimensionalität von dünnen Matrizen vor dem Clustering mit herkömmlichen R-Paketen zu reduzieren.
Beispiel:
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 der Affinitätsausbreitung
library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while
Welche anderen Funktionen gibt es da draußen?
quelle
Antworten:
Ich benutze R nicht. Es ist oft sehr langsam und hat so gut wie keine Indizierungsunterstützung. Software-Empfehlungen werden jedoch ohnehin als nicht thematisch betrachtet.
Beachten Sie, dass es vielen Algorithmen egal ist, wie Sie Ihre Daten speichern. Wenn Sie eine spärliche Matrix bevorzugen, sollten Sie diese wählen, nicht die Wahl des Algorithmus.
Menschen, die zu viel R verwenden, neigen dazu, beim Denken in Matrixoperationen hängen zu bleiben (weil dies die einzige Möglichkeit ist, schnellen Code in R zu schreiben). Aber das ist eine eingeschränkte Denkweise. Zum Beispiel bedeutet k: es ist egal. Insbesondere werden keine paarweisen Abstände verwendet. Es muss nur ein Weg gefunden werden, um den Varianzbeitrag zu berechnen. Dies entspricht der Berechnung der euklidischen Quadratdistanz.
Oder DBSCAN. Alles was es braucht, ist ein "Nachbar" -Prädikat. Es kann mit beliebigen Graphen arbeiten; Es ist nur so, dass die euklidische Entfernung und der Epsilon-Schwellenwert die gebräuchlichste Methode zur Berechnung des von ihr verwendeten Nachbarschaftsgraphen sind.
PS Ihre Frage ist nicht sehr präzise. Beziehen Sie sich auf spärliche Datenmatrizen oder spärliche Ähnlichkeitsmatrizen ?
quelle