Problem z t-SNE polega na tym, że nie zachowuje on odległości ani gęstości. Tylko w pewnym stopniu zachowuje najbliższych sąsiadów. Różnica jest subtelna, ale wpływa na dowolny algorytm oparty na gęstości lub odległości.
Aby zobaczyć ten efekt, po prostu wygeneruj wielowymiarowy rozkład Gaussa. Jeśli zwizualizujesz to, będziesz mieć piłkę, która jest gęsta i staje się znacznie mniej gęsta na zewnątrz, z niektórymi wartościami odstającymi, które mogą być naprawdę daleko.
Teraz uruchom t-SNE na tych danych. Zwykle otrzymasz koło o raczej jednolitej gęstości. Jeśli używasz niskiego zakłopotania, może nawet mieć tam jakieś dziwne wzorce. Ale tak naprawdę nie można już odróżnić wartości odstających.
Teraz sprawmy, by sprawy stały się bardziej skomplikowane. Użyjmy 250 punktów w rozkładzie normalnym przy (-2,0) i 750 punktów w rozkładzie normalnym przy (+2,0).
To powinien być łatwy zestaw danych, na przykład z EM:
Jeśli uruchomimy t-SNE z domyślnym zakłopotaniem 40, otrzymamy dziwnie ukształtowany wzór:
Nieźle, ale też nie tak łatwo się skupić, prawda? Trudno będzie ci znaleźć algorytm grupowania, który działa tutaj dokładnie tak, jak chcesz. I nawet jeśli poprosisz ludzi o zgrupowanie tych danych, najprawdopodobniej znajdą tutaj więcej niż 2 klastry.
Jeśli uruchomimy t-SNE ze zbyt małym zakłopotaniem, takim jak 20, otrzymamy więcej takich wzorów, które nie istnieją:
Spowoduje to klastrowanie np. Z DBSCAN, ale da cztery klastry. Uważaj, t-SNE może produkować „fałszywe” wzory!
Optymalne zakłopotanie wydaje się być dla tego zestawu danych około 80; ale nie sądzę, że ten parametr powinien działać dla każdego innego zestawu danych.
Teraz jest to przyjemne wizualnie, ale nie lepsze do analizy . Ludzki adnotator mógłby prawdopodobnie wybrać cięcie i uzyskać przyzwoity wynik; K-średnie jednak zawiedzie nawet w tym bardzo łatwym scenariuszu ! Widać już, że informacje o gęstości zostały utracone , wszystkie dane wydają się żyć w obszarze o prawie tej samej gęstości. Gdybyśmy zamiast tego jeszcze bardziej zwiększyliby zakłopotanie, jednolitość zwiększyłaby się, a separacja ponownie by się zmniejszyła.
Podsumowując, użyj t-SNE do wizualizacji (i wypróbuj różne parametry, aby uzyskać coś przyjemnego wizualnie!), Ale raczej nie uruchamiaj później klastrowania , w szczególności nie używaj algorytmów opartych na odległości lub gęstości, ponieważ informacje te były celowo (!) Stracony. Podejścia oparte na grafie sąsiedztwa mogą być w porządku, ale wtedy nie musisz wcześniej uruchamiać t-SNE, po prostu użyj sąsiadów natychmiast (ponieważ t-SNE próbuje zachować ten wykres nn w dużej mierze nienaruszony).
Więcej przykładów
Te przykłady zostały przygotowane do prezentacji artykułu (ale nie można go jeszcze znaleźć w tym artykule, ponieważ eksperymentowałem później)
Erich Schubert i Michael Gertz.
Wewnętrzne osadzenie t-stochastycznego sąsiada na potrzeby wizualizacji i wykrywania wartości odstających - lekarstwo na przekleństwo wymiaru?
W: Materiały z 10. międzynarodowej konferencji na temat wyszukiwania podobieństwa i aplikacji (SISAP), Monachium, Niemcy. 2017 r
Po pierwsze, mamy następujące dane wejściowe:
Jak można się domyślić, jest to pochodna obrazu „pokoloruj mnie” dla dzieci.
Jeśli przeprowadzimy to przez SNE ( NIE t-SNE , ale poprzednik):
Wow, nasze ryby stały się całkiem morskim potworem! Ponieważ rozmiar jądra jest wybierany lokalnie, tracimy wiele informacji o gęstości.
Ale naprawdę będziesz zaskoczony wynikami t-SNE:
W rzeczywistości wypróbowałem dwie implementacje (ELKI i implementacje sklearn) i obie przyniosły taki wynik. Niektóre odłączone fragmenty, ale każdy z nich wygląda nieco spójnie z oryginalnymi danymi.
Dwa ważne punkty, aby to wyjaśnić:
SGD opiera się na iteracyjnej procedurze udoskonalania i może utknąć w lokalnych optymach. W szczególności utrudnia to algorytmowi „przerzucenie” części danych, które dubluje, ponieważ wymagałoby to przemieszczania punktów przez inne, które powinny być oddzielne. Więc jeśli niektóre części ryby są dublowane, a inne części nie są dublowane, naprawienie tego może być niemożliwe.
t-SNE wykorzystuje rozkład t w rzutowanej przestrzeni. W przeciwieństwie do rozkładu Gaussa stosowanego przez zwykły SNE, oznacza to, że większość punktów będzie się odpychać , ponieważ mają 0 powinowactwo w domenie wejściowej (Gaussian szybko otrzymuje zero), ale> 0 powinowactwo w domenie wyjściowej. Czasami (jak w MNIST) czyni to ładniejszą wizualizację. W szczególności może pomóc „podzielić” zestaw danych nieco bardziej niż w domenie wejściowej. To dodatkowe odpychanie często powoduje, że punkty bardziej równomiernie wykorzystują obszar, co może być również pożądane. Ale tutaj, w tym przykładzie, działanie odstraszające powoduje oddzielenie fragmentów ryby.
Możemy pomóc (w tym zestawie danych zabawki ) w pierwszym problemie, używając oryginalnych współrzędnych jako początkowego położenia, a nie losowych współrzędnych (jak zwykle używane z t-SNE). Tym razem obraz jest sklearn zamiast ELKI, ponieważ wersja sklearn miała już parametr do przekazania początkowych współrzędnych:
Jak widać, nawet przy „idealnym” umieszczeniu początkowym t-SNE „rozbije” rybę w wielu miejscach, które były pierwotnie połączone, ponieważ odpychanie Studenta-t w dziedzinie wyjściowej jest silniejsze niż powinowactwo Gaussa na wejściu przestrzeń.
Jak widać, t-SNE (i SNE też!) Są interesującymi technikami wizualizacji , ale należy się z nimi obchodzić ostrożnie. Wolę nie stosować k-średnich do wyniku! ponieważ wynik będzie mocno zniekształcony, a odległości i gęstość nie zostaną dobrze zachowane. Zamiast tego użyj raczej do wizualizacji.