Ні, це не обов'язково, що це так, однак, це зведено, мета T-SNE.
Перш ніж потрапляти до м’яса відповіді, давайте розглянемо деякі основні визначення, як математично, так і інтуїтивно.
Найближчі сусіди : Розглянемо метричний простір та набір векторів , задавши новий вектор , ми хочемо знайти точки такі, що. Інтуїтивно зрозуміло, що це просто мінімум відстаней, використовуючи відповідне визначення норми в .RdX1,...,Xn∈Rdx∈Rd||X1−x||≤...≤||Xn−x||Rd
Тепер перейдемо до того, чи мають значення найближчі сусіди, застосовуючи зменшення розмірності. Зазвичай у своїх відповідях я маю намір щось раціоналізувати з математики, коду та інтуїції. Розглянемо спочатку інтуїтивний аспект речей. Якщо у вас є точка, яка знаходиться на відстані від іншої точки, з нашого розуміння алгоритму t-sne ми знаємо, що ця відстань зберігається під час переходу до вищих вимірів. Давайте припустимо, що точка є найближчим сусідом у деякому вимірі . За визначенням існує залежність між відстані в іdyxddd+k. Отже, у нас є наша інтуїція, яка полягає в тому, що відстань підтримується в різних вимірах, або, принаймні, саме до цього ми прагнемо. Спробуємо виправдати це якоюсь математикою.
У цій відповіді я розповідаю про математику, яка бере участь у t-sne, хоча і не докладно ( t-SNE: Чому рівні значення даних візуально не близькі? ). Те, що тут є математикою, - це в основному максимізація ймовірності того, що дві точки залишаються близькими у проектованому просторі, оскільки вони є у вихідному просторі, вважаючи, що розподіл балів експоненціальний. Отже, дивлячись на це рівняння . Зауважте, що ймовірність залежить від відстані між двома точками, тому чим далі вони одна від одної, тим далі вони віддаляються, коли вони проектуються на менші розміри. Зауважте, що якщо вони далеко вpj|i=exp(−||xj−xi||22σ2)∑k≠iexp(−||xj−xi||22σ2)Rk, є хороший шанс, що вони не будуть близькими в прогнозованому вимірі. Отже, тепер у нас є математичне обґрунтування того, чому точки "повинні" залишатися близькими. Але знову ж таки, оскільки це експоненціальний розподіл, якщо ці точки значно відстають один від одного, немає гарантії збереження власності Найближчих сусідів, хоча це і є метою.
Тепер нарешті акуратний приклад кодування, який також демонструє цю концепцію.
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]
Хоча це дуже наївний приклад і не відображає складності, він експериментує за допомогою простих прикладів.
EDIT: Крім того, додавання деяких пунктів щодо самого питання, тому не обов'язково, щоб це було так, можливо, проте, раціоналізація його за допомогою математики засвідчила б, що у вас немає конкретного результату (немає остаточного так чи ні) .
Я сподіваюся, що це усунуло деякі ваші проблеми з TSNE.