آموزش

مقدمه‌ای بر t-SNE

یاد بگیر چطور داده‌های با ابعاد بالا رو در یک فضای با ابعاد پایین با استفاده از یک تکنیک کاهش ابعاد غیرخطی، مصورسازی کنی.

تاریخ انتشار:
15 شهریور 1405
پایتون
14 دقیقه
مصورسازی داده
کاربرهای فینکا در چه شرکت‌هایی مشغول به کار هستند؟

در این آموزش، به بررسی نحوه کار t-SNE می‌پردازیم که یک تکنیک قدرتمند برای کاهش ابعاد و مصورسازی داده‌ها هست. ما اون رو با یک تکنیک محبوب دیگه یعنی PCA مقایسه می‌کنیم و نشون می‌دیم چطور می‌تونی هم t-SNE و هم PCA رو با استفاده از scikit-learn و plotly express روی دیتاست‌های مصنوعی و واقعی انجام بدی.

الگوریتم t-SNE چیه؟

الگوریتم t-SNE (تعبیه همسایه تصادفی توزیع شده t) یک تکنیک کاهش ابعاد غیرخطی و بدون نظارت برای اکتشاف داده‌ها و مصورسازی داده‌های با ابعاد بالا هست. کاهش ابعاد غیرخطی به این معنیه که الگوریتم به ما اجازه می‌ده داده‌هایی رو که نمی‌شه با یک خط راست جدا کرد، از هم جدا کنیم.

الگوریتم t-SNE بهت یک حس و شهود می‌ده که داده‌ها در ابعاد بالاتر چطور مرتب شدن. اغلب برای مصورسازی دیتاست‌های پیچیده در دو و سه بعد استفاده می‌شه، که به ما اجازه می‌ده الگوها و روابط پنهان در داده‌ها رو بهتر درک کنیم.

برای یادگیری درباره اکتشاف داده‌های با ابعاد بالا، انتخاب ویژگی و استخراج ویژگی، می‌تونی دوره کاهش ابعاد در پایتون ما رو در فینکا بگذرونی.

مقایسه t-SNE و PCA

هر دو تکنیک t-SNE و PCA تکنیک‌های کاهش ابعاد با مکانیزم‌های متفاوت هستن که با انواع مختلف داده‌ها بهترین عملکرد رو دارن.

تکنیک PCA (تحلیل مؤلفه‌های اصلی) یک تکنیک خطی هست که با داده‌هایی که ساختار خطی دارن بهترین کارکرد رو داره. این تکنیک به دنبال شناسایی مؤلفه‌های اصلی پنهان در داده‌ها از طریق تصویر کردن روی ابعاد پایین‌تر، به حداقل رسوندن واریانس و حفظ فاصله‌های بزرگ دو به دو هست. می‌تونی آموزش تحلیل مؤلفه‌های اصلی (PCA) ما رو در فینکا بخونی تا کارکرد داخلی این الگوریتم‌ها رو با مثال‌های R درک کنی. 

اما، t-SNE یک تکنیک غیرخطی هست که روی حفظ شباهت‌های دو به دو بین نقاط داده در یک فضای با ابعاد پایین‌تر تمرکز داره. الگوریتم t-SNE به حفظ فاصله‌های کوچک دو به دو اهمیت می‌ده در حالی که PCA روی حفظ فاصله‌های بزرگ دو به دو برای به حداکثر رسوندن واریانس تمرکز می‌کنه.

به‌طور خلاصه، PCA واریانس رو در داده‌ها حفظ می‌کنه. در مقابل، t-SNE روابط بین نقاط داده رو در یک فضای با ابعاد پایین‌تر حفظ می‌کنه، که اون رو به یک الگوریتم کاملا خوب برای مصورسازی داده‌های پیچیده با ابعاد بالا تبدیل می‌کنه.

جدول زیر می‌تونه بهت کمک کنه تا t-SNE و PCA رو در کنار هم مقایسه کنی:

