نقشه های خودسازمان دهنده (SOM) در پایتون — راهنمای کاربردی
«نقشه های خودسازمان دهنده» (Self-organizing Maps | SOM) که با نام «شبکه کوهونن» (Kohonen network) نیز شناخته شدهاند، برای نگاشت «دادههای ابعاد بالا» (High Dimensional Data) در یک ارائه دوبُعدی مورد استفاده قرار میگیرند. برای سادگی بصریسازی، «ابعاد بالا» در مثال طرح شده در ادامه، «سهبُعدی» است.
به طور کلی، SOMها میتوانند برای بصریسازی دادههای ابعاد بالا، نظر به حفظ ساختار مشابه، مفید باشند. SOMهای به طور ویژه بزرگ (با تعداد بالایی واحدهای کوهونن) برای انجام نگاشتهایی که «توپولوژی» (Topology) دادههای اصلی را حفظ میکنند مورد استفاده قرار میگیرند. به عبارت دیگر، نقاط داده همسایه در فضای ورودی نیز در یک موقعیت مجاور در SOM ارائه خواهند شد. کد زیر، مثال «نگاشت رنگ کلاسیک» را نشان میدهد، یعنی SOM یک عدد از رنگها را در یک شکل مستطیلی نگاشت خواهد کرد.
from mvpa2.suite import *
ابتدا، برخی از رنگها به عنوان مقادیر RGB در بازه (۱و۰) تعریف میشوند. در واقع، سفید از (۱و۱و۱) و سیاه از (۰و۰و۰) شروع میشود. باید به این نکته نیز توجه داشت که بخش قابل توجهی از رنگهای تعریف شده نشانگر تنوع رنگی طیف «blue» هستند.
colors = np.array(
[[۰٫, ۰٫, ۰٫],
[۰٫, ۰٫, ۱٫],
[۰٫, ۰٫, ۰٫۵],
[۰٫۱۲۵, ۰٫۵۲۹, ۱٫۰],
[۰٫۳۳, ۰٫۴, ۰٫۶۷],
[۰٫۶, ۰٫۵, ۱٫۰],
[۰٫, ۱٫, ۰٫],
[۱٫, ۰٫, ۰٫],
[۰٫, ۱٫, ۱٫],
[۱٫, ۰٫, ۱٫],
[۱٫, ۱٫, ۰٫],
[۱٫, ۱٫, ۱٫],
[.۳۳, .۳۳, .۳۳],
[.۵, .۵, .۵],
[.۶۶, .۶۶, .۶۶]])
# store the names of the colors for visualization later on
color_names = \
[‘black’, ‘blue’, ‘darkblue’, ‘skyblue’,
‘greyblue’, ‘lilac’, ‘green’, ‘red’,
‘cyan’, ‘violet’, ‘yellow’, ‘white’,
‘darkgrey’, ‘mediumgrey’, ‘lightgrey’]
اکنون میتوان mapper را مقداردهی اولیه کرد. mapper به صورت داخلی از لایهای که به آن «لایه کوهونن» (Kohonen layer) گفته میشود برای نگاشت دادهها استفاده میکند. به mapper گفته میشود که از یک لایه مستطیل شکل با واحدهای ۳۰×۲۰ استفاده کند. این فضای خروجی mapper است. علاوه بر این، به آن گفته میشود که شبکه را با استفاده از ۴۰۰ تکرار آموزش دهد و از یک نرخ یادگیری سفارشی استفاده کند.
som = SimpleSOMMapper((20, 30), 400, learning_rate=0.05)
در نهایت، mapper با مجموعه داده از پیش تعریف شده «color» آموزش داده میشود.
som.train(colors)
هر واحد در لایه کوهونن میتواند به عنوان اشارهگری به فضای ورودی ابعاد بالا در نظر گرفته شود که میتواند برای بررسی اینکه SOM به کدام زیرفضای ورودی در بخش مشخصی از فضای خروجی دوبُعدی نگاشت میشود، مورد پرسش قرار بگیرد. نگاشت رنگی تولید شده توسط SOM در این مثال را میتوان با یکبار فراخوانی matplotlib ترسیم کرد.
pl.imshow(som.K, origin=’lower’)
حالا میتوان نگاهی به این موضوع داشت که پروتوتایپهای آموزش اولیه به کدامها مختصاتها نگاشت میشوند. با دریافت این مختصاتها میتوان به سادگی دادههای آموزش را به mapper خوراند و خروجی را ترسیم کرد.
mapped = som(colors)
pl.title(‘Color SOM’)
# SOM’s kshape is (rows x columns), while matplotlib wants (X x Y)
for i, m in enumerate(mapped):
pl.text(m[1], m[0], color_names[i], ha=’center’, va=’center’,
bbox=dict(facecolor=’white’, alpha=0.5, lw=0))
برچسبهای متن رنگهای آموزش اصلی در موقعیت «نگاشت شده» در SOM ظاهر میشوند و باید با رنگهای اساسی تطبیق پیدا کنند.
# show the figure
تصویر زیر یک راهکار نمونه از نگاشت SOM از فضای رنگی سهبُعدی به لایه گره فضای دوبُعدی را نشان میدهد.
اگر نوشته بالا برای شما مفید بود، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای آمار، احتمالات و دادهکاوی
- آموزشهای دادهکاوی یا Data Mining در متلب
- مجموعه آموزشهای مدل سازی، برازش و تخمین
- دادهکاوی (Data Mining) — از صفر تا صد
- یادگیری علم داده (Data Science) با پایتون — از صفر تا صد
منبع [+]
مجموعه: داده کاوی, هوش مصنوعی برچسب ها: High Dimensional Data, Kohonen network, Self-Organizing Map, داده ابعاد بالا, شبکه کوهونن, نقشه خودسازمان دهنده