Implementaties

Hieronder zijn implementaties van t-SNE in verschillende talen beschikbaar om te downloaden. een aantal van deze implementaties zijn door mij, en een aantal door andere medewerkers ontwikkeld. Voor de kwalitatieve t-SNE methode zijn implementaties in Matlab, C++, CUDA, Python, Torch, R, Julia en JavaScript beschikbaar. Daarnaast bieden we een Matlab implementatie van parametrische t-SNE (hier beschreven). Tot slot bieden we een Barnes-Hut-implementatie van t-SNE (hier beschreven), dat is dat de snelste t-SNE-implementatie tot nu toe, en die veel beter schaalbaar is voor grote datasets.

U bent vrij om deze software te gebruiken, aan te passen of te herdistribueren op elke gewenste manier, maar alleen voor niet-commerciële doeleinden. Het gebruik van de software is op eigen risico; de auteurs zijn niet aansprakelijk voor schade als gevolg van fouten in de software.

OPMERKING: t-SNE is nu ingebouwde functionaliteit in Matlab en in SPSS!

Matlab-implementatie (gebruikershandleiding) Alle platformen

CUDA-implementatie (door David, Roshan en Forrest; zie document) Alle platforms

Python-implementatie Alle platforms

Go implementatie (door Daniel Salvadori) Alle platformen

Fakkelimplementatie Alle platforms

Julia-implementatie (door Leif Jonsson) Alle platforms

Java implementatie (door Leif Jonsson) Alle platformen

R-implementatie (door Justin) Alle platforms

JavaScript-implementatie (door Andrej; online demonstratie) Alle platformen

Parametrische t-SNE (verouderd; zie hier) Alle platforms

Barnes-Hut t-SNE (C++, Matlab, Python, Torch, en R wikkels; zie hier) Alle platformen / Github

MNIST Dataset Matlab-bestand

Voorbeelden

Enkele resultaten van onze experimenten met t-SNE zijn hieronder te downloaden. binnen de plots van de Netflix dataset en dus de woorden dataset wordt de dimensie gecodeerd door middel van een kleurcodering (soortgelijke woorden/films zijn bij benadering en hebben een equivalente kleur). De meeste ‘fouten’ binnen de inbedding (zoals binnen de 20 nieuwsgroepen) zijn letterlijk te danken aan ‘fouten’ binnen de functies waarop t-SNE is toegepast. In veel van die voorbeelden hebben de inbeddingen een 1-NN-fout die lijkt op die van de eerste hoogdimensionale functies.

MNIST-dataset (in 2D) JPG

MNIST-dataset (in 3D) MOV

Olivetti gezichten dataset (in 2D) JPG

COIL-20 dataset (in 2D) JPG

Netflix dataset (in 3D) op Russ’s RBM beschikt over JPG

Woordenreeks (in 3D) op Andriy’s semantische kenmerken JPG

20 dataset van nieuwsgroepen (in 2D) op Simon’s discLDA is voorzien van JPG

Reuters dataset (in 2D) landmark t-SNE met behulp van semantische hashing JPG

NIPS-dataset (in 2D) over co-auteurschapsgegevens (1988-2003) JPG

NORB-dataset (in 2D) door Vinod JPG

Woorden (in 2D) van Joseph over functies geleerd door Ronan en Jason PNG

CalTech-101 op SIFT bag-of-words is voorzien van JPG

S&P 500 van Steve over informatie over het dagelijks rendement van de bedrijfsvoorraad PNG

Interactieve kaart van wetenschappelijke tijdschriften op gegevens van Nees-Jan en Ludo, met behulp van VOSviewer Java 1.6

Relatie tussen World Economic Forum-raden Link

ImageNet door Andrej op Caffe convolutional net functies Link

Meerdere kaartvisualisaties Link

Allen Hersengegevens Link

U kunt met de rechtermuisknop op de foto’s klikken en kiezen voor “Toon afbeelding in nieuw tabblad” om een grotere versie van elk van de foto’s vast te stellen.

