الگوریتم کاهش ابعاد t-SNE با مثال‌های پایتون — آموزش کاربردی

۱۳۱۲ بازدید
آخرین به‌روزرسانی: ۱۲ مهر ۱۴۰۲
زمان مطالعه: ۵ دقیقه
الگوریتم کاهش ابعاد t-SNE با مثال‌های پایتون — آموزش کاربردی

در این مطلب، مقدمه‌ای بر روش اکتشافی و بصری‌سازی الگوریتم t-SNE ارائه می‌شود. این الگوریتم روش قدرتمندی برای کاهش ابعاد و بصری‌سازی داده‌ها است که در مجموعه داده‌های ابعاد بالا مورد استفاده قرار می‌گیرد. در همین راستا، مطالعه مطلب «انتخاب ویژگی (Feature Selection) در داده های ابعاد بالا — خودآموز ساده» نیز به شما پیشنهاد می‌شود.

t-SNE چیست؟

«t-توکاری همسایگی تصادفی توزیع شده» (Distributed Stochastic Neighbor Embedding)، روش نظارت نشده غیر خطی است که برای اکتشاف و بصری‌سازی داده‌ها مورد استفاده قرار می‌گیرد. به بیان ساده‌تر، t-SNE به کاربر درکی از اینکه داده‌ها چگونه در فضای ابعاد بالا سازمان‌دهی شده‌اند ارائه می‌کند. این روش توسط «لورنز ون در ماتنز» (Laurens van der Maatens) و «جفری هینتون» (Geoffrey Hinton) در سال ۲۰۰۸ ساخته شد.

t-SNE در مقایسه با تحلیل مولفه اساسی

کاربرانی که با تحلیل مولفه اساسی (PCA | Principal Components Analysis) آشنایی دارند ممکن است چنین پرسشی را طرح کنند که بین این الگوریتم و t-SNE چه تفاوتی هست. اولین موردی که می‌توان به آن اشاره کرد این است که PCA در سال ۱۹۹۳ ساخته شد، در حالیکه t-SNE در سال ۲۰۰۸ ظهور پیدا کرد. از سال ۱۹۹۳ به بعد چیزهای زیادی در دنیای علم داده تغییر کرده که مهم‌ترین آن‌ها توان محاسباتی (و ابزارهای محاسباتی) و اندازه داده‌ها محسوب می‌شود.

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

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

مجموعه داده کیک رولتی
مجموعه داده Swiss Roll. حفظ فاصله کوچک با t-SNE (خط توپر) در مقایسه با PCA بیشینه‌سازی واریانس.

t-SNE چگونه کار می‌کند؟

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

۱. در گام اول، مشابهت بین نقاط در فضای ابعاد بالا اندازه‌گیری می‌شود. برای درک بهتر موضوع، می‌توان دسته‌ای از نقاط داده پراکنده شده در یک فضای دوبُعدی را مانند آنچه در شکل زیر آمده، در نظر گرفت. برای هر نقطه داده (xi) توزیع گاوسی حول محور آن نقطه توسط کاربر متمرکز می‌شود. سپس، چگالی همه نقاط (xj) تحت آن توزیع گاوسی محاسبه می‌شود. پس از آن، «بازبهنجارسازی» (renormalize) برای همه نقاط داده انجام می‌شود. این امر یک مجموعه از احتمالات (Pij) برای کلیه نقاط داده را به دست می‌دهد. این احتمالات متناسب با مشابهت‌ها هستند. این در واقع بدان معناست که اگر نقطه داده x1 و x2 مقادیر یکسانی تحت دایره گاوسی داشته باشند، نسبت‌ها و مشابهت‌های آن‌ها مساوی و بنابراین مشابهت‌های محلی در ساختار فضای ابعاد بالا فراهم است. توزیع یا دایره گاوسی با استفاده از آنچه «سرگشتگی» (Perplexity) نامیده می‌شود، قابل دستکاری کردن محسوب می‌شود و واریانس توزیع (اندازه دایره) و اساسا تعداد نزدیک‌ترین همسایه‌ها را تحت تاثیر قرار می‌دهد. دامنه نرمال برای سرگشتگی بین ۵ و ۵۰ است.

توزیع گاوسی
سنجش مشابهت دوتایی‌ها در فضای ابعاد بالا