ویژگی t-SNE PCA
نوع کاهش ابعاد غیرخطی کاهش ابعاد خطی
هدف حفظ شباهت‌های دو به دوی محلی حفظ واریانس سراسری
بهترین استفاده برای مصورسازی داده‌های پیچیده و با ابعاد بالا داده‌هایی با ساختار خطی
خروجی نمایش با ابعاد پایین مؤلفه‌های اصلی
موارد استفاده خوشه‌بندی، تشخیص ناهنجاری، NLP کاهش نویز، استخراج ویژگی
شدت محاسباتی بالا پایین
تفسیر تفسیر سخت‌تر تفسیر آسان‌تر

 

الگوریتم t-SNE چطور کار می‌کنه؟

الگوریتم t-SNE معیار شباهت بین جفت نمونه‌ها در فضای با ابعاد بالاتر و پایین‌تر رو پیدا می‌کنه. بعد از اون، سعی می‌کنه دو معیار شباهت رو بهینه‌سازی کنه. همه این کارها رو در سه مرحله انجام می‌ده. 

  1. الگوریتم t-SNE انتخاب شدن یک نقطه به‌عنوان همسایه یک نقطه دیگه رو در هر دو بعد بالا و پایین مدل‌سازی می‌کنه. این کار با محاسبه یک شباهت دو به دو بین تمام نقاط داده در فضای با ابعاد بالا با استفاده از یک کرنل گاوسی (Gaussian kernel) شروع می‌شه. نقاطی که از هم دور هستن، نسبت به نقاط نزدیک به هم، احتمال کمتری برای انتخاب شدن دارن. 
  2. سپس الگوریتم سعی می‌کنه نقاط داده با ابعاد بالاتر رو روی فضای با ابعاد پایین‌تر نگاشت کنه در حالی که شباهت‌های دو به دو رو حفظ می‌کنه. 
  3. این کار با به حداقل رسوندن واگرایی بین توزیع احتمال اصلی با ابعاد بالا و با ابعاد پایین به دست میاد. الگوریتم از گرادیان کاهشی (gradient descent) برای به حداقل رسوندن واگرایی استفاده می‌کنه. تعبیه (embedding) با ابعاد پایین‌تر تا یک حالت پایدار بهینه می‌شه.

فرآیند بهینه‌سازی به ایجاد خوشه‌ها و زیرخوشه‌هایی از نقاط داده مشابه در فضای با ابعاد پایین‌تر کمک می‌کنه، که مصورسازی می‌شن تا ساختار و روابط در داده‌های با ابعاد بالاتر رو درک کنیم.

مثال t-SNE در پایتون

در این مثال پایتون، ما داده‌های طبقه‌بندی تولید می‌کنیم، PCA و t-SNE رو اجرا می‌کنیم و نتایج رو مصورسازی می‌کنیم. از کتابخونه scikit-learn برای انجام کاهش ابعاد استفاده می‌کنیم، و برای مصورسازی از Plotly Express استفاده می‌کنیم.

تولید یک دیتاست طبقه‌بندی

ما از تابع make_classification() در scikit-learn برای تولید داده‌های مصنوعی با ۶ ویژگی، ۱۵۰۰ نمونه، و ۳ کلاس استفاده می‌کنیم. 

بعد از اون، سه ویژگی اول داده‌ها رو با استفاده از تابع scatter_3d() در Plotly Express به‌صورت سه‌بعدی رسم می‌کنیم. 

 ما یک نمودار سه‌بعدی از داده‌ها داریم؛ همچنین می‌تونیم داده‌ها رو در یک نمودار دوبعدی با استفاده از تابع scatter() در Plotly Express مصورسازی کنیم.

برازش و تبدیل با PCA

حالا الگوریتم PCA رو روی دیتاست اعمال می‌کنیم تا دو مؤلفه PCA برگردونه. تابع fit_transform() دیتاست رو هم‌زمان یاد می‌گیره و تبدیل می‌کنه.  

مصورسازی t-SNE در پایتون

حالا می‌تونیم نتایج رو با نمایش دو مؤلفه PCA روی یک نمودار نقطه‌ای مصورسازی کنیم. 

  • محور x: مؤلفه اول
  • محور y: مؤلفه دوم
  • رنگ (color): متغیر هدف.

همچنین از تابع update_layout() استفاده کردیم تا یک عنوان اضافه کنیم و نام محور x و محور y رو تغییر بدیم.

برازش و تبدیل در t-SNE

