Wdrożenia

Poniżej znajdują się implementacje t-SNE w różnych językach, które można pobrać. wiele z tych implementacji zostało opracowanych przeze mnie, a kilka przez innych współpracowników. Dla jakości metody t-SNE dostępne są implementacje w językach Matlab, C++, CUDA, Python, Torch, R, Julia i JavaScript. dodatkowo oferujemy implementację parametrycznego t-SNE w języku Matlab (opisaną tutaj). Wreszcie oferujemy implementację Barnes-Hut t-SNE (opisaną tutaj), która jest jak dotąd najszybszą implementacją t-SNE, a która znacznie lepiej skaluje się do dużych zbiorów danych.

Jesteś liberalny w używaniu, modyfikowaniu lub redystrybucji tego oprogramowania w dowolny sposób, ale tylko w celach niekomercyjnych. korzystanie z oprogramowania odbywa się na własne ryzyko; autorzy nie ponoszą odpowiedzialności za żadne szkody wynikające z błędów w oprogramowaniu.

UWAGA: t-SNE jest teraz wbudowaną funkcjonalnością w Matlab i SPSS!

Implementacja Matlab (instrukcja obsługi) Wszystkie platformy

Wdrożenie CUDA (autorstwa Davida, Roshana i Forresta; patrz dokument) Wszystkie platformy

Wdrożenie Pitona Wszystkie platformy

Realizacja Go (autorstwa Daniela Salvadori) Wszystkie platformy

Wdrożenie palnika Wszystkie platformy

Realizacja Julia (autorstwa Leifa Jonssona) Wszystkie platformy

Implementacja Java (autorstwa Leifa Jonssona) Wszystkie platformy

Wdrożenie R (przez Justina) Wszystkie platformy

Implementacja JavaScript (autorstwa Andreja; demonstracja online) Wszystkie platformy

Parametryczne t-SNE (nieaktualne; patrz tutaj) Wszystkie platformy

Barnes-Hut t-SNE (owijarki C++, Matlab, Python, Torch, i R; patrz tutaj) Wszystkie platformy / Github

Plik MNIST Dataset Matlab

Przykłady

Niektóre wyniki naszych eksperymentów z t-SNE są dostępne do pobrania poniżej. W obrębie wykresów zbioru danych Netflix, a więc zbioru danych słów, wymiar jest kodowany za pomocą kodowania kolorystycznego (podobne słowa/ filmy są przybliżone i mają równoważny kolor). Większość “błędów” w ramach osadzania (np. w ramach 20 grup dyskusyjnych) wynika dosłownie z “błędów” w ramach cech, na których zastosowano t-SNE. W wielu z tych przykładów, osadzenia mają błąd 1-NN, który jest podobny do błędu pierwszych cech o wysokim wymiarze.

Zbiór danych MNIST (w 2D) JPG

Zestaw danych MNIST (w 3D) MOV

Zestaw danych twarzy Olivetti (w 2D) JPG

Zbiór danych COIL-20 (w 2D) JPG

Zbiór danych Netflix (w 3D) na RBM Russ’a Funkcje JPG

Zestaw danych słów (w 3D) na temat cech semantycznych Andriy’ego JPG

20 Zestaw danych grup dyskusyjnych (w wersji 2D) na temat funkcji JPG na platformie DiscLDA Simona

Zbiór danych Reutera (w 2D) przełomowy t-SNE wykorzystujący hashing semantyczny JPG

Zbiór danych NIPS (w wersji 2D) dotyczących danych o współautorach (1988-2003) JPG

Zbiór danych NORB (w wersji 2D) autorstwa Vinoda JPG

Słowa (w wersji 2D) Josepha na temat cech poznanych przez Ronana i Jasona PNG

CalTech-101 na SIFT Torebka z hasłami JPG

S&P 500 autorstwa Steve’a na temat informacji o dziennych zyskach z akcji firmy PNG

Interaktywna mapa czasopism naukowych na temat danych Nees-Jana i Ludo, przy użyciu VOSviewer Java 1.6

Powiązania między radami Światowego Forum Ekonomicznego Link

