Grupowanie macierzy binarnej

22

Mam pół-małą macierz funkcji binarnych o wymiarze 250k x 100. Każdy wiersz to użytkownik, a kolumny to binarne „tagi” niektórych zachowań użytkownika, np. „Like_cats”.

user  1   2   3   4   5  ...
-------------------------
A     1   0   1   0   1
B     0   1   0   1   0
C     1   0   0   1   0

Chciałbym dopasować użytkowników do 5-10 klastrów i przeanalizować obciążenia, aby zobaczyć, czy potrafię interpretować grupy zachowań użytkowników. Wydaje się, że istnieje wiele metod dopasowywania klastrów do danych binarnych - co naszym zdaniem może być najlepszą strategią dla tych danych?

  • PCA

  • Tworzenie macierzy podobieństwa Jaccard , dopasowanie hierarchicznego klastra, a następnie użycie górnych „węzłów”.

  • Mediany K.

  • K-medoidy

  • Proximus ?

  • Agnieszka

Do tej pory odnosiłem pewne sukcesy w stosowaniu klastrowania hierarchicznego, ale tak naprawdę nie jestem pewien, czy jest to najlepsza droga…

tags = read.csv("~/tags.csv")
d = dist(tags, method = "binary")
hc = hclust(d, method="ward")
plot(hc)
cluster.means = aggregate(tags,by=list(cutree(hc, k = 6)), mean)

wprowadź opis zdjęcia tutaj

wije
źródło
1
W przypadku dużych (wielu węzłów) i danych wielowymiarowych warto również wypróbować algorytm grupowania grafów (używając np. Podobieństwa tanimoto i metod takich jak grupowanie Louvaina, RNSC, mcl). Mam pewne wątpliwości, czy Twój typ danych wygeneruje znaczące klastry (oczywiście bardzo dobrze może), ale wątpliwości te dotyczą ogólnie klastrowania, a nie konkretnego rodzaju klastrowania. PCA to zdecydowanie coś, czego można spróbować.
micans
6
Szczerze mówiąc, jestem zaskoczony, że to pytanie przyciągnęło tak małą uwagę. Dlaczego tak jest Dla mnie to brzmi jak bardzo interesujące pytanie.
Dror Atariah

Odpowiedzi:

9

Jednym z możliwych podejść jest utajona analiza klas.

Weźmy następujący rozkład prawdopodobieństwa, w którym A, B i C mogą przyjąć wartości 1 lub 0.

P.(ZAja,bjot,dok)

Gdyby były one od siebie niezależne, spodziewalibyśmy się:

P.(ZAja,bjot,dok)=P.(ZAja)P.(bjot)P.(dok)

Po wyeliminowaniu tej możliwości możemy postawić hipotezę, że jakakolwiek zaobserwowana zależność jest spowodowana grupowaniem wartości w innych, nieobserwowanych podgrupach. Aby przetestować ten pomysł, możemy oszacować następujący model:

P.(ZAja,bjot,dok)=P.(Xn)P.(ZAja|Xn)P.(bjot|Xn)P.(dok|Xn)

Xnn

5n10

Jednak próba zidentyfikowania znaczących wzorców w 100 zmiennych z 5-10 grupami prawdopodobnie będzie wymagać zmniejszenia tej listy przed oszacowaniem modelu, co jest dość trudnym tematem samo w sobie ( REF ).

DL Dahly
źródło
Świetnie, interesująco. Jaka byłaby zaleta korzystania z tej techniki w porównaniu z innymi?
wije
Jedną z zalet jest to, że klastrowanie jest rozmyte, co pozwala uwzględnić niepewność przy kolejnych zadaniach klasowych. Innym jest to, że jest to metoda oparta na modelu. otrzymujesz wskaźniki dopasowania oparte na prawdopodobieństwie, które mogą pomóc w wyborze modelu. Oczywiście wiąże się to z koniecznością przyjęcia założeń dystrybucyjnych ... Jestem pewien, że inne ważne metody będą miały swoje kompromisy.
DL Dahly,
5

W rzeczywistości częste wyszukiwanie zestawów przedmiotów może być lepszym wyborem niż grupowanie takich danych.

Zwykły zestaw algorytmów zorientowanych na wektor nie ma większego sensu. Na przykład środki K wytwarzają środki, które nie są już binarne.

Anony-Mus-Przywróć Monikę
źródło
Czy warto używać częstych elementów, mimo że wolę skupiać użytkowników niż tagi (kolumny)?
wije
1
IMHO tak. Ale z oczywistych powodów reguły asocjacji nie są ścisłym podziałem zbioru danych. Użytkownik może być członkiem więcej niż jednego „zestawu częstych przedmiotów”. Czyli użytkownik może być zarówno fanem kota, jak i fanem psa; te dwie grupy nie są zmuszane do rozłączności.
Anony-Mus-Przywróć Monikę
Który IMHO jest naprawdę dobry. Zakładanie, że każdy użytkownik należy do dokładnie jednego klastra, wydaje mi się zbyt naiwne.
Anony-Mus-Przywróć Monikę