۲. گام ۲ مشابه گام ۱ است، اما به جای توزیع گاوسی، توزیع «تی-استیودنت» (Student's t-distribution) با یک درجه آزادی مورد استفاده قرار می‌گیرد که با عنوان «توزیع کوشی» (Cauchy distribution) نیز شناخته می‌شود (به عبارت دیگر، هنگامی که درجه آزادی در توزیع تی-استیودنت برابر با یک باشد به توزیع کوشی تبدیل می‌شود).

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

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

۳. گام آخر این است که این مجموعه از احتمالات از فضای ابعاد پایین (Qij) آن‌هایی که در فضای ابعاد بالای (Pij) قرار دارند را به بهترین شکل ممکن منعکس کنند. خواسته آن است که ساختار هر دو نقشه مشابه باشد. تفاوت بین توزیع‌های احتمال فضای دوبُعدی با استفاده از «معیار واگرایی کولبک-لیبلر» (Kullback-Liebler divergence | KL) قابل محاسبه است. در این مطلب به مبحث KL به طور جزئی پرداخته نخواهد شد و تنها به بیان این نکته که یک رویکرد نامتقارن است که به طور موثر مقادیر Pij و Qij را مقایسه می‌کند اکتفا خواهد شد. در نهایت، از «گرادیان نزولی» برای کاهش تابع هزینه KL استفاده می‌شود.

بررسی موردی برای t-SNE

اکنون که روش کار t-SNE شرح داده شد، مختصری به موارد استفاده از آن پرداخته می‌شود. «لورنز ون در ماتن» (Laurens van der Maaten) مثال‌های زیادی را در ارائه‌های ویدئویی خود پیرامون کاربرد این روش بیان کرده است. او از جمله کاربردهای  t-SNE را در زمینه‌هایی مانند پژوهش‌های اقلیمی، امنیت رایانه‌ای، بیوانفورماتیک، پژوهش‌های سرطان و دیگر موارد برمی‌شمارد. t-SNE در داده‌های ابعاد بالا قابل استفاده است و خروجی این ابعاد بعدا به ورودی‌های برخی مدل‌های دسته‌بندی دیگر مبدل می‌شوند.

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

کد نمونه در پایتون

در ادامه کد پایتونی ارائه شده که با استفاده از آن می‌توان مقایسه بین PCA و t-SNE را روی مجموعه داده‌های MNIST و Digit به صورت بصری مشاهده کرد. این دو مجموعه داده به دلیل تفاوت در ابعاد و در نتیجه تفاوت در نتایج انتخاب شده‌اند. همچنین، روشی در کد که با استفاده از آن می‌توان PCA را پیش از اجرای t-SNE اجرا کرد نمایش داده شده. این کار برای کاهش محاسبات قابل انجام است و می‌توان تا بالغ بر 30 بُعد را کاهش داد و سپس t-SNE را اجرا کرد.

کد مذکور با استفاده از پایتون و فراخوانی کتابخانه‌های SAS اجرا می‌شود. همچنین از seaborn برای بصری‌سازی نتایج استفاده شده که راهکار خوبی محسوب می‌شود اما ممکن است همراه با t-SNE خوشه‌های بسیار فشرده‌ای را ارائه کند و نیازمند بزرگ‌نمایی باشد. دیگر ابزارهای بصری‌سازی مانند plotly در صورت نیاز به بزرگنمایی گزینه‌های مناسب‌تری هستند. کد کامل پیاده‌سازی‌های بیان شده، در گیت‌هاب «آندره ویولنت» (Andre Violante) موجود است.

گام اول: بارگذاری کتابخانه‌های پایتون. ساخت یک اتصال به سرور SAS (که به آن CAS گفته می‌شود و در موتور حافظه توزیع شده). بارگذاری مجموعه اقدام CAS (می‌توان به عنوان کتابخانه آن را در نظر گرفت). خواندن داده‌ها و مشاهده شکل آن‌ها.

فراخوانی کتابخانه‌های پایتون

گام ۲: در این نقطه، همچنان روی ماشین محلی کار می‌شود. در این راستا، داده‌ها در سرور CAS که پیش‌تر به آن اشاره شد بارگذاری می‌شوند. این کار به استفاده از مزایای محیط توزیع شده و کسب کارایی عملکرد کمک می‌کند. سپس، تحلیل‌های PCA روی داده‌های Digits و MNIST اجرا می‌شود.

بارگذاری داده‌ها در سرور CAS

گام ۳: نتایج PCA برای هر دو مجموعه داده Digits و MNIST بصری‌سازی می‌شوند.

بصری‌سازی خروجی PCA

نتایج PCA برای مجموعه داده Digits

PCA برای کشف ساختارها در مجموعه داده Digits عملکرد مناسبی داشته است.

نتایج PCA برای مجموعه داده MNIST

چنانچه مشهود است، مجموعه داده MNIST دارای مشکل ازدحام است.

گام ۴: اکنون گام‌های مشابه آنچه در بالا انجام شد، با استفاده از الگوریتم t-SNE انجام می‌شود.

اجرای الگوریتم t-SNE روی مجموعه داده Digits

نمایش نتایج خروجی برای مجموعه داده Digits

نتایج t-SNE برای مجموعه داده Digits

و اکنون برای مجموعه داده MNIST

اجرای t-SNE روی مجموعه داده MNIST

نمایش نتایج خروجی برای مجموعه داده MNIST

نتایج t-SNE برای مجموعه داده MNIST

اگر نوشته بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱۵ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
kdnuggets
۲ دیدگاه برای «الگوریتم کاهش ابعاد t-SNE با مثال‌های پایتون — آموزش کاربردی»

با سلام و تشکر. خانم حصارکی ممکنه منبع اصلی مطلبتون رو بفرمایید؟

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

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *