پرونده یادگیری ماشین برای نوجوانان، قسمت دوم

در قسمت اول از این پرونده که در این‌جا قرار داره، با مفهوم یادگیری آشنا شدیم و تفاوت یادگیری ماشین رو با روش‌هایی که تا الان برای برنامه‌نویسی با کامپیوترها سراغ داشتیم، متوجه شدیم. در این قسمت می‌خوایم دو روش ملموس در یادگیری ماشین رو با هم بررسی کنیم. همراهمون باشید! :)

همسایه‌ها یاری کنید!

قلی در یکی از بیمارستان‌های مخصوص پذیرش بیماران کرونایی، در حال جمع‌آوری یک‌سری اطلاعات میدانیه. اون می‌خواد بدونه که چه‌طور قبل از اینکه نتیجه‌ی آزمایش بیماران مشکوک به کرونا برسه، می‌تونه «پیش‌بینی» بکنه که مبتلا هستن یا نه.

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

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

نتیجه‌ی کار قلی در نمودار زیر مشخصه:

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

اما این پیش‌بینی دقیقاً چه‌طور اتفاق می‌افته؟

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

به‌نظر تو، این شخص احتمالاً مبتلا به کرونا هست یا نه؟

چه‌طور به این نتیجه رسیدی؟

قلی هم مثل تو، با خودش فکر می‌کنه که اگر نقاط اطراف این نقطه‌ی سبز، قرمز هستن پس احتمالاً باید خودش هم قرمز باشه! یا اگر بخوایم دقیق‌تر بگیم، کافیه که نزدیک‌ترین نقاط همسایه به این نقطه‌ی سبز رو درنظر بگیریم و بر اساس رنگ‌ اون‌ها، رنگ نقطه‌ی سبز رو تعیین کنیم. این دستِ خودمونه که چه تعداد نقطه‌ی همسایه رو معیار قرار بدیم؛ مثلا در نمودار زیر، سه تا از نزدیک‌ترین همسایه‌های نقطه‌ی سبزرنگ، کمی درشت‌تر نمایش داده شدن:

کنجکاوی: به‌نظرت چرا تعداد فردی از نقاط همسایه رو به‌عنوان معیار انتخاب کردیم؟

قلی سعی داره که روش خودش رو برای یک مراجعه‌کننده‌ی دیگه هم تست کنه.

این‌بار نقطه‌ی سبزِ مربوط به مراجعه‌کننده، در قسمت دیگه‌ای از نمودار قرار می‌گیره:

مشابه چیزی که قبلا گفتیم، سه تا از نزدیک‌ترین همسایه‌های نقطه‌ی سبزرنگ، توی نمودار زیر کمی درشت‌تر نمایش داده شدن:

در این‌جا هر سه نقطه، یک‌رنگ نیستن. پس چه‌طور پیش‌بینی کنیم؟

می‌تونیم پیش‌بینی رو بر اساس رنگی انجام بدیم که اکثر همسایه‌ها به اون رنگ هستن. بنابراین، حالا برامون روشن می‌شه که چرا تعداد همسایه‌ها رو، فرد در نظر گرفتیم؛ برای این‌که به حالت تساوی دچار نشیم.

سوالی که قلی از خودش پرسید یا همون مسئله‌ی «پیش بینی»، در حوزه‌ی علوم کامپیوتر هم به‌طور جدی مطرحه و یکی از همون کاراییه که کامپیوتر گاهی خیلی بهتر از انسان می‌تونه اون رو انجام بده و این کار رو هم با استفاده از مشاهده‌ی تعداد زیادی نمونه انجام می‌ده.

در مسئله‌ی پیش‌بینی، هدف ما اینه که بعد از مشاهده‌ی نمونه‌های زیادی که «نام» و یا در ادبیات علوم کامپیوتر «برچسب»شون رو می‌دونیم، نهایتاً یاد بگیریم که وقتی داده‌ی جدیدی اومد که برچسب نداشت، برچسبش رو پیش‌بینی کنیم. در این مثال، کرونا داشتن یا نداشتن برچسب نمونه‌های ما بود.

