Pytanie:
Klastrowanie z danymi jakościowymi i liczbowymi
user3788557
2015-12-20 10:15:52 UTC
view on stackexchange narkive permalink

Często spotykam zbiory danych, które zawierają zarówno dane jakościowe, jak i liczbowe. Myślę, że to tylko fakt z życia, w którym dane nie są w jednej kategorii. Zasadniczo staram się znaleźć praktyczne podejście lub strategie, jak rozwiązać ten problem.

W wielu książkach i początkowych wyszukiwaniach w Google mam tendencję do uzyskiwania pewnego rodzaju grupowania Kmeans i wielu doktoratów -widzące papiery. Myślę, że jest to powszechny problem, więc zastanawiam się, czy ktoś może wskazać mi jakieś praktyczne sugestie lub metody, które mogę dalej zbadać i zaimplementować w R lub Pythonie?

W zasadzie jestem zagubiony i po prostu szukam dla jakiegoś kierunku!

Prosty sposób: wszelkie dane kategoryczne można traktować jako dane liczbowe przy użyciu jednego kodowania na gorąco.Jest to realizowane w sklearn
K-średnich nie powinno się stosować w obecności danych kategorycznych.W końcu co to znaczy „znaczą” takie dane?Przeszukaj tę witrynę pod kątem „grupowania danych kategorycznych, danych mieszanych, danych binarnych”.
@Romain można to obsługiwać w ten sposób, ale wyniki będą bez znaczenia.
Zwróć uwagę, że pytanie „zduplikowane” w tekście dotyczy również danych typu „mieszanego”.W przypadku Gowera zobacz także: http://stats.stackexchange.com/q/15287/7828 i odpowiedź @ttnphns tam
k-prototypy mogą być odpowiednią techniką.Więcej szczegółów można zobaczyć tutaj https://github.com/nicodv/kmodes
Dwa odpowiedzi:
Has QUIT--Anony-Mousse
2015-12-20 17:19:20 UTC
view on stackexchange narkive permalink

Algorytmy grupowania na podstawie odległości mogą obsłużyć dane kategorialne

Wystarczy wybrać odpowiednią funkcję odległości, taką jak odległość Gowera , która łączy atrybuty według potrzeb na jedną odległość. Następnie możesz uruchomić Hierarchical Clustering, DBSCAN, OPTICS i wiele innych.

Brzmi dobrze, ale to tylko część historii - wybór funkcji odległości ma ogromny wpływ na wynikach.

Wyniki prawdopodobnie nigdy nie będą „prawidłowe” z danymi kategorycznymi

Niemniej jednak grupowanie może nigdy nie działać dobrze na takich danych. Rozważmy opis z Wikipedii:

Analiza klastrów lub grupowanie to zadanie grupowania zestawu obiektów w taki sposób, aby obiekty w tej samej grupie (zwanej klastrem) były bardziej podobne (w sens lub inny) do siebie nawzajem niż do tych z innych grup (klastrów).

Tak więc do grupowania potrzebujesz jakościowego podobieństwa , aby algorytm wiedział, kiedy obiekty są „bardziej podobne” niż inne.

Dlatego wiele algorytmów używa jakiejś formy odległości: bliżej = bardziej do siebie. Jest to bardzo intuicyjny sposób określania podobieństwa.

W przypadku zmiennych ciągłych wystarczające jest prawidłowe znormalizowanie danych. Większość ludzi albo ignoruje normalizację danych, normalizuje do $ [0; 1] $ albo standaryzuje do $ \ mu = 0 $, $ \ sigma = 1 $. W przypadku danych wielowymiarowych ludzie czasami również wykonują PCA (ale najczęściej używają ich w absurdalny sposób, bez uwzględnienia wpływu, jaki ma to na ich dane). Dobrą rzeczą w przypadku zmiennych ciągłych jest to, że mogą być całkiem „wybaczające”. Jeśli skalowanie / ważenie trochę się nie zgadza, wyniki mogą nadal być dobre . Podobnie, jeśli w danych jest mały błąd, ma to tylko niewielki wpływ na odległość.

