Saya mencoba menyusun daftar algoritma pengelompokan yang:
- Diimplementasikan dalam R
- Beroperasi pada matriks data jarang (bukan (dis) matriks kesamaan), seperti yang dibuat oleh fungsi matriks sparse .
Ada beberapa pertanyaan lain pada CV yang membahas konsep ini, tetapi tidak satupun dari mereka yang terhubung ke paket R yang dapat beroperasi langsung pada matriks jarang:
- Mengelompokkan dataset besar dan jarang
- Clustering data biner jarang dimensi tinggi
- Mencari implementasi clustering yang jarang dan berdimensi tinggi
- Pengelompokan yang efisien ruang
Sejauh ini, saya telah menemukan tepat satu fungsi dalam R yang dapat mengelompokkan matriks jarang:
skmeans : kmeans bola
Dari paket skmeans . km berarti menggunakan jarak kosinus . Beroperasi pada objek dgTMatrix. Menyediakan antarmuka untuk algoritma k-means genetik, pclust, CLUTO, gmeans, dan kmndirs.
Contoh:
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))
Algoritme berikut mendapatkan menyebutkan terhormat: mereka tidak cukup algoritma pengelompokan, tetapi beroperasi pada matriks jarang.
apriori : asosiasi aturan penambangan
Dari paket arules . Beroperasi pada objek "transaksi", yang dapat dipaksakan dari objek ngCMatrix. Dapat digunakan untuk membuat rekomendasi.
contoh:
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 jarang
Dari paket irlba . Apakah SVD pada matriks jarang. Dapat digunakan untuk mengurangi dimensi matriks jarang sebelum pengelompokan dengan paket R tradisional.
contoh:
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 : Pengelompokan Propagasi Afinitas
library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while
Apa fungsi lain di luar sana?