حالا، الگوریتم t-SNE رو روی دیتاست اعمال می‌کنیم و نتایج رو مقایسه می‌کنیم. 

بعد از برازش و تبدیل داده‌ها، واگرایی کولبک-لیبلر (KL) بین توزیع‌های احتمال با ابعاد بالا و پایین رو نمایش می‌دیم. واگرایی KL پایین معمولا نشانه‌ای از نتایج بهتر هست.

خروجی
1.1169137954711914

مصورسازی t-SNE در پایتون

مشابه PCA، دو مؤلفه t-SNE رو روی یک نمودار نقطه‌ای مصورسازی می‌کنیم. 

این نتیجه واقعا بهتر از PCA هست. ما می‌تونیم به‌وضوح سه خوشه بزرگ رو ببینیم. 

استفاده از t-SNE روی یک دیتاست ریزش مشتری

در این بخش، ما از دیتاست ریزش مشتری یک شرکت مخابراتی ایرانی استفاده می‌کنیم. این دیتاست حاوی اطلاعاتی درباره فعالیت مشتریان، مثل تماس‌های ناموفق و طول مدت اشتراک، و یک برچسب ریزش (churn) هست.

ریزش (Churn) به معنی درصد مشتریانی هست که در یک بازه زمانی مشخص، استفاده از یک سرویس خاص رو متوقف می‌کنن.

وارد کردن دیتاست ریزش مشتری

ما دیتاست رو با استفاده از pandas بارگذاری می‌کنیم و سه سطر اول رو نمایش می‌دیم.

خروجی
   Call Failure  Complaints  Subscription Length  Charge Amount  Seconds of Use  Frequency of use  Frequency of SMS
0             8           0                   38              0            4370                71                 5
1             0           0                   39              0             318                 5                 7
2            10           0                   37              0            2453                60               359

کاهش ابعاد با PCA

بعد از اون، ما کارهای زیر رو انجام می‌دیم:

  • ویژگی‌ها (X) و هدف (y) رو با استفاده از ستون Churn ایجاد می‌کنیم.
  • ویژگی‌ها رو با استفاده از یک standard scaler نرمال‌سازی می‌کنیم.
  • دیتاست رو به یک مجموعه آموزشی و یک مجموعه آزمایشی تقسیم می‌کنیم.
  • تکنیک PCA رو روی دیتاست آموزشی اعمال می‌کنیم.
  • با استفاده از دیتاست آزمایشی، امتیاز رو دریافت می‌کنیم. این امتیاز نشون‌دهنده میانگین لگاریتم شباهت همه نمونه‌هاست.
خروجی
-17.04482851288105

مصورسازی نتایج PCA

حالا نتیجه PCA رو با استفاده از نمودار نقطه‌ای Plotly Express مصورسازی می‌کنیم. 

تکنیک PCA در ایجاد خوشه‌ها خوب عمل نکرد. داده‌ها در بعد پایین تصادفی به نظر می‌رسن. این همچنین می‌تونه به این معنی باشه که ویژگی‌های موجود در دیتاست به‌شدت چوله هستن، یا ساختار همبستگی قوی‌ای ندارن. 

بررسی perplexity در مقابل واگرایی

پارامتر Perplexity یک هایپرپارامتر مهم برای الگوریتم t-SNE هست. این پارامتر تعداد مؤثر همسایه‌هایی رو کنترل می‌کنه که هر نقطه در طول فرآیند کاهش ابعاد در نظر می‌گیره. 

ما یک حلقه رو اجرا می‌کنیم تا معیار واگرایی KL رو روی مقادیر مختلف perplexity از ۵ تا ۵۵ با فاصله ۵ واحدی بگیریم. سپس، نتیجه رو با استفاده از نمودار خطی Plotly Express نمایش می‌دیم.

واگرایی KL بعد از perplexity برابر با ۴۰ ثابت شده. بنابراین، ما از ۴۰ برای perplexity در الگوریتم t-SNE استفاده می‌کنیم.  

کاهش ابعاد t-SNE

حالا t-SNE رو برازش می‌دیم و با استفاده از ۴۰ برای perplexity، داده‌ها رو به ابعاد پایین‌تر تبدیل می‌کنیم تا کمترین واگرایی KL رو به دست بیاریم.