Misschien bent u zelfs nieuwsgierig naar deze blogberichten waarin toepassingen van t-SNE door Andrej Karpathy, Paul Mineiro, Alexander Fabisch, Justin Donaldson, Henry Tan en Cyrille Rossant worden beschreven.

FAQ

Ik kan het bestandsformaat van de binaire implementaties van t-SNE niet achterhalen?

Het formaat wordt beschreven in de gebruikershandleiding. U kunt ook een blik werpen op de Matlab- of Python-wrappercode: het is de code die het databestand schrijft en het resultaatbestand leest, dat vrij eenvoudig naar andere talen zal worden geporteerd. Merk op dat het bestandsformaat binair is (dus probeer geen tekst te schrijven of te lezen!), die geen spaties, scheidingstekens, nieuwe regels of wat dan ook bevat.

Hoe kan ik de standaard van de visualisaties die t-SNE heeft gemaakt beoordelen?

Liefst, bekijk ze maar eens! Merk op dat t-SNE geen afstanden behoudt maar waarschijnlijkheden, dus het meten van een fout tussen de Euclidische afstanden in high-D en low-D is nutteloos. Echter, als je een gelijkwaardige data en perplexiteit gebruikt, vergelijk je de Kullback-Leibler divergenties die t-SNE rapporteert. het is prima om t-SNE tien keer te draaien, en het antwoord te kiezen met rotsbodem KL divergentie.

Hoe moet ik de perplexiteit in t-SNE instellen?

De prestaties van t-SNE zijn vrij robuust onder verschillende instellingen van de perplexiteit. de meest geschikte waarde is afhankelijk van de dichtheid van uw gegevens. Losjes gezegd zou men kunnen zeggen dat een grotere / dichtere dataset een grotere perplexiteit vereist. Typische waarden voor het perplexiteitsbereik tussen 5 en 50.

Wat is perplexiteit eigenlijk?

Perplexiteit kan een maatstaf zijn voor informatie die is gedefinieerd als 2 naar de faciliteit van de Shannon entropie. De perplexiteit van een goede dobbelsteen met k zijden is voldoende voor k. In t-SNE kan de perplexiteit ook gezien worden als een knop die de hoeveelheid effectieve naaste buren bepaalt. het is vergelijkbaar met de hoeveelheid naaste buren k die in veel spruitstukleerlingen wordt gebruikt.

Elke keer als ik t-SNE draai, koop ik een (iets) ander resultaat?

In tegenstelling tot bijvoorbeeld PCA heeft t-SNE een niet-convexe objectieve functie. De doelfunctie wordt geminimaliseerd door gebruik te maken van een optimalisatie van de afdaling van de gradiënt die willekeurig is geïnitieerd. Als gevolg hiervan is het mogelijk dat verschillende runs u verschillende oplossingen bieden. Merk op dat het perfect in orde is om t-SNE verschillende keren te draaien (met een equivalente data en parameters), en om de visualisatie met een bodemwaarde van de doelfunctie te kiezen als uw uiteindelijke visualisatie.

Als ik t-SNE draai, koop ik dan een wierd ‘bal’ met gelijkmatig verdeelde punten?

Dit geeft meestal aan dat je je perplexiteit veel te hoog instelt. Alle punten willen nu op gelijke hoogte staan. Het resultaat dat je hebt gekocht is dat je het dichtst bij equidistante punten komt, zoals dat in twee dimensies mogelijk is. Als het verlagen van de perplexiteit niet helpt, dan zou je mogelijk in de zaak zijn beland die in de volgende vraag beschreven wordt. Gelijkaardige effecten kunnen ook optreden wanneer u zeer niet-metrische overeenkomsten als input gebruikt.

Als ik t-SNE uitvoer, meldt het een zeer lage fout, maar de resultaten zien er niet goed uit?

