Seyrek veri matrislerinde çalışan kümeleme algoritmaları [kapalı]


18

Kümeleme algoritmalarının bir listesini derlemeye çalışıyorum:

  1. R'de uygulandı
  2. SparseMatrix işlevi tarafından oluşturulanlar gibi seyrek veri matrislerini (benzerlik matrislerini değil) çalıştırın .

CV hakkında bu kavramı tartışan birkaç soru daha vardır, ancak bunların hiçbiri doğrudan seyrek matrislerde çalışabilen R paketlerine bağlanmaz:

  1. Büyük ve seyrek veri kümelerini kümeleme
  2. Yüksek boyutlu seyrek ikili verileri kümeleme
  3. Seyrek ve yüksek boyutlu kümeleme uygulaması aranıyor
  4. Yerden tasarruf sağlayan kümeleme

Şimdiye kadar, R'de seyrek matrisleri kümeleyebilen bir fonksiyon buldum:

skmeans : küresel kmeans

Gönderen skmeans paketinde . Kosinüs mesafesi kullanarak kmeans . DgTMatrix nesneleri üzerinde çalışır. Genetik bir k-ortalama algoritması, pclust, CLUTO, gmeans ve kmndirs için bir arayüz sağlar.

Misal:

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))

Aşağıdaki algoritmalar onurlu sözlerden bahseder: oldukça kümeleme algoritmaları değildir, ancak seyrek matrisler üzerinde çalışırlar.

apriori : dernek madenciliği kuralları

Gönderen arules paketinde . NgCMatrix nesnelerinden zorlanabilen "işlemler" nesneleri üzerinde çalışır. Öneride bulunmak için kullanılabilir.

misal:

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 : seyrek SVD

Gönderen irlba paketinin . Seyrek matrislerde SVD yapar. Geleneksel R paketleri ile kümelenmeden önce seyrek matrislerin boyutsallığını azaltmak için kullanılabilir.

misal:

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 : Afinite Yayılım Kümelemesi

library(apcluster)
sim <- crossprod(M1)
sim <- sim / sqrt(sim)
clust_ap <- apcluster(sim) #Takes a while

Orada başka hangi fonksiyonlar var?


Şunu mu demek istediniz "çok sıfır" da veya "çok sayıda eksik değer" de?
cbeleites Monica

Bu soru, stats.stackexchange.com/help/dont-ask adresindeki birden fazla ölçüt uyarınca konu dışı görünüyor : her yanıt aynı derecede geçerli olacak, sağlananlara ek olarak daha fazla yanıt bekliyorsunuz ve gerçek bir sorun yok çözüldü.
whuber

Bunun kapandığını anlıyorum, ancak benzer bir sorunum olduğu için SO'ya
MarkeD

1
@MarkeD Çok teşekkürler! Gerçekten çok kötü yazılım önerileri burada konu dışı, çünkü onları sormak için başka hiçbir yerde bulamadım.
Zach

3
bir kez daha çok yararlı bir soru kapatıldı :( Cevabı bilmiyorsanız sadece yakın oy
vermeyin

Yanıtlar:


1

R kullanmıyorum. Genellikle çok yavaştır ve indeksleme desteği yoktur. Ancak yazılım önerileri yine de konu dışı sayılır.

Çok sayıda algoritmanın verilerinizi nasıl sakladığınızla ilgisi olmadığını unutmayın. Seyrek bir matrise sahip olmayı tercih ederseniz, algoritma seçimi değil, bu sizin tercihiniz olmalıdır.

Çok fazla R kullanan insanlar matris işlemlerinde düşünmeye takılı kalmaya eğilimlidir (çünkü R'de hızlı kod yazmanın tek yolu budur). Ancak bu sınırlı bir düşünme şeklidir. Örneğin k-anlamı: umursamaz. Özellikle çift mesafeler kullanmaz. Sadece varyans katkısını hesaplamak için bir yola ihtiyacı vardır; bu da kareli Öklid mesafesinin hesaplanmasına eşdeğerdir.

Veya DBSCAN. Tek ihtiyacı olan bir "komşu" yüklemidir. Rasgele grafikler ile çalışabilir; sadece Öklid mesafesi ve Epsilon eşiği kullandığı semt grafiğini hesaplamanın en yaygın yoludur.

PS Sorunuz çok kesin değil. Seyrek veri matrislerine veya seyrek benzerlik matrislerine atıfta bulunuyor musunuz ?


1
seyrek veri matrisleri
Zach

Çoğu algoritma seyrek veri matrislerinde çalışabilir. Örneğin, AGNES, PAM, DBSCAN, OPTİK, CLARA, ...
Anony-Mousse -Reinstate Monica

R'yi bilmeseniz bile neden cevap verdiğinizden emin değilim.
R'yi bilmeseniz verdiğinizden

Biliyorum R. Muhtemelen ortalama R kullanıcısından bile daha iyi. R'de standart olmayan değerlendirmeyi biliyorum ve modüllerin çoğunun C ile yazıldığını biliyorum, bu yüzden seyrek bir matrisi geçtiğinizde, gerçek koda geçmeden önce bir duyu matrisine kopyalanır. Ve her paket bunu yapmak için farklı bir yol kullanıyor ... Bu verimli değil. Verimlilik veya iyi entegrasyon veya geriye dönük uyumluluk veya koordineli geliştirme gerekiyorsa R'yi seçmezsiniz.
Anonim-Mousse-Monica'yı geri döndür
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.