Niestety, nie dotyczy to zmiennych dyskretnych, likertowych ani kategorialnych. Istnieje wiele stosowanych podejść, takich jak kodowanie na gorąco (każda kategoria staje się własnym atrybutem), kodowanie binarne (pierwsza kategoria to 0,0; druga to 0,1, trzecia to 1,0, czwarta to 1,1) które efektywnie odwzorowują twoje dane w $ \ mathbb {R} ^ {d} $ przestrzeni, gdzie możesz użyć k-średnich i tak dalej. Ale te podejścia są bardzo kruche. Zwykle działają, jeśli masz tylko kategorie binarne, chyba że różnią się zbytnio częstotliwością. Problem w tym, że masz niską zdolność rozróżnialności . Możesz mieć 0 obiektów w odległości 0 (byłyby to duplikaty), potem nic przez chwilę, a potem setki obiektów w odległości 2. Ale nic pomiędzy . Więc niezależnie od używanego algorytmu, będzie musiał połączyć wszystkie te obiekty naraz, ponieważ mają dokładnie to samo podobieństwo. W najgorszym przypadku Twoje dane mogą z tego powodu przejść od duplikatów do wszystkiego, co jest jednym klastrem.Teraz gdybyś przyłożył inną wagę do każdego atrybutu, będzie to nieco lepsze (nadal będziesz używać wielu par obiektów, które różnią się tylko tym jednym atrybutem, a więc mają taką samą odległość), ale jak dobierasz wagi atrybutów ? Nie wydaje się, aby statystycznie wiarygodny sposób bez nadzoru .

Podsumowując, uważam, że dane kategorialne nie skupiają się w sposób, w jaki powszechnie definiuje się grupowanie ponieważ dyskretna natura powoduje zbyt małą dyskryminację / ranking podobieństw. Może mieć częste wzorce , jak wykryto, np. według Apriori, ale to zupełnie inna definicja. Nie jest oczywiste, jak połączyć te dwa elementy, dlatego w przypadku danych kategorycznych zalecam częste wzorce . Mają o wiele więcej sensu niż „klastry”.

Wiem, że to stara odpowiedź, ale co miałeś na myśli, mówiąc „ale częściej niż nie używać jej w absurdalny sposób, nie biorąc pod uwagę wpływu, jaki ma to na ich dane”?Myślę, że byłaby to pełniejsza odpowiedź, gdyby ten punkt został wyjaśniony (również zaciekawiło mnie, jakiego zastosowania PCA powinienem unikać)
Kristofersen
2015-12-20 12:30:52 UTC
view on stackexchange narkive permalink

Sprawdź pakiet R ClusterOfVar. Obsługuje mieszane dane.

Edycja: pomyślałem, że powinienem wspomnieć, że k-średnie nie są w rzeczywistości najlepszym algorytmem klastrowania. Preferuje jednakową gęstość, gromady kuliste, a każda gromada ma mniej więcej ten sam rozmiar. Jeśli zostaną one naruszone, oznacza to, że prawdopodobnie nie będzie działać dobrze. Jest często używany, ponieważ możesz użyć innej funkcji celu, aby zastosować ją w wielu różnych sytuacjach, takich jak użycie cos () dla danych wysokowymiarowych.

Nie mam żadnego doświadczenia z Pythonem do tworzenia klastrów, ale słyszałem, że pakiet R, o którym wspomniałem powyżej, jest całkiem niezły i zawiera dobre algorytmy.

Super, naprawdę to doceniam. Masz inne porady dotyczące najlepszych metod łączenia w klastry?Często słyszę o „klastrowaniu”, ale materiał do czytania lub jego implementacja zawsze wydaje się być znacznie bardziej „gęsta” w porównaniu z tym, jak / dlaczego używałbyś GLM, Randoms Forests, SVM itp. A przynajmniej takie jest moje wrażenie.
Jak rozumiem, mówisz o `hclustvar ()` z pakietu ClusterOfVar.Ponownie, jak rozumiem, dla zmiennych kategorialnych skupia zmienne, a nie kategorie zmiennych.


To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...