ImageNet autorstwa Andreja na temat cech sieci konwekcyjnej Caffe Link

Wielokrotne wizualizacje map Link

Allen Brain Data Link

Możesz kliknąć prawym przyciskiem myszy na zdjęcia i wybrać “Pokaż zdjęcie w nowej zakładce”, aby ustalić większą wersję każdego z nich.

Możesz być nawet ciekawy tych postów na blogu opisujących aplikacje t-SNE Andreja Karpathy, Paula Mineiro, Alexandra Fabischa, Justina Donaldsona, Henry’ego Tan i Cyrille’a Rossanta.

FAQ

Nie mogę znaleźć formatu pliku dla binarnych implementacji t-SNE?

Format ten jest opisany w podręczniku użytkownika. Ponadto możesz chcieć rzucić okiem na kod Matlab lub Python wrapper: jest to kod, który zapisuje plik z danymi i odczytuje plik z wynikami, który zostanie dość łatwo przeniesiony do innych języków. Proszę zwrócić uwagę, że format pliku jest binarny (nie próbuj więc pisać ani czytać tekstu!), który nie zawiera żadnych spacji, separatorów, nowych linii lub cokolwiek innego.

Jak mogę ocenić standard wizualizacji, które skonstruowało t-SNE?

Najlepiej, po prostu je sprawdzić! Zauważ, że t-SNE nie zachowuje odległości, ale prawdopodobieństwo, więc pomiar niektórych błędów pomiędzy odległościami euklidesowymi w highD i low-D jest bezużyteczny. Jeśli jednak użyjesz równoważnych danych i będziesz się zastanawiać, porównasz rozbieżności Kullback-Leiblera, które raportowane są za pomocą t-SNE.

Jak ustawić zmienność w t-SNE?

Wydajność t-SNE jest dość solidna przy różnych ustawieniach zmienności. najbardziej odpowiednia wartość zależy od gęstości Twoich danych. Mówiąc luźno, można powiedzieć, że większy/gęstszy zbiór danych wymaga większego stopnia zmieszania. Typowe wartości zmienności wahają się od 5 do 50.

Co to w ogóle jest konsternacja?

Zakłopotanie może być miarą dla informacji, która jest zdefiniowana jako 2 dla obiektu entropii Shannon. W t-SNE zmieszanie może być również postrzegane jako pokrętło, które ustawia liczbę efektywnych najbliższych sąsiadów. Jest to porównywalne z liczbą najbliższych sąsiadów k, która jest wykorzystywana przez wielu uczących się.

Za każdym razem, gdy prowadzę t-SNE, kupuję (nieco) inny wynik?

W przeciwieństwie do np. PCA, t-SNE posiada funkcję obiektywu niewypukłego. funkcja docelowa jest zminimalizowana poprzez optymalizację zejścia nachylenia, która jest inicjowana losowo. W rezultacie możliwe jest, że różne przebiegi oferują różne rozwiązania. Zauważ, że bardzo dobrze jest wykonać t-SNE w różnym czasie (z równoważnymi danymi i parametrami) i wybrać wizualizację z wartością dna skały dla funkcji celu jako ostateczną wizualizację.

Kiedy uruchamiam t-SNE, kupuję dziwną “kulę” z równomiernie rozłożonymi punktami?

Zwykle oznacza to, że ustawiasz zbyt wysoki stopień zakłopotania. Wszystkie punkty chcą być teraz jednakowo rozłożone. W rezultacie kupiłeś piłkę, która znajduje się najbliżej jednakowo rozłożonych punktów, co jest możliwe do osiągnięcia w dwóch wymiarach. Jeżeli obniżenie stopnia zmieszania nie pomoże, prawdopodobnie natknąłbyś się na sprawę opisaną w następnym pytaniu. Podobne efekty mogą wystąpić również po użyciu wysoce nie-metrycznych podobieństw jako danych wejściowych.

Kiedy uruchamiam t-SNE, zgłasza on naprawdę mały błąd, ale wyniki wyglądają fatalnie?