Vermoedelijk bevat uw data een aantal zeer grote getallen, waardoor de binaire look voor de juiste perplexiteit faalt. binnen het begin van de optimalisatie rapporteert t-SNE dan een minimale, gemiddelde en maximale waarde voor sigma van 1. Dit is vaak een symbool dat er iets mis is gegaan! Deel uw gegevens of afstanden gewoon door een enorm aantal, en controleer het opnieuw.

Ik heb alles geprobeerd wat je zei, maar t-SNE lijkt nog steeds niet zo goed te kunnen?

Misschien zit er iets vreemds in je gegevens. Probeer bij wijze van gezondheidscontrole PCA op uw gegevens uit te voeren om deze terug te schalen naar 2 dimensies. Als dit ook slechte resultaten geeft, dan zit er misschien niet echt een mooie structuur in je gegevens. Als PCA goed werkt, maar t-SNE niet, weet ik vrij zeker dat u waarschijnlijk iets verkeerd heeft gedaan. Controleer gewoon je code nog een keer totdat je de bug hebt gevonden! Als niets werkt, laat me dan gerust een berichtje achter.

Kan ik een paarsgewijze Euclidische afstandsmatrix gebruiken als invoer in t-SNE?

Ja, dat kan! Download de Matlab-implementatie, en gebruik uw paarsgewijze Euclidische afstandsmatrix als invoer in de tsne_d.m-functie.

Kan ik een paarsgewijze overeenkomstenmatrix gebruiken als invoer in t-SNE?

Ja, dat kan! Als voorbeeld hebben we t-SNE met succes toegepast op een dataset van woordassociatiegegevens. Download de Matlab-implementatie, bevestig de diagonaal van de paarsgewijze overeenkomstenmatrix die alleen nullen bevat, symmetreer de paarsgewijze overeenkomstenmatrix en normaliseer deze tot minstens één. u zult nu het resultaat gebruiken als invoer in de functie tsne_p.m.

Kan ik t-SNE gebruiken om gegevens in te bedden in meer dan twee dimensies?

Ja, maar er zit een addertje onder het gras. Het belangrijkste kenmerk van t-SNE is dat het een sleur oplost die wordt aangeduid als het “crowding”-probleem. De mate waarin dit probleem zich voordoet hangt af van de verhouding tussen de intrinsieke datadimensie en dus de inbeddingsdimensie. Dus, als je inbedt in bijvoorbeeld dertig dimensies, is het crowding-probleem minder ernstig dan wanneer je inbedt in twee dimensies. Als gevolg daarvan werkt het vaak beter als u de vrijheidsgraden van de t-verdeling vergroot bij het inbedden in dertig dimensies (of als u probeert om intrinsiek zeer laagdimensionale data in te bedden, zoals de Zwitserse rol). Meer details hierover staan beschreven in het AI-STATS-papier.

Waarom werkt niet-SNE ook als LLE of Isomap op Zwitserse roldata?

Bij het inbedden van Zwitserse roldata is het crowding-probleem niet van toepassing. U zult dus een lichtere t-distributie moeten gebruiken om de Zwitserse tolheffing succesvol in te bedden (zie hierboven). Maar eerlijk gezegd… wie geeft er nu om Zwitserse roldata als je eenmaal complexe real-world data mooi kunt inbedden?

Als ik eenmaal een t-SNE kaart heb, hoe kan ik dan binnenkomende testpunten in kaart brengen?

t-SNE leert een niet-parametrische mapping, wat suggereert dat het niet een bepaalde functie leert die data van de invoerruimte naar de kaart brengt. Daarom is het onmogelijk om testpunten in te bedden in een bestaande kaart (hoewel je t-SNE opnieuw uitvoert op de volledige dataset). een mogelijke aanpak om dit te beïnvloeden is het coachen van een multivariate regressor om de locatie van de kaart te voorspellen vanuit het invoerbestand. Als alternatief zul je ook zo’n regressor maken om het verlies van t-SNE direct te minimaliseren, wat ik tijdens deze paper heb gedaan.