خروجی
0.258713960647583

مصورسازی t-SNE

حالا از نمودار نقطه‌ای Plotly استفاده می‌کنیم تا مؤلفه‌ها و کلاس‌های هدف رو نمایش بدیم. 

همون‌طور که می‌بینیم، ما خوشه‌ها و زیرخوشه‌های متعددی داریم. می‌تونیم از این اطلاعات برای درک الگو و توسعه یک استراتژی برای حفظ مشتریان فعلی استفاده کنیم. 

محدودیت‌ها و چالش‌های t-SNE

با اینکه t-SNE یک ابزار مصورسازی قدرتمند برای داده‌های با ابعاد بالا هست، اما محدودیت‌هایی هم داره:

  1. هزینه محاسباتی: اجرای t-SNE از نظر محاسباتی پرهزینه هست، به‌خصوص برای دیتاست‌های بزرگ. مقیاس‌پذیری محاسبات شباهت دو به دو نسبت به اندازه دیتاست ضعیفه، که این موضوع باعث می‌شه برای دیتاست‌هایی با میلیون‌ها نقطه کمتر مناسب باشه.
  2. حساسیت به هایپرپارامترها: عملکرد t-SNE به‌شدت به هایپرپارامترهایی مثل perplexity و نرخ یادگیری وابسته‌ست. پیدا کردن مقادیر بهینه اغلب نیاز به آزمون و خطا داره، که می‌تونه زمان‌بر باشه.
  3. فقدان تفسیرپذیری: تعبیه‌های به‌دست‌اومده در t-SNE اغلب غیرقطعی هستن (به دلیل مقداردهی اولیه تصادفی و گرادیان کاهشی) و فاقد یک رابطه مستقیمِ قابل تفسیر با داده‌های اصلی با ابعاد بالا هستن.
  4. نامناسب برای داده‌های خارج از نمونه: الگوریتم t-SNE نمی‌تونه به داده‌های جدید و دیده‌نشده بدون محاسبه مجدد تعبیه‌ها از صفر، تعمیم پیدا کنه، که این برای دیتاست‌های پویا ناکارآمده.

مقایسه t-SNE در برابر UMAP

در سال‌های اخیر، UMAP (تقریب و تصویرسازی خمینه یکنواخت) به‌عنوان یک جایگزین محبوب برای t-SNE ظاهر شده. اگرچه هر دو، تکنیک‌های کاهش ابعاد غیرخطی هستن که برای مصورسازی طراحی شدن، اما UMAP برخی از محدودیت‌های t-SNE رو برطرف می‌کنه:

  • الگوریتم UMAP سریع‌تر و از نظر حافظه کارآمدتر از t-SNE هست، که اون رو برای دیتاست‌های بزرگ مناسب می‌کنه.
  • الگوریتم UMAP در حفظ هر دو ساختار محلی و سراسری در داده‌ها بهتر عمل می‌کنه، در حالی که t-SNE عمدتا روی حفظ شباهت‌های دو به دوی محلی تمرکز داره.
  • الگوریتم UMAP هایپرپارامترهای کمتری برای تنظیم در مقایسه با t-SNE داره و نتایجش در اجراهای مختلف به‌طور کلی سازگارتر هست.
  • برخلاف t-SNE، الگوریتم UMAP از تبدیلات برای نقاط داده جدید پشتیبانی می‌کنه، که این موضوع اون رو برای دیتاست‌های پویا مناسب‌تر می‌کنه.

پیچیدگی محاسباتی: t-SNE در برابر UMAP و PCA

جدول زیر پیچیدگی محاسباتی t-SNE رو در مقایسه با UMAP و PCA خلاصه می‌کنه:

تکنیک پیچیدگی محاسباتی ویژگی‌ها مناسب بودن برای دیتاست‌های بزرگ
t-SNE O(N²) ساختار محلی رو حفظ می‌کنه، بسیار قابل سفارشی‌سازی هست متوسط (برای دیتاست‌های بزرگ کنده)
UMAP O(N log N) تعادل بین ساختار محلی و سراسری ایجاد می‌کنه، سریع‌تره بالا (دیتاست‌های بزرگ رو به‌طور کارآمدی مدیریت می‌کنه)
PCA O(Nd²) کاهش خطی، مؤلفه‌های قابل تفسیر بالا (بسیار کارآمده)
  • N: تعداد نقاط داده
  • d: تعداد ویژگی‌ها در داده‌ها

