پوریا اعظمی
پوریا اعظمی
خواندن ۵ دقیقه·۲ سال پیش

رگرسیون خطی (Linear regression) - بخش اول

اولین الگوریتم ماشین لرنینگ که میخوایم با هم برسی کنیم linear regression هست. اگر پست قبلی من رو خونده باشیم میدونید که مسائل regression، مسائلی هستند که ما یک سری داده داریم (x) و این داده ها یک سری label دارن (y) که label ها مقادیر پیوسته هستند.

تعریف مسئله

یکی از کلاسیک ترین مسال های این مسئله، تخمین قیمت خونه بر اساس متراژ اون هست. یعنی x اینجا قیمت خونس و y قیمت اون. برای ادامه ی کار از داده های این لینک استفاده میکنیم. (تو این پست فقط با خود الگوریتم کار داریم و تو پست های بعدی میریم سراغ کدنویسی)

تو مرحله ی اول بیاید و داده ها رو تو یک نمودار نقطه ای نمایش بدیم، به این صورت که محور x ها متراژ خونه و محور y ها قیمت خونه رو نشون بده:

هدف ما تو این مسئله اینه که بیایم و بر اساس داده هایی که از خونه ها داریم، یک الگوریتم بسازیم که اگر در آینده خواستید قیمت یک خونه ی جدید رو بر اساس متراژ اون تخمین بزنیم بتونیم از اون الگوریتم استفاده کنیم.

تابع h یا تابع فرضیه (hypothesis function):

خروجی الگوریتم ما یک مدل برای همین کار میشه، در واقع بعد از اجرای الگوریتم، به ما یک تابع به عنوان خروجی میده (که بهش میگیم h) و اگر خواستیم قیمت یک خونه ی جدید رو تخمین بزنیم، میایم و اون داده ی جدید رو میدیم به تابع h، خروجی تابع h هرچی شد، همون میشه تخمین ما از قیمت خونه.

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

خب بیاید و بدون داشتن تابع h، خودمون سعی کنیم اول رسمش کنیم.

اگر خوب داده ها رو نگا کنید، میتونیم بگیم یه خطی وجود داره که تقریبا میشه گفت از داده های ما رد میشه:

درسته که این خط از خیلی از نقطه ها رد نمیشه ولی فعلا همین قدری که داره از نقاط رد میشه هم برای ما کافیه (تو پست های بعدی درباره ی اینکه چه جوری میتونیم تابع بهتری پیدا کنیم توضیح میدم).

پس اگر بیایم و خطی پیدا کنیم که تا جایی که میشه از نقاط ما رد میشه، میتونیم اون رو به عنوان تابع h در نظر بگیریم و هر وقت خواستیم قیمت یک خونه ی جدید رو تخمین بزنیم از این تابع استفاده کنیم. یعنی در نهایت ما باید یک خط پیدا کنیم!

معادله ی تابع h برای linear regression:

معادله ی یک خط رو میشه با شیب و عرض از مبدا اون نوشت، در نتیجه داریم:

اگر ما بتونیم مقدار m و d رو جوری پیدا کنیم که این خط از داده های ما رد بشه، تابع h رو درست کردیم. قبل از اینکه ادامه بدیم بیاید به جای m و d از حرف یونانی تتا برای نشون دادن پارامتر ها استفاده کنیم. (این جوری استاندارد تره). پس تابع h اینجوری میشه:

خب تا اینجای کار ما تونستیم یه تعریف ریاضیاتی برای چیزی که دنبالشیم ارائه بدیم.

تابع خطا، تابع J یا error function:

سوال بعدی اینه که چه از نظر ریاضیاتی چه خطی، خط خوبیه؟ به طور شهودی میتونیم بگیم خطی که از داده های ما رد بشه خط خوبیه. ولی خب دو تا مشکل هست؛ اول اینکه ممکنه هیچ خطی نمونه از همه ی داده ها رد بشه (که اتفاقا برای داده هایی که داریم هم همینجوریه) و دوم اینکه چه جوری رد شدن از داده ها رو به صورت ریاضیاتی بیان کنیم؟

ما انتظار داریم تابع h از نقاطی که داریم رد بشه، پس مثلا اگر یک نقطه مثل (x,y) رو در نظر بگیریم، مقدار تابع h تو x باید y باشه. طبیعیه که هرچی تابع h از این نقطه دور تر بشه، اختلاف اون با y هم بیشتر میشه. پس اگر تابع h از یک نقطه ای رد بشه (یا از نزدیک اون رد بشه) اختلاف h با y اون نقطه کم میشه و اگر رد نشه این اختلاف زیاد میشه.

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

در نهایت هدف ما میشه: پیدا کردن h ای که میانگین فاصله ی اون تا نقاطی که داریم کم بشه.

اگر بخوایم این هدف رو به صورت ریاضیاتی بیان کنیم، میایم و یک تابع به نام J تعریف میکنیم که مقدار اون برای یک خط h میشه میانگین اختلاف h با نقاط. تعریف دقیق تابع J میشه:

j
j

تعریف دقیق این تابع به جای میانگین از نصف میانگین استفاده میکنه (که عملا فرق خاصی ایجاد نمیکنه چون ما دنبال کمترین مقدار J نیستیم، دنبال اون hای هستیم که J رو کمینه کنه، این ضریب 1/2 که اینجا اضافه شده در ادامه به ساده تر شدن معادلات کمک میکنه). همین طور ایجا m تعداد نقطه هائیه که داریم.

تو این پست ما تونستیم یک مسئله ی ماشین لرنینگی رو به صورت ریاضیاتی بیان کنیم. تو پست بعدی میریم سراغ حل این مسئله.

آخرین موضوع قبل از تموم کردن این پست اینکه واقعا این معادلات انقدر شهودی به دست نمیان و در واقع پشت این معادلات دلایل آماری زیادی وجود داره. اما از اونجایی که فرض کردم آدمایی که قراره این پست ها رو بخونن کامپیوتری هستن و کامپیوتری ها هم معمولا از این مدل ریاضیات خوششون نمیاد، فعلا وارد این مباحث نمیشیم. بعد از جمع بندی این الگوریتم چند تا پست درباره ی این مدل ریاضیات linear regression میذارم :)

linear regressionتابع h
شاید از این پست‌ها خوشتان بیاید