روشی که قلی برای حل این مسئله استفاده کرد، روشیه که خیلی وقت‌ها در حوزه‌ی علوم کامپیوتر استفاده می‌شه و به روش « k-نزدیک‌ترین همسایه» معروفه. یعنی برای پیش‌بینی داده‌ی‌ جدید، بعد از رسم نمودار، به k تا همسایه‌ای که از همه بهش نزدیک‌تر هستن، نگاه می‌کنیم. k در مسئله‌ای که حل کردیم، ۳بود و به‌طور کلی دست خود ماست که چه عددی براش انتخاب کنیم.

این مسئله هم در حیطه‌ی یادگیری ماشین قابل بحثه چراکه کامپیوتر با استفاده از این روش، واقعا می‌تونه داده‌ای رو که تابه‌حال ندیده، پیش‌بینی کنه و به‌نوعی یاد گرفته!

درخت تصمیم!

قلی از عملکرد خودش خیلی راضیه و حالا دنبال اینه که ایده‌های جدید رو برای حل مسئله‌ی «پیش‌بینی» امتحان کنه. این‌بار می‌خواد از ویژگی‌های متفاوت‌تری از افراد مراجعه‌کننده برای پیش‌بینی استفاده بکنه.

باز هم مثل دفعه‌ی قبل، جدولی از اطلاعات مراجعه کننده‌ها تهیه کرده:

به‌نظر می‌آد که روش قبلی (رسم نمودار و پیدا کردن نزدیک‌ترین همسایه‌ها) این‌جا نمی‌تونه کمکی بکنه.

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

کمی به جدول دقت کن! این ستون‌ها چه ویژگی خاصی دارن؟

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

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

قلی می‌خواد که تا حد ممکن سریع‌تر بتونه کرونا رو تشخیص بده. برای همین، ترتیب سوال پرسیدن براش مهمه! در واقع، به دنبال اینه که با همون اولین سوال، حداقل برای یکی از جواب‌های شخص، بتونه با اطمینان بگه که اون شخص کرونا داره یا نه. مثلا، اگر اولین سوالی که می‌پرسه این باشه که «بالای ۶۰سال است؟»، اگر شخص جواب مثبت بده، در بین اطلاعات جدول، هم افرادی داشتیم که به کرونا مبتلا بودن و هم افرادی داشتیم که مبتلا نبودن. پس نمی‌تونیم با قطعیت چیزی بگیم. اگر هم جواب شخص منفی باشه، باز هم بر اساس جدول هر دو گروه (مبتلا به کرونا و سالم) رو خواهیم داشت. پس این سوال، به‌عنوان سوال اول مناسب نیست.

با نگاه دقیق‌تر به جدول، قلی سوال مناسب رو پیدا می‌کنه: «تب دارد؟» در جواب به این سوال، اگر پاسخمون منفی باشه، تنها سه مراجعه‌کننده خواهیم داشت که دقیقاً هیچ‌کدوم از اون‌ها کرونا ندارن. پس احتمالاً این شرایط برای بقیه‌ی مراجعه‌کننده‌ها هم برقراره و اگر کسی تب نداشته باشه، کرونا نداره. به این ترتیب می‌تونیم بخشی از پیش‌بینی‌مون رو تنها با پرسیدن یک سوال ساده، انجام بدیم و این همون چیزی بود که قلی می‌خواست.