به‌طور خلاصه، در حالی که t-SNE بینش‌های دقیقی از روابط محلی ارائه می‌ده، UMAP اغلب یک انتخاب کارآمدتر و مقیاس‌پذیرتر برای دیتاست‌های مدرن هست. تکنیک PCA هنوز هم یک گزینه سریع و قابل تفسیر برای داده‌های خطی باقی می‌مونه. بسته به دیتاست و اهداف، انتخاب تکنیک مناسب شامل ایجاد تعادل بین تفسیرپذیری، هزینه محاسباتی، و ماهیت داده‌ها می‌شه.

کاربردهای t-SNE

جدا از مصورسازی داده‌های چندبعدی پیچیده، t-SNE کاربردهای دیگه‌ای هم داره:

  1. خوشه‌بندی و طبقه‌بندی: برای خوشه‌بندی کردن نقاط داده مشابه در کنار هم در فضای با ابعاد پایین‌تر. همچنین می‌تونه برای طبقه‌بندی و پیدا کردن الگوها در داده‌ها استفاده بشه. 
  2. تشخیص ناهنجاری: برای شناسایی داده‌های پرت و ناهنجاری‌ها در داده‌ها. 
  3. پردازش زبان طبیعی (NLP): برای مصورسازی تعبیه‌های کلمه تولید شده از یک مجموعه بزرگ از متون، که تشخیص شباهت‌ها و روابط بین کلمات رو راحت‌تر می‌کنه.
  4. امنیت کامپیوتر: برای مصورسازی الگوهای ترافیک شبکه و تشخیص ناهنجاری‌ها.
  5. تحقیقات سرطان: برای مصورسازی پروفایل‌های مولکولی نمونه‌های تومور و شناسایی زیرگونه‌های سرطان. 
  6. تفسیر دامنه زمین‌شناسی: برای مصورسازی ویژگی‌های لرزه‌ای و شناسایی ناهنجاری‌های زمین‌شناسی. 
  7. پردازش سیگنال‌های زیست‌پزشکی: برای مصورسازی الکتروانسفالوگرام (EEG) و تشخیص الگوهای فعالیت مغز. 

نتیجه‌گیری

الگوریتم t-SNE یک ابزار مصورسازی قدرتمند برای آشکار کردن الگوها و ساختارهای پنهان در دیتاست‌های پیچیده هست. می‌تونی از اون برای تصاویر، صدا، داده‌های بیولوژیکی و تک‌داده‌ها استفاده کنی تا ناهنجاری‌ها و الگوها رو شناسایی کنی. 

در این پست، درباره t-SNE یاد گرفتیم، یک تکنیک محبوب کاهش ابعاد که می‌تونه داده‌های غیرخطی با ابعاد بالا رو در یک فضای با ابعاد پایین مصورسازی کنه. ایده اصلی پشت t-SNE، نحوه کارکردش و کاربردهاش رو توضیح دادیم. علاوه بر این، مثال‌هایی از اعمال t-SNE روی دیتاست‌های مصنوعی و واقعی و نحوه تفسیر نتایج رو نشون دادیم. 

الگوریتم t-SNE بخشی از یادگیری بدون نظارت هست و قدم طبیعی بعدی درک خوشه‌بندی سلسله مراتبی، PCA، همبستگی‌زدایی و کشف ویژگی‌های قابل تفسیر هست. با گذروندن دوره یادگیری بدون نظارت در پایتون ما در فینکا، همه این مباحث رو یاد بگیر.

اشتراک‌گذاری
فهرست مطالب
  • الگوریتم t-SNE چیه؟
  • مقایسه t-SNE و PCA
  • الگوریتم t-SNE چطور کار می‌کنه؟
  • مثال t-SNE در پایتون
  • استفاده از t-SNE روی یک دیتاست ریزش مشتری
  • محدودیت‌ها و چالش‌های t-SNE
  • کاربردهای t-SNE
  • نتیجه‌گیری

سوالات متداول

الگوریتم t-SNE ممکنه به دلیل پیچیدگی محاسباتی و استفاده از حافظه، با دیتاست‌های خیلی بزرگ مشکل پیدا کنه. اغلب توصیه می‌شه از t-SNE روی یک زیرمجموعه از داده‌ها استفاده کنی یا برای دیتاست بزرگ‌تر به گزینه‌های جایگزین مثل UMAP فکر کنی.

پارامتر Perplexity یک هایپرپارامتر مهم در t-SNE هست که روی تعادل بین حفظ ساختار داده‌های محلی و سراسری تأثیر می‌ذاره. مقادیر پایین perplexity روی روابط محلی تأکید دارن، در حالی که مقادیر بالا ساختارهای گسترده‌تر رو ثبت می‌کنن. برای پیدا کردن بهترین تنظیمات برای داده‌هات، اغلب لازمه که با مقادیر مختلف آزمایش کنی.

علاوه بر perplexity، باید به نرخ یادگیری (learning rate) و تعداد تکرارها (iterations) توجه کنی. نرخ یادگیری مشخص می‌کنه الگوریتم با چه سرعتی همگرا می‌شه، در حالی که تعداد تکرارها مدت زمان فرآیند بهینه‌سازی رو تعیین می‌کنه.

الگوریتم t-SNE می‌تونه نسبت به نویز حساس باشه چون سعی می‌کنه شباهت‌های دو به دو رو حفظ کنه، که می‌تونن توسط ویژگی‌های نویزدار تحریف بشن. مراحل پیش‌پردازش مثل انتخاب ویژگی یا حذف نویز می‌تونن به بهبود نتایج t-SNE کمک کنن.

الگوریتم t-SNE در درجه اول یک ابزار مصورسازی هست و برای تحلیل کمی یا خوشه‌بندی ایده‌آل نیست، چون فاصله‌ها یا چگالی‌های واقعی رو حفظ نمی‌کنه. برای خوشه‌بندی، باید تکنیک‌هایی مثل K-means یا DBSCAN رو روی داده‌های اصلی با ابعاد بالا اعمال کنی.

برای افزایش تفسیرپذیری، می‌تونی نقاط داده رو با دسته‌های شناخته شده برچسب‌گذاری کنی، از نمودارهای تعاملی استفاده کنی، یا اطلاعات اضافی مثل مرزهای خوشه یا مرکزها رو روی اون‌ها قرار بدی.

الگوریتم UMAP اغلب سریع‌تر از t-SNE هست و می‌تونه دیتاست‌های بزرگ‌تر رو با کیفیت تعبیه‌های (embeddings) مشابه یا بهتر مدیریت کنه. همچنین UMAP تمایل داره ساختار سراسری بیشتری از داده‌ها رو در مقایسه با t-SNE حفظ کنه.

به دلیل شدت محاسباتی، t-SNE معمولا برای مصورسازی بلادرنگ (real-time) مناسب نیست. اما اگر اندازه مجموعه داده قابل مدیریت باشه و به‌روزرسانی‌ها کم باشن، ممکنه با بهینه‌سازی و نمونه‌برداری امکان‌پذیر باشه.

خوشه‌ها در یک نمودار t-SNE نشون‌دهنده گروه‌هایی از نقاط داده با شباهت بالا در فضای اصلی با ابعاد بالا هستن. اما نباید فاصله‌ها و شکل‌های دقیق در نمودارهای t-SNE رو بیش از حد تفسیر کنی، چون به همون شکلی که در فضای اصلی معنی‌دار هستن، در اینجا معنی‌دار نیستن.

الگوریتم t-SNE به‌طور ویژه در تحلیل اکتشافی داده‌ها مفیده، مثل مصورسازی پروفایل‌های بیان ژن، داده‌های تصویری، یا تعبیه‌های کلمه (word embeddings)، جایی که درک ساختار و روابط محلی بسیار مهمه.

دریافت اپلیکیشن فینکا

با اپلیکیشن فینکا، به بیشتر دوره‌ها و مسیرها روی موبایل دسترسی دارید، تمرین می‌کنید و یادگیری رو هم‌زمان روی موبایل و دسکتاپ ادامه می‌دید.