الگوریتم t-SNE چیست؟
الگوریتم t-SNE چیست؟
معرفی روش کاهش ابعاد برای مصورسازی
در بسیاری از پروژههای دادهکاوی، یادگیری ماشین و تحلیل داده، با مجموعهدادههایی روبهرو میشویم که تعداد ویژگیهای آنها بسیار زیاد است. وقتی تعداد ابعاد داده افزایش پیدا میکند، درک الگوها، خوشهها و روابط بین نمونهها دشوارتر میشود. به همین دلیل، از روشهای کاهش ابعاد برای سادهسازی نمایش دادهها استفاده میکنیم.
یکی از شناختهشدهترین روشها در این زمینه، t-SNE یا t-Distributed Stochastic Neighbor Embedding است. این الگوریتم بیشتر از آنکه برای فشردهسازی دادهها استفاده شود، برای تصویرسازی و کشف ساختارهای پنهان در دادههای چندبعدی کاربرد دارد. به زبان ساده، t-SNE تلاش میکند دادههای پیچیده را به فضایی دوبعدی یا سهبعدی منتقل کند، بدون اینکه روابط محلی مهم بین نقاط را از بین ببرد.
t-SNE چه کاری انجام میدهد؟
t-SNE یک روش غیرخطی برای کاهش ابعاد است. برخلاف روشهایی مثل تحلیل مولفه اصلی PCA که بیشتر روی حفظ واریانس کلی داده تمرکز دارند، t-SNE سعی میکند نقاطی که در فضای اصلی به هم نزدیکاند، در فضای کمبعد هم نزدیک باقی بمانند. این ویژگی باعث میشود t-SNE برای کارهایی مثل:
- بررسی خوشههای داده
- شناسایی ساختارهای پنهان
- مصورسازی دادههای پیچیده
- تحلیل دادههای زیستی، متنی و تصویری
بسیار مفید باشد. به همین دلیل، t-SNE بیشتر یک ابزار بصریسازی محسوب میشود تا یک روش صرفاً عددی برای فشردهسازی داده.
مراحل الگوریتم t‑SNE
منطق اصلی این الگوریتم بر پایهی این پرسش شکل گرفته است:
اگر دو نقطه در فضای اصلی شبیه هم باشند، چگونه میتوان آنها را در یک فضای کمبعد هم نزدیک به هم نگه داشت؟
برای پاسخ به این سؤال، t-SNE ابتدا شباهت بین نقاط را در فضای اصلی محاسبه میکند. سپس همان روابط را در فضای کمبعد بازسازی میکند. در نهایت، الگوریتم سعی میکند چیدمان نقاط در فضای جدید تا حد ممکن شبیه ساختار واقعی دادهها باشد.نکته مهم این است که t-SNE بیشتر ساختار محلی را حفظ میکند، نه ساختار سراسری. یعنی تمرکز آن روی این است که همسایههای نزدیک، همچنان نزدیک دیده شوند. مراحل محاسباتی الگوریتم به شرح زیر است:

