Le voisin le plus proche a-t-il un sens avec t-SNE?

10

Les réponses ici ont indiqué que les dimensions dans t-SNE sont dénuées de sens et que les distances entre les points ne sont pas une mesure de similitude .

Cependant, pouvons-nous dire quelque chose sur un point basé sur ses voisins les plus proches dans l'espace t-SNE? Cette réponse à la raison pour laquelle les points qui sont exactement les mêmes ne sont pas regroupés suggère que le rapport des distances entre les points est similaire entre les représentations dimensionnelles inférieures et supérieures.

Par exemple, l'image ci-dessous montre t-SNE sur l'un de mes ensembles de données (15 classes).

Puis-je dire que cro 479(en haut à droite) est une valeur aberrante? Est-ce que fra 1353(en bas à gauche) est plus similaire aux cir 375autres images de la fraclasse, etc.? Ou pourraient-ils simplement être des artefacts, par exemple se fra 1353sont coincés de l'autre côté de quelques grappes et n'ont pas pu se frayer un chemin vers l'autre fraclasse?

entrez la description de l'image ici

geometrikal
la source

Réponses:

8

Non, il n'est pas nécessaire que ce soit le cas, cependant, c'est, de manière alambiquée, l'objectif du T-SNE.

Avant d'entrer dans le vif du sujet, examinons quelques définitions de base, à la fois mathématiquement et intuitivement.

RdX1,...,XnRdxRd||X1x||...||Xnx||Rd

dyxddd+k. Donc, nous avons notre intuition qui est que la distance est maintenue à travers différentes dimensions, ou du moins, c'est ce que nous visons. Essayons de le justifier avec quelques mathématiques.

pj|i=exp(||xjxi||22σ2)kiexp(||xjxi||22σ2)Rk

Maintenant, enfin, un exemple de codage soigné qui illustre également ce concept.

from sklearn.manifold import TSNE
from sklearn.neighbors import KNeighborsClassifier
X = [[0],[1],[2],[3],[4],[5],[6],[7],[8],[9]]
y = [0,1,2,3,4,5,6,7,8,9]
neighs = KNeighborsClassifier(n_neighbors=3)
neighs.fit(X, y)
X_embedded = TSNE(n_components=1).fit_transform(X)
neighs_tsne = KNeighborsClassifier(n_neighbors=3)
neighs_tsne.fit(X_embedded, y)
print(neighs.predict([[1.1]]))
>>>[0]
print(neighs_tsne.predict([[1.1]]))
>>>[0]

Bien que ce soit un exemple très naïf et ne reflète pas la complexité, il fonctionne par expérience pour quelques exemples simples.

EDIT: En outre, en ajoutant quelques points par rapport à la question elle-même, il n'est donc pas nécessaire que ce soit le cas, il se pourrait cependant que la rationaliser par le biais des mathématiques prouve que vous n'avez pas de résultat concret (pas de oui ou de non définitif) .

J'espère que cela a clarifié certaines de vos préoccupations avec TSNE.

PSub
la source
Merci pour la bonne réponse. Pour résumer: les points qui ont une forte similitude ont une forte probabilité de rester proches. Je suppose que le paramètre de perplexité contrôle le nombre de points utilisés pour le calcul de probabilité, de sorte que les clusters peuvent devenir disjoints si la perplexité est faible. Pouvez-vous commenter l'exagération précoce? De plus, je suppose que la probabilité que des points soient aberrants ou mal classés (ayant tous leurs NN dans une autre classe) en utilisant l'espace TSNE, serait augmentée s'ils sont cohérents après plusieurs TSNE avec initialisation aléatoire?
geometrikal
Oui, la perplexité est l'un des principaux facteurs qui affectent la façon dont les points proches restent les uns par rapport aux autres. L'exagération précoce, c'est intuitivement comment les clusters serrés dans l'espace d'origine et combien d'espace il y aura entre eux dans l'espace intégré (c'est donc un mélange de perplexité et d'exagération précoce qui affecte les distances entre les points. En ce qui concerne votre dernière question, la réponse est oui, c'est à cause de l'exponentiation de la norme, ce qui pourrait causer des problèmes dans l'espace d'intégration, donc il y a un risque de mauvaise classification.
PSub