الگوریتم کاهش ابعاد 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 ساختار دادهها را به اشتباه حفظ میکند.
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 اجرا میشود.
گام ۳: نتایج PCA برای هر دو مجموعه داده Digits و MNIST بصریسازی میشوند.
PCA برای کشف ساختارها در مجموعه داده Digits عملکرد مناسبی داشته است.
چنانچه مشهود است، مجموعه داده MNIST دارای مشکل ازدحام است.
گام ۴: اکنون گامهای مشابه آنچه در بالا انجام شد، با استفاده از الگوریتم t-SNE انجام میشود.
و اکنون برای مجموعه داده MNIST
اگر نوشته بالا برای شما مفید بوده، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- مجموعه آموزشهای مدلسازی، برازش و تخمین
- مجموعه آموزشهای شبکههای عصبی مصنوعی
- مجموعه آموزشهای هوش محاسباتی
- آموزش انتخاب ویژگی یا Feature Selection
- آموزش انتخاب ویژگی با استفاده از الگوریتم های فراابتکاری و تکاملی
- اصطلاحات کاربردی خوشهبندی — به زبان ساده
^^
با سلام و تشکر. خانم حصارکی ممکنه منبع اصلی مطلبتون رو بفرمایید؟
درود، در انتهای کلیه مطالب وبلاگ فرادرس (زیر قسمت امتیازدهی) آدرس منبع اصلی مطالب قرار داده میشوند. سپاس از شما