رگرسیون خطی برای یادگیری ماشین

رگرسیون خطی برای یادگیری ماشین

رگرسیون خطی شاید یکی از شناخته شده ترین الگوریتم ها در آمار و یادگیری ماشین باشه که به خوبی هم درک و فهمیده شده.

تو این مطلب، الگوریتم رگرسیون خطی، نحوه کارکرد اون و اینکه چطور می‌تونید به بهترین شکل از اون در پروژه ‌های یادگیری ماشینی خودتون استفاده کنید، رو می فهمید. این مطلب شامل این موارد هستش:

  • چرا رگرسیون خطی هم به آمار و هم به یادگیری ماشین تعلق داره.
  • اسم های زیادی که رگرسیون خطی با اونها شناخته میشه.
  • الگوریتم های بازنمایی و یادگیری که برای ایجاد یک مدل رگرسیون خطی استفاده میشن.
  • چطور می تونید داده های خودتون رو موقع مدل سازی با استفاده از رگرسیون خطی به بهترین شکل آماده کنید.

برای درک رگرسیون خطی نیازی به بلد بودن آمار یا جبر خطی ندارید. این یک مقدمه ساده سطح بالا برای این تکنیک هستش که به شما زمینه کافی میده تا بتونید از اون به طور موثر در حل مشکلاتتون استفاده کنید.

آیا رگرسیون خطی مربوط به علم آمار نیست؟

قبل از اینکه به جزئیات رگرسیون خطی بپردازیم، ممکنه از خودتون بپرسید که چرا ما به این الگوریتم توجه داریم.

آیا این یک تکنیک مربوط به علم آمار نیست؟

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

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

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

اسامی زیاد رگرسیون خطی

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

دلیلش این مساله اینه که رگرسیون خطی مدتهای طولانی (بیش از 200 سال) وجود داشته، از هر زاویه ممکن بررسی شده و اغلب از هر کدوم از این زوایای ممکن اسم جدید و متفاوتی بهش داده شده.

رگرسیون خطی یک مدل خطی هستش، به عنوان مثال، مدلی که یک رابطه خطی بین متغیرهای ورودی (x) و متغیر خروجی واحد (y) رو فرض می کنه. به طور خاص تر، y رو میشه از ترکیب خطی متغیرهای ورودی (x) محاسبه کرد.

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

برای آمادگی یادگیری یا آموزش معادله رگرسیون خطی از داده ها می تونیم از تکنیک های مختلفی استفاده کنیم که رایج ترین اونها “حداقل مربعات معمولی” هستش. بنابراین این رایجه که به مدلی که به این روش تهیه شده با اسم رگرسیون خطی حداقل مربعات معمولی یا فقط رگرسیون حداقل مربعات اشاره کنیم.

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

بازنمایی مدل رگرسیون خطی

رگرسیون خطی یک مدل جذابه، چون بازنمایی اون خیلی ساده س.

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

معادله خطی یک فاکتور مقیاس رو به هر مقدار ورودی یا ستون اختصاص میده که ضریب گفته میشه و با حرف یونانی بزرگ بتا (B) نمایش داده میشه. یک ضریب دیگه هم اضافه میشه که به این خط درجه آزادی بیشتری میده، (مثلا حرکت به سمت بالا و پایین در یک نمودار دو بعدی) و اغلب به اون ضریب تلاقی یا بایاس میگن.

به عنوان مثال، در یک مسئله رگرسیون ساده (یک تک x و یک تک y)، شکل مدل به این صورت خواهد بود:

y = B0 + B1*x

در ابعاد بالاتر وقتی بیشتر از یک ورودی (x) داریم، این خط رو یک صفحه یا هایپر صفحه میگیم. بنابراین، بازنمایی شکل معادله و مقادیر ویژه مورد استفاده برای ضرایب هستش (به عنوان مثال B0 و B1 در مثال بالا).

معمولا صحبت در مورد پیچیدگی یک مدل رگرسیون مثل رگرسیون خطی رایجه. این به تعداد ضرایب استفاده شده در مدل اشاره داره.

وقتی که یک ضریب صفر میشه، اثر متغیر ورودی بر مدل و در نتیجه، از پیش بینی حاصل از مدل (0 * x = 0) به طور موثر حذف میشه. این مساله کاملا قابل فهمه، البته اگه به روش ‌های منظم‌ سازی نگاه کنید که الگوریتم یادگیری رو برای کاهش پیچیدگی مدل ‌های رگرسیون با اعمال فشار بر اندازه مطلق ضرایب تغییر میدن و بعضی رو به صفر می رسونن.

حالا که بازنمایی مورد استفاده برای مدل رگرسیون خطی رو فهمیدیم، بیاید راه ‌هایی رو بررسی کنیم که بتونیم این بازنمایی رو از طریق داده‌ها یاد بگیریم.

آموزش مدل رگرسیون خطی

یادگیری مدل رگرسیون خطی به معنای تخمین مقادیر ضرایب مورد استفاده در بازنمایی با داده هایی هستش که در دسترس داریم.

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

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

  • رگرسیون خطی ساده

با رگرسیون خطی ساده و در صورت وجود یک ورودی، برای برآورد ضرایب می‌ تونیم از آمار استفاده کنیم.

در این حالت باید ویژگی های آماری رو از داده هایی مثل میانگین، انحراف استاندارد، همبستگی و کوواریانس محاسبه کنید. برای پیمایش و محاسبه آمار، همه داده ها باید در دسترس باشن.

این به عنوان یک تمرین در اکسل سرگرم کننده­س، اما در عمل واقعا مفید نیست.

  • حداقل مربعات معمولی

وقتی بیشتر از یک ورودی داریم، برای تخمین مقادیر ضرایب می ‌تونیم از حداقل مربعات معمولی استفاده کنیم.

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

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

اجرای روش حداقل مربعات معمولی غیرعادیه، مگه اینکه به عنوان یک تمرین در جبر خطی باشه. احتمال بیشتری وجود داره که یک رویه رو در یک مجموعه جبر خطی فراخوانی کنید. این روش برای محاسبه سریع هستش.

  • گرادیان کاهشی

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

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

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

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

  • تعادلگر

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

دو نمونه رایج از روش های تعادلگر برای رگرسیون خطی اینها هستن:

  • رگرسیون لاسو: که در اون حداقل مربعات معمولی اصلاح میشه تا مجموع مطلق ضرایب رو هم به حداقل برسونه (تعادلگر L1).
  • رگرسیون ریج: که در اون حداقل مربعات معمولی اصلاح میشه تا مجموع مطلق مجذور ضرایب رو هم به حداقل برسونه (تعادلگر L2).

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

پیش بینی کردن با رگرسیون خطی

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

بیاید این رو با یک مثال توضیح بدیم. تصور کنید می خوایم وزن (y) رو از روی قد (x) پیش بینی کنیم. بازنمایی مدل رگرسیون خطی ما برای این مساله به صورت زیر خواهد بود:

y = B0 + B1 * x1

یا

weight =B0 +B1 * height

که در اون B0 ضریب بایاس و B1 ضریب ستون ارتفاع هستش. ما از یک تکنیک یادگیری برای پیدا کردن مجموعه خوبی از مقادیر ضرایب استفاده می کنیم. بعد از این کار، می تونیم مقادیر مختلف قد رو برای پیش بینی وزن وارد معادله کنیم.

به عنوان مثال، از B0 = 0.1 و B1 = 0.5 استفاده می کنیم. بیاید اینها رو وارد معادله کنیم و وزن (به کیلوگرم) یک فرد با قد 182 سانتی متر رو محاسبه کنیم.

وزن = 0.1 + 0.5 * 182

وزن = 91.1

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

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

آماده سازی داده ها برای رگرسیون خطی

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

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

آماده سازی های مختلف داده های خودتون رو با استفاده از این روش های اکتشافی امتحان کنید و ببینید چه چیزی برای مساله شما بهترین کارکرد رو داره.  

  • فرض خطی. رگرسیون خطی فرض می کنه که رابطه بین ورودی و خروجی شما خطیه. این هیچ چیز دیگه ای رو پشتیبانی نمی کنه. این ممکنه بدیهی باشه، اما خوبه که زمانی که ویژگی های زیادی دارید اون رو به خاطر بسپارید. ممکنه لازم باشه برای خطی کردن رابطه داده ها رو تبدیل کنید (به عنوان مثال، تبدیل لگاریتم برای یک رابطه نمایی).
  • حذف نویز. رگرسیون خطی فرض می کنه که متغیرهای ورودی و خروجی شما نویز ندارن. استفاده از عملیات پاکسازی داده‌ها رو در نظر بگیرید که به شما امکان میده سیگنال موجود در داده‌ها رو بهتر در معرض دید و شفاف‌ سازی قرار بدید. این برای متغیر خروجی خیلی مهمه و اگر امکانش وجود داشته باشه، می تونید مقادیر پرت رو در متغیر خروجی (y) حذف کنید.
  • هم راستایی رو حذف کنید. وقتی که متغیرهای ورودی با همبستگی بالایی داشته باشید، رگرسیون خطی روی داده‌های شما بیشتر از اندازه منطبق میشه. محاسبه همبستگی های زوجی برای داده های ورودی و حذف بیشترین همبستگی ها رو در نظر بگیرید.
  • توزیع های گاوسی. اگر متغیرهای ورودی و خروجی شما توزیع گاوسی داشته باشن، رگرسیون خطی پیش‌ بینی‌ های قابل اعتمادتری رو انجام میدن. شما ممکنه با استفاده از تبدیل ‌ها (مثلا log یا BoxCox) از متغیرهاتون مزایایی کسب کنید تا توزیع آن ‌ها بیشتر شکل گاوسی داشته باشن.
  • تغییر مقیاس ورودی ها: رگرسیون خطی غالبا پیش ‌بینی ‌های قابل اعتمادتری رو انجام میده، اگر متغیرهای ورودی رو با استفاده از استانداردسازی یا عادی‌سازی مجدد مقیاس‌بندی کنید.

ساخت مدل رگرسیون خطی از ابتدا

فرمول یک رگرسیون خطی ساده (با یک متغیر مستقل) به این صورته:

که

  • y متغیر وابسته (هدف)
  •  x متغیر مستقل (ویژگی)
  • m شیب خط (که وزن یا ضریب هم گفته میشه)،
  • b مختصات y هستش.

برای پیدا کردن مقادیر m و b که خطا رو به حداقل میرسونن، می تونیم از روش حداقل مربعات معمولی استفاده کنیم. فرمول های m و b بر حسب نقاط داده از این قراره: 

در اینجا پیاده سازی Python از فرمول های بالا رو داریم. ما از کتابخانه Numpy برای ایجاد یک الگوریتم آموزشی، تابع پیش بینی، تابع RMSE و داده های نمونه استفاده می کنیم.

1. با استفاده از توابع Numpy معادله رو به پایتون ترجمه می کنیم و m و b رو محاسبه می کنیم.

2. ما یک پیش بینی و تابع RMSE برای تجزیه و تحلیل عملکرد مدل هم ایجاد می کنیم.

وقتی که اصول Numpy رو بفهمیم، ترجمه معادلات ریاضی به کد پایتون آسان میشه.

خروجی:

مقادیر پیش‌بینی‌شده ما با Y مطابقت داره و RMSE ما پایین هستش.

رگرسیون خطی برای یادگیری ماشین

خلاصه

در این مطلب الگوریتم رگرسیون خطی برای یادگیری ماشین رو کشف کردید.

شما زمینه های زیادی مثل این موارد رو یاد گرفتید:

  • اسامی رایجی که در زمان توصیف مدل های رگرسیون خطی استفاده میشه.
  • بازنمایی استفاده شده توسط مدل.
  • برای برآورد ضرایب در مدل از الگوریتم های یادگیری استفاده میشه.
  • قواعد کلی که باید هنگام تهیه داده ها برای استفاده با رگرسیون خطی در نظر گرفته بشه.

رگرسیون خطی رو امتحان کنید و با اون راحت باشید.

آیا در مورد رگرسیون خطی یا در مورد این پست سوالی دارید؟

کامنت بزارید و بپرسید، تمام تلاشم رو میکنم تا جواب بدم.

دیدگاه‌ خود را بنویسید

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