اما در بین مراجعه‌کننده‌ها، در مورد افرادی که تب داشتن، نمی‌تونیم با قطعیت بگیم که کرونا دارن یا نه؛ باید سوالات بیشتری بپرسیم. با یه نگاه دوباره به جدول، می‌بینیم که از بین افرادی که تب دارن، اون‌هایی که عارضه قبلی هم داشتن حتما کرونا دارن؛ یعنی مراجعه‌کننده‌های شماره‌ی ۲، ۳، ۴. پس به این ترتیب سوال بعدی این است: «عارضه قبلی دارد؟». اگر پاسخ به این سوال منفی باشه، باید سوال سوم رو بر اساس ویژگی آخری که داریم بپرسیم؛ یعنی «آیا بالای ۶۰سال است؟» که پاسخ مثبت به این سوال، نشون می‌ده که شخص کرونا داره و پاسخ منفی، نشون می‌ده که نداره.

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

برای این‌که این سوالات و جواب‌هاشون رو مرتب‌تر ببینیم، از یه ساختار درختی به‌شکل زیر استفاده می‌کنیم:

به چنین نموداری، یک «درخت تصمیم» گفته می‌شه. علت این نام‌گذاری اینه که مثل یک درخت که شاخه‌های متعددی داره، روی این نمودار، یک «ریشه» داریم‌که همون سوال اول ماست و جواب‌هایی که به این سوال داده می‌شه، هرکدوم شاخه‌ای هستن که یا ما رو به یک «زیردرخت» دیگه و یا یک «برگ» می‌رسونن. در مثال بالا، سوال «تب دارد؟» ریشه‌ی درخته و اگر جواب منفی باشه، به یک برگ میرسیم و اگر جواب مثبت باشه، به یک زیردرخت دیگر. برگ‌ها در درخت، همون نقاطی هستن که تصمیم نهایی رو مشخص می‌کنن.

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

ریشه‌ی این درخت، سوال اولیه که ما برای تشخیص «برچسب» مراجعه‌کنند‌ه‌ی جدید، ازش می‌پرسیم. در این‌جا این سوال «تب دارد؟» است. اگر پاسخ به این سوال خیر باشه، به زیردرخت سمت چپ و اگر بله باشه، به زیر درخت سمت راست می‌ریم و این مراحل رو انقدر تکرار میکنیم تا بالاخره به یک برگ از درخت برسیم. برگ‌ها در درخت تصمیم، همون «برچسب‌»هایی هستن که برای مراجعه‌کننده‌ جدید پیش‌بینی می‌کنیم.

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

دنیای واقعی

اون‌چه که تا الان بررسی کردیم، نمونه‌های ساده و ملموسی از روش‌های «یادگیری ماشین» بود. اما این حوزه، به همین روش‌ها محدود نشده بلکه محققین این حوزه، تلاش کردن تا از روش‌های متنوع‌ و پیچیده‌تری استفاده کنن و بتونن داده‌هایی مثل عکس، سیگنال‌های صوتی، متن و حتی ویدیو رو به‌عنوان ورودی، به کامپیوتر بدن و از کامپیوتر بخوان که پیش‌بینی‌هایی بر اساس این داده‌ها انجام بده. به‌عنوان مثال، این روزها با کمک همین روش‌ها، می‌شه حتی کارهایی مثل تشخیص ابتلا به بیماری کرونا رو هم با استفاده از تصاویر سی‌تی‌اسکن به کامپیوتر یاد بدیم و ازش برای چنین کارهایی کمک بگیریم. در بعضی از موارد، عملکرد کامپیوتر‌ها حتی از انسان هم جلو می‌زنه! باید ببینیم در آینده چه خبرهای جدیدی از این حوزه به گوشمون می‌رسه...!

یادآوری

داده‌‌هایی که در مسایل بالا استفاده کردیم، صرفا جهت آموزش و فهم بهتر مسئله‌ها تولید شدن و داده‌های حقیقی نیستن.


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

1- https://towardsdatascience.com/childrens-guide-to-machine-learning-b90171f86cef

2- https://medium.com/@bapreetam/knn-k-nearest-neighbors-algorithm-for-beginners-955003fb9c2a

3- https://dalelane.co.uk/blog/?p=3513