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?
sumber
Jawaban:
Saya tidak menggunakan R. Sering sangat lambat dan hampir tidak memiliki dukungan pengindeksan. Namun rekomendasi perangkat lunak dianggap di luar topik.
Perhatikan bahwa banyak algoritma tidak peduli bagaimana Anda menyimpan data Anda. Jika Anda lebih suka memiliki matriks yang jarang, itu harus menjadi pilihan Anda, bukan pilihan algoritma.
Orang yang menggunakan terlalu banyak R cenderung terjebak dalam pemikiran dalam operasi matriks (karena itu adalah satu-satunya cara untuk menulis kode cepat dalam R). Tetapi itu adalah cara berpikir yang terbatas. Misalnya k-means: tidak peduli. Secara khusus, itu tidak menggunakan jarak berpasangan sama sekali. Itu hanya perlu cara untuk menghitung kontribusi varians; yang setara dengan menghitung jarak Euclidean kuadrat.
Atau DBSCAN. Yang dibutuhkan hanyalah predikat "tetangga". Ini dapat bekerja dengan grafik yang berubah-ubah; hanya saja jarak Euclidean dan ambang Epsilon adalah cara paling umum untuk menghitung grafik lingkungan yang digunakannya.
PS Pertanyaan Anda tidak terlalu tepat. Apakah Anda merujuk ke matriks data jarang atau matriks kesamaan jarang ?
sumber