Czy istnieje algorytm podobny do drzewa decyzyjnego dla klastrów bez nadzoru?


20

Mam zestaw danych składa się z 5 funkcji: A, B, C, D, E. Wszystkie są wartości liczbowe. Zamiast tworzyć klastrowanie oparte na gęstości, chcę skupić dane w sposób podobny do drzewa decyzyjnego.

Mam na myśli takie podejście:

Algorytm może dzielić dane na X początkowych klastrów w oparciu o cechę C, tj. X klastrów może mieć małe wartości C, średnie C, duże C i bardzo duże C itp. Następnie, pod każdym z węzłów X klastra, algorytm dalej dzieli dane do klastrów Y na podstawie cechy A. Algorytm jest kontynuowany do momentu użycia wszystkich funkcji.

Algorytm, który opisałem powyżej, jest jak algorytm drzewa decyzyjnego. Ale potrzebuję go do grupowania bez nadzoru, zamiast nadzorowanej klasyfikacji.

Moje pytania są następujące:

  1. Czy takie algorytmy już istnieją? Jaka jest poprawna nazwa takiego algorytmu
  2. Czy istnieje pakiet / biblioteka R / python z implementacją tego rodzaju algorytmów?

3
But I need it for unsupervised clustering, instead of supervised classificationSamo to kluczowe wyrażenie jest zbyt krótkie i nie wyczerpuje dokładnie tego, czego chcesz. Powyżej opisałeś coś, co wydaje mi się drzewem decyzyjnym. Czy możesz teraz podać podobny fragment na temat algo, którego chcesz?
ttnphns

1
@ttnphns Cześć, jak wiadomo, drzewo decyzyjne jest nadzorowaną metodą. Każdy wektor elementu oznaczasz jako Class1 lub Class2. Algorytm określa próg dla każdej funkcji na podstawie znanych etykiet. Jednak mam do czynienia z problemem klastrowania. Nie znam poprawnych etykiet dla każdego wektora cech. Chcę znaleźć algorytm, który automatycznie określa próg dla każdej funkcji, aby zbudować drzewo. W ten sposób powstałe skupienie można łatwo zinterpretować jako np. Klaster 1: wysoka A-niska B - średnia C - wysoka D - niska E, klaster 2 jako niska A - wysoka B - średnia C - średnia D - niska E.
nan

Niezupełnie cię rozumiem. Weźmy CHAIDna przykład drzewo. Musisz wybrać zmienną zależną. Niech to będzie A. Algorytm wybiera spośród B, C, D, E zmienną najbardziej skorelowaną z A i binns tę zmienną (powiedzmy, to predyktor, bądź D) na dwie lub więcej kategorii „optymalnie” - tak aby korelacja (pomiędzy skategoryzowaną zmienną D i zmienną A jest zmaksymalizowana. Powiedzmy, że pozostawiła 3 grupy, D1, D2, D3. Następnie ta sama procedura jest powtarzana w każdej kategorii (grupie) D osobno i najlepszy predyktor wśród B, C , Szuka się go pod binningiem itd. Co dokładnie tu nie pasuje?
ttnphns

2
@ttnphns Właśnie znalazłem ten papier, myślę, że zrobili to, co mam na myśli. ftp.cse.buffalo.edu/users/azhang/disc/disc01/cd1/out/papers/…
nan

1
@ Czy znalazłeś jakąś implementację takich drzew? W artykule nie podają linku do kodu
Alleo,

Odpowiedzi:


12

Możesz rozważyć następujące podejście:

  • Użyj dowolnego algorytmu klastrowania odpowiedniego dla danych
  • Załóżmy, że powstały klaster to klasy
  • Trenuj drzewo decyzyjne na klastrach

Pozwoli ci to wypróbować różne algorytmy grupowania, ale otrzymasz przybliżenie drzewa decyzyjnego dla każdego z nich.


1
zgadzają się, że jest to „właściwe”, ale oczywiście należy zawsze pamiętać, że tworzenie etykiety z algorytmu grupowania nie jest „faktyczną” cechą obserwacji. W zależności od jakości i rodzaju klastrowania wprowadzone odchylenie będzie istnieć w większym lub mniejszym stopniu.
NiuBiBang

Czy możesz wskazać mi artykuł, który omawia tę strategię?
nCessity

2

Pierwszy artykuł, który przychodzi mi na myśl, to: Klastrowanie za pomocą konstrukcji drzewa decyzyjnego https://pdfs.semanticscholar.org/8996/148e8f0b34308e2d22f78ff89bf1f038d1d6.pdf

Jak już wspomniano, „hierarchiczna” (od góry do dołu) i „hierarchiczna aglomeracja” (od dołu do góry) są dobrze znanymi technikami opracowanymi przy użyciu drzew do tworzenia klastrów. Scipy ma to.

Jeśli nie masz nic przeciwko niestandardowemu kodowi, ponieważ nie znam żadnej biblioteki, mogę polecić dwie techniki. Ostrzegamy, że nie są technicznie skupione ze względu na mechanikę, na której polegają. Możesz nazwać to pseudo klastrowaniem.

1) Nadzorowane: Jest to nieco podobne do artykułu (warte przeczytania). Zbuduj model pojedynczego drzewa decyzyjnego, aby poznać cel (decydujesz, co ma sens). Cel może być losowo generowaną kolumną (wymaga powtórzenia i oceny, która iteracja była najlepsza, patrz poniżej). Zdefiniuj każdą pełną ścieżkę drzewa jako „klaster”, ponieważ punkty, które przechodzą przez tę serię gałęzi, są technicznie podobne pod względem celu. Działa to dobrze tylko w przypadku niektórych problemów, ale jest skuteczne na dużą skalę. Skończysz z klastrami K (patrz poniżej).

2) Semisupervised (rodzaj bez nadzoru, ale nadzorowany mechanicznie), wykorzystując # 1: możesz spróbować budować drzewa, aby przewidzieć kolumny według wzorca wykluczającego. tzn. jeśli schemat to [A, B, C], zbuduj 3 modele [A, B] -> C, [A, C] -> B, [B, C] -> A. Otrzymujesz klastry KN (patrz poniżej). N = len (schemat). Jeśli niektóre z tych funkcji nie są interesujące ani zbyt niezrównoważone (w przypadku kategorii), nie używaj ich jako celów.

Podsumowanie: model wybierze funkcje w kolejności na podstawie informacji lub czystości, a klastry będą oparte tylko na kilku funkcjach, a nie na wszystkich. W tych klastrach nie ma koncepcji odległości, ale z pewnością można by ją opracować w oparciu o centra.

Plusy: łatwy do zrozumienia i wyjaśnienia, szybki trening i wnioskowanie, działa dobrze z kilkoma silnymi funkcjami, działa z kategoriami. Kiedy Twoje funkcje są w gruncie rzeczy niejednorodne i masz wiele funkcji, nie musisz tracić czasu na podejmowanie decyzji, które z nich użyć w funkcji odległości.

Wady: niestandardowe, muszą być napisane, naiwne uprzedzenie, kolinearność z celem powoduje złe wyniki, posiadanie 1000 równie ważnych cech nie będzie działać dobrze (KMeans z odległością euklidesową jest tutaj lepszy).

Ile masz klastrów? Musisz bezwzględnie ograniczyć model DT, aby nie urósł zbytnio. np. Ustaw minimalną liczbę próbek na liść, maksymalną liczbę węzłów liści (preferowane) lub maksymalną głębokość. Opcjonalnie ustaw ograniczenia czystości lub entropii. Musisz sprawdzić, ile klastrów ci to dało, i ocenić, czy ta metoda jest lepsza niż prawdziwe klastrowanie.

Czy techniki i parametry działały dla Ciebie dobrze? Który był najlepszy? Aby się tego dowiedzieć, musisz dokonać oceny klastra: Wskaźniki wydajności w celu oceny uczenia się bez nadzoru


2

To, czego szukasz, to algorytm grupowania dzielącego.

Najpopularniejsze algorytmy są aglomeratywne, które grupują dane w sposób oddolny - każda obserwacja rozpoczyna się wraz z połączeniem własnego klastra i klastrów. Grupowanie dzielące odbywa się z góry na dół - obserwacje rozpoczynają się w jednym klastrze, który jest stopniowo dzielony.

Chęć wyglądania jak drzewo decyzyjne ogranicza wybory, ponieważ większość algorytmów działa na odległościach w obrębie całej przestrzeni danych, zamiast dzielić jedną zmienną na raz.

DIANA jest jedynym znanym algorytmem klastrowania dzielącego i myślę, że ma on strukturę drzewa decyzyjnego. Byłbym zaskoczony, gdyby nie było tam innych.

Możesz użyć standardowego algorytmu drzewa decyzyjnego, jeśli zmodyfikujesz regułę podziału na metrykę, która nie uwzględnia zdefiniowanej zmiennej zależnej, ale raczej używa metryki dobroci klastra.


0

Jednym z pomysłów do rozważenia jest założenie, że masz k cech i n punktów. Możesz budować losowe drzewa za pomocą funkcji (k-1) i 1 jako zmiennej zależnej. Y. Możesz wybrać wysokość h, po której będziesz mieć punkty danych w korzeniach. Możesz wziąć udział w głosowaniu różnych drzew. Tylko myśl.

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.