Algorytmy grupowania, które działają na rzadkich macierzach danych [zamknięte]


18

Próbuję skompilować listę algorytmów klastrowania, które są:

  1. Zaimplementowano w R
  2. Operuj na rzadkich macierzach danych (nie (nie) macierzach podobieństwa), takich jak te utworzone przez funkcję sparseMatrix .

Istnieje kilka innych pytań dotyczących CV, które omawiają tę koncepcję, ale żadne z nich nie prowadzi do pakietów R, które mogą działać bezpośrednio na rzadkich macierzach:

  1. Grupowanie dużych i rzadkich zestawów danych
  2. Grupowanie wielowymiarowych rzadkich danych binarnych
  3. Poszukuję rzadkiej i wielowymiarowej implementacji klastrowania
  4. Klastry zajmujące mało miejsca

Do tej pory znalazłem dokładnie jedną funkcję w R, która może grupować rzadkie macierze:

skmeans : sferyczne kmeany

Z pakietu skmeans . kmeans przy użyciu odległości cosinus . Działa na obiektach dgTMatrix. Zapewnia interfejs do genetycznego algorytmu k-średnich, pclust, CLUTO, gmeans i kmndirs.

Przykład:

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

Następujące algorytmy otrzymują godne pochwały wzmianki: nie są to algorytmy grupujące, ale działają na rzadkich macierzach.

apriori : wydobycie zasad stowarzyszenia

Z pakietu arules . Działa na obiektach „transakcji”, które można wymusić z obiektów ngCMatrix. Może służyć do formułowania zaleceń.

przykład:

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

Z pakietu irlba . Czy SVD na rzadkich matrycach. Może być stosowany do zmniejszenia wymiarów rzadkich matryc przed grupowaniem w tradycyjne pakiety R.

przykład:

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 : Klaster propagacji powinowactwa

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

Jakie są inne funkcje?


Czy masz na myśli rzadkie, jak w „wielu zerach” czy „w wielu brakujących wartościach”?
cbeleites wspiera Monikę

To pytanie wydaje się być nie na temat, zgodnie z wieloma kryteriami na stronie stats.stackexchange.com/help/dont-ask : każda odpowiedź byłaby równie ważna, oczekujesz więcej odpowiedzi oprócz tych podanych i nie ma rzeczywistego problemu rozwiązany.
whuber

Zdaję sobie sprawę, że to zostało zamknięte, ale potknąłem się o wszystkie twoje pytania na ten temat podczas przeglądania SO, ponieważ miałem podobny problem;) Znalazłem tę bibliotekę, która wykorzystuje skłonność do powinowactwa, która może pracować z rzadkimi macierzami: bioinf.jku.at / software / apcluster
MarkeD

1
@MarkeD Dziękuję bardzo! Naprawdę szkoda, że ​​zalecenia dotyczące oprogramowania są tutaj nie na temat, ponieważ nie znalazłem nigdzie indziej w Internecie, aby o nie poprosić.
Zach

3
po raz kolejny bardzo przydatne pytanie jest zamknięte :( jeśli nie znasz odpowiedzi, po prostu nie głosuj na zamknięcie!
MonsterMMORPG

Odpowiedzi:


1

Nie używam R. Jest to często bardzo wolne i prawie nie obsługuje indeksowania. Ale i tak rekomendacje oprogramowania są uważane za nie na temat.

Pamiętaj, że wiele algorytmów nie ma znaczenia, w jaki sposób przechowujesz swoje dane. Jeśli wolisz mieć rzadką macierz, powinien to być twój wybór, a nie wybór algorytmów.

Ludzie, którzy używają zbyt dużo R, zwykle utknęli w myśleniu podczas operacji na macierzach (ponieważ jest to jedyny sposób na pisanie szybkiego kodu w R). Ale to ograniczony sposób myślenia. Na przykład k-oznacza: to nie obchodzi. W szczególności nie używa wcale par odległości. Potrzebuje tylko sposobu na obliczenie wkładu wariancji; co jest równoważne obliczeniu kwadratowej odległości euklidesowej.

Lub DBSCAN. Wszystko czego potrzebuje to orzeczenie „sąsiada”. Może pracować z dowolnymi wykresami; po prostu odległość euklidesowa i próg Epsilon są najczęstszym sposobem obliczania stosowanego przez siebie wykresu sąsiedztwa.

PS Twoje pytanie nie jest bardzo precyzyjne. Czy odwołujesz się do rzadkich macierzy danych czy rzadkich macierzy podobieństwa ?


1
rzadkie macierze danych
Zach

Większość algorytmów może działać na rzadkich matrycach danych. Np. AGNES, PAM, DBSCAN, OPTYKA, CLARA, ...
Anony-Mus-Przywróć Monikę

Nie wiem, dlaczego nawet odpowiedziałeś, jeśli nawet nie znasz R.
użytkownik3932000

Znam R. Prawdopodobnie nawet lepiej niż przeciętny użytkownik R. Znam niestandardową ocenę w R i wiem, że większość modułów jest napisana w C, więc kiedy przekazujesz rzadką macierz, jest ona najpierw kopiowana do macierzy sensownej, zanim zostanie przekazana do właściwego kodu. I każdy pakiet używa innego sposobu ... To nie jest wydajne. Nie wybierasz R, jeśli potrzebujesz wydajności lub dobrej integracji, kompatybilności wstecznej lub skoordynowanego rozwoju.
Anony-Mus-Przywróć Monikę
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.