1) محاسبه شباهتها در فضای اصلی
در مرحله اول، الگوریتم فاصله یا شباهت بین نقاط را در فضای چندبعدی بررسی میکند.این شباهت معمولاً با یک مدل احتمالاتی و بر اساس توزیع گوسی محاسبه میشود. نتیجهی این مرحله یک نمایش احتمالاتی از همسایگی نقاط است.
محاسبه احتمال همسایگی در فضای اصلی یعنی، برای هر نقطه i احتمال اینکه همسایهاش باشد، اگر احتمال کم شود یعنی فاصله زیاد و برعکس
2) نگاشت نقاط به فضای کمبعد
سپس هر نمونه به یک فضای 2 بعدی یا 3 بعدی منتقل میشود. در این فضا، مدل دیگری برای محاسبه شباهت بین نقاط به کار میرود که از توزیع t-Student استفاده میکند. این انتخاب کمک میکند نقاط دور از هم بهتر از یکدیگر جدا شوند.
3) کمینهسازی اختلاف بین دو فضا
در مرحله نهایی، t-SNE سعی میکند توزیع شباهت در فضای اصلی و فضای کمبعد را به هم نزدیک کند. برای این کار از KL Divergence استفاده میشود و الگوریتم با گرادیان نزولی بهصورت تکراری، جایگاه نقاط را اصلاح میکند تا بهترین نمایش ممکن به دست آید.
چرا t-SNE محبوب است؟
t-SNE به چند دلیل در تحلیل داده بسیار محبوب شده است:
- روابط محلی را خوب حفظ میکند
- برای دادههای غیرخطی مناسب است
- خوشههای پنهان را بهصورت واضح نشان میدهد
- برای مصورسازی در 2 یا 3 بعد بسیار کاربردی است
به همین خاطر، اگر بخواهیم یک تصویر شهودی از ساختار دادههای پیچیده داشته باشیم، t-SNE معمولاً یکی از بهترین گزینههاست.
کاربردهای t-SNE
1) تحلیل دادههای زیستی : در دادههای زیستی و ژنتیکی، حجم ویژگیها بسیار بالاست.
2) پردازش تصویر: در مسائل بینایی ماشین، t-SNE برای نمایش بردارهای ویژگی استخراجشده از تصاویر کاربرد دارد. برای مثال، میتوان خروجی یک شبکه عصبی را با t-SNE بهصورت دوبعدی دید و خوشههای مربوط به کلاسهای مختلف را بررسی کرد.
3) پردازش زبان طبیعی: در NLP هم t-SNE برای نمایش، بردارهای کلمه، embeddingها، شباهتهای معنایی بین واژهها خیلی مفید است.
4) تحلیل و خوشهبندی دادهها : گاهی قبل از اجرای الگوریتمهای خوشهبندی، از t-SNE برای بررسی اولیهی ساختار داده استفاده میشود. این کار کمک میکند بفهمیم آیا دادهها واقعاً الگوی خوشهای دارند یا نه.
تفاوت t-SNE و PCA
یکی از مهمترین نکات در فهم t-SNE، مقایسهی آن با PCA است. هر دو روش برای کاهش ابعاد استفاده میشوند، اما هدف و رفتار آنها یکسان نیست.
| ویژگی | PCA | t-SNE |
|---|---|---|
| نوع روش | خطی | غیرخطی |
| هدف اصلی | حفظ بیشترین واریانس | حفظ همسایگیها و ساختار محلی |
| مناسب برای | فشردهسازی و تحلیل اولیه | مصورسازی دادههای پیچیده |
| تفسیر نتایج | نسبتاً ساده | وابسته به تنظیمات و پارامترها |
| نمایش خوشهها | همیشه واضح نیست | معمولاً بسیار واضحتر است |
به طور خلاصه، PCA برای دیدن جهتهای اصلی تغییرات داده عالی است، اما t-SNE برای دیدن گروهها و ساختارهای پنهان عملکرد بهتری دارد.
نکتهای که باید به آن توجه کرد این است که t-SNE معمولاً جایگزین کامل PCA نیست. در بسیاری از پروژهها، ابتدا از PCA برای کاهش اولیهی ابعاد استفاده میشود و سپس t-SNE برای مصورسازی دقیقتر به کار میرود. این ترکیب، هم سرعت پردازش را بهتر میکند و هم کیفیت نمایش نهایی را افزایش میدهد.
محدودیتهای t-SNE
با وجود مزایای زیاد، t-SNE محدودیتهایی هم دارد:
- اجرای آن نسبت به روشهای خطی کندتر است
- به تنظیم پارامترها حساس است
- حفظ ساختار سراسری در آن ضعیفتر از ساختار محلی است
- برای تفسیر عددی یا مدلسازی مستقیم مناسب نیست
بنابراین بهتر است از t-SNE بیشتر برای مشاهده و درک الگوها استفاده شود، نه برای تصمیمگیری نهایی بر اساس فاصلههای دقیق بین خوشهها.
مثال پایتون
فرض کنبا استفاده از دیتا ست اعداد دست نوشته ۱۷۰۰ تا عکس داریم از اعداد ۰ تا ۹ که هر عکس ۸ در ۸ پیکسل است (یعنی ۶۴ویژگی یا بعد دارد).فضای ۶۴ بعدی برای تصور انسان سخت هست بنابراین باید فضای ویژگی را به فضای ۲ بعد یا ۳ بعد کاهش بدیم. به نحوی که :
- عددهایی که شبیه هم بودند (مثلاً همهی ۲ها) توی نمودار ۲ بعدی هم کنار هم بیفتند.
- عددهایی که با هم فرق داشتند (مثلاً ۰ و ۱) توی نمودار از هم دور بیفتند.
بعد از لود داد های MNIST با دستور (load_digits) و استاندارد سازی داد ها (StandardScaler) با جادوی T-SNEبه بررسی همسایه ها می پردازیم (tsne.fit_transform) در نتیجه نقطه شماره A، توی اون فضای ۶۴ بعدی، نقاط که بهش نزدیکتر بودرا تشخیص داده و بعد درفضای ۲ بعدی هم همانها را نزدیک به هم نگه می دارد
- Perplexity جز پارامتر های الگوریتم در واقع مشخص می کنه “هر نقطه به چند تا همسایه توجه کند؟” (معمولاً ۳۰ عدد).
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
from sklearn.preprocessing import StandardScaler
# ۱. بارگذاری دیتاست (اعداد ۰ تا ۹)
digits = load_digits()
X = digits.data # ویژگیها (۶۴ بعد)
y = digits.target # برچسبها (کلاسها)
# ۲. استانداردسازی (خیلی مهم برای T-SNE)
X_scaled = StandardScaler().fit_transform(X)
# ۳. اجرای T-SNE
# perplexity: تعادل بین جنبههای محلی و کلی دیتا (معمولا بین ۵ تا ۵۰)
tsne = TSNE(n_components=2, perplexity=30, n_iter=1000, random_state=42)
X_embedded = tsne.fit_transform(X_scaled)
# ۴. رسم نمودار
plt.figure(figsize=(10, 8))
sns.scatterplot(
x=X_embedded[:, 0],
y=X_embedded[:, 1],
hue=y,
palette=sns.color_palette("hls", 10),
legend='full',
alpha=0.7
)
plt.title('T-SNE Visualization of Digits Dataset', fontsize=15)
plt.xlabel('TSNE component 1')
plt.ylabel('TSNE component 2')
plt.show()
در نتیجه نهایی (نمودار) تفکیک پذیری ویژگی های تقلیل یافته در فضای دو بعدی بهخوبی نشان داده شده است. مثلاً تمام نقاط “قرمز” (که عدد صفر هستند) یه گوشه جمع شدن و تمام نقاط “آبی” (عدد یک) یه گوشه دیگه . این یعنی ویژگی های اصلی “قابلیت تفکیک” (Separability) دارد.

مثال در متلب
مشابه کد قبلی در متلب هم پیاده سازی شده تا تنظیم پارامتر ها را اینجا هم بینید.
% ۱. بارگذاری دیتاست اعداد (مشابه load_digits در پایتون)
load digitTrain4DArrayData;
% XTrain به صورت ۴ بعدی است (28x28x1x5000)
% باید آن را به صورت ماتریس (تعداد نمونه x تعداد ویژگی) در بیاوریم
X = reshape(XTrain, [28*28, 5000])';
Y = YTrain; % برچسبها (Labels)
% ۲. استانداردسازی (مشابه StandardScaler)
X_scaled = zscore(double(X));
% ۳. اجرای T-SNE (مشابه پارامترهای پایتون)
% Perplexity: 30
% MaxIter: 1000
% NumDimensions: 2 (پیشفرض)
rng(42); % تنظیم seed برای تکرارپذیری مشابه random_state
Y_embedded = tsne(X_scaled, 'Perplexity', 30, 'MaxIter', 1000, 'Verbose', 1);
% ۴. رسم نمودار (مشابه sns.scatterplot)
figure('Color', 'w', 'Position', [100, 100, 800, 600]);
gscatter(Y_embedded(:,1), Y_embedded(:,2), Y, ...
hsv(10), '.', 15, 'on');
title('T-SNE Visualization in MATLAB', 'FontSize', 14);
xlabel('TSNE component 1');
ylabel('TSNE component 2');
grid on;
% ۵. ذخیره تصویر با کیفیت بالا (مشابه plt.savefig)
exportgraphics(gca, 'tsne_matlab_plot.png', 'Resolution', 300);
جمعبندی
t-SNE یکی از قدرتمندترین الگوریتمهای کاهش ابعاد غیرخطی برای مصورسازی دادههای چندبعدی است. این روش با تمرکز بر حفظ روابط محلی، امکان مشاهدهی خوشهها، الگوهای پنهان و ساختارهای پیچیدهی داده را فراهم میکند.
اگرچه t-SNE در کنار روشهایی مثل PCA استفاده میشود، اما نقش آن بیشتر در نمایش بصری و تحلیل شهودی دادهها است. به همین دلیل، در حوزههایی مانند زیستداده، پردازش تصویر، NLP و خوشهبندی کاربرد گستردهای دارد.