Prawdopodobnie twoje dane zawierają kilka bardzo dużych liczb, co powoduje, że binarne spojrzenie na właściwy błąd zawodzi. na początku optymalizacji t-SNE zgłasza minimalną, średnią i maksymalną wartość dla sigma 1. często jest to symbol, że coś poszło nie tak! Wystarczy podzielić dane lub odległości przez ogromną liczbę i sprawdzić jeszcze raz.

Próbowałem wszystkiego, co powiedziałeś, ale t-SNE nadal nie wydaje się być zbyt dobre?

Może jest coś dziwnego w twoich danych. Spróbuj przeprowadzić PCA na swoich danych, aby przeskalować je do 2 wymiarów. Jeśli to również daje złe wyniki, to może nie ma zbyt ładnej struktury w twoich danych w pierwszej kolejności. Jeśli PCA działa dobrze, ale t-SNE nie, jestem pewien, że prawdopodobnie zrobiłeś coś złego. Po prostu sprawdź jeszcze raz swój kod, aż znajdziesz błąd! Jeśli nic nie działa, z przyjemnością podrzucisz mi linijkę.

Czy mogę użyć euklidesowej matrycy dystansowej jako wejścia do t-SNE?

Tak, możesz! Pobierz implementację Matlab, i użyj swojej euklidesowej macierzy odległości jako wejście do funkcji tsne_d.m.

Czy mogę używać parami macierzy podobieństw jako wejścia do t-SNE?

Tak, możesz! Jako przykład, z powodzeniem zastosowaliśmy t-SNE na zbiorze danych asocjacji wyrazów. Pobierz implementację Matlab, potwierdź, że przekątna macierzy podobieństw parami zawiera tylko zera, symetryzuj macierze podobieństw parami i znormalizuj ją tak, aby zsumować co najmniej jeden . wynik zostanie teraz użyty jako wejście do funkcji tsne_p.m.

Czy mogę użyć t-SNE do osadzenia danych w więcej niż dwóch wymiarach?

Cóż, tak, ale jest pewien haczyk. Kluczową cechą charakterystyczną t-SNE jest to, że rozwiązuje ono przeciąg zwany problemem tłoku. Stopień, w jakim pojawia się ten problem zależy od stosunku między wewnętrzną wymiarowością danych, a tym samym wymiarowością osadzania. Tak więc, jeśli osadzasz na przykład trzydzieści wymiarów, problem tłumienia jest mniejszy niż raz osadzony w dwóch wymiarach. W rezultacie, często działa to lepiej, jeśli podczas osadzania w trzydziestu wymiarach zwiększymy stopień swobody t-rozkładu (lub jeśli próbujemy osadzić dane samoistnie bardzo mało wymiarowe, jak szwajcarska rolka). Więcej szczegółów na ten temat znajduje się w artykule AI-STATS.

Dlaczego na szwajcarskiej rolce danych nie ma również LLE lub Isomapy?

Podczas osadzania danych z rolki szwajcarskiej, problem tłoczenia nie występuje. Dlatego też, aby z powodzeniem osadzić szwajcarskie opłaty drogowe, konieczne jest zastosowanie lżejszej dystrybucji t- ogonowej (patrz wyżej). Ale szczerze mówiąc… komu zależy na szwajcarskich rolkach, skoro można ładnie osadzić skomplikowane dane z rzeczywistego świata?

Jak mogę osadzić przychodzące punkty testowe na mapie t-SNE, skoro mam nawet mapę t-SNE?

t-SNE uczy się nieparametrycznego mapowania, co sugeruje, że nie uczy się konkretnej funkcji, która mapuje dane z przestrzeni wejściowej do mapy. W związku z tym nie jest możliwe osadzenie punktów testowych na istniejącej mapie (chociaż t-SNE zostanie ponownie uruchomiony na kompletnym zbiorze danych). Możliwym podejściem, które może mieć na to wpływ jest trenowanie wielowymiarowego regresora do przewidywania położenia mapy z pliku wejściowego. Alternatywnie, zrobisz taki regresor, aby zminimalizować bezpośrednią stratę t-SNE, co zrobiłem podczas tego artykułu.