پیاده سازی یک مدل Closed Form Linear Regression از پایه با پایتون

رگرسیون خطی

با درود فراوان، در این پست و چند پست بعدی هدف ما پیاده سازی سه الگوریتم Closed Form Linear Regression، Stochastic Gradient Descent Linear Regression و Logistic Regression می باشد. در این پست یعنی پست اول ما به طور مختصر به تشریح رگرسیون خطی Closed Form میپردازیم و در ادامه آن را پیاده سازی میکنیم.

رگرسیون در مبحث یادگیری ماشین، یک الگوریتم نظارت شده به حساب می آید یعنی داده ها لیبل و یا خروجی مشخص دارند. هدف در این الگوریتم مدل کردن ارتباط بین یک متغیر وابسته مانند y و متغیر های مستقل یا همان ورودی ها مانند بردار X است. در رگرسیون ما یک مقدار حقیقی و پیوسته را برای ورودی های داده شده پیش بینی میکنیم، مانند پیش بینی قیمت سهام، و با مسائل Classification که برای داده های ورودی یک لیبل تعیین میکنیم، مثلا قیمت یک سهام بالا میرود یا پایین، تفاوت دارد.

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

شاید اسم رگرسیون را قبلا در درس های آمار، یادگیری ماشین و سایر درس های مرتبط شنیده باشید. برای یاد گیری بیشتر این الگوریتم میتوانید به کتاب هایی نظیر Elements of Statistical Learning یا کتاب Pattern Recognition and Machine Learning از کریستوفر بیشاپ مراجعه کنید. به طور کلی به دو روش مدل های رگرسیون خطی استفاده میشوند:

  1. حل کردن یک معادله و بدست آوردن پارامتر های مدل
  2. استفاده از یک الگوریتم بهینه سازی برای بدست آوردن پارامتر های مدل

در ادامه همانطور که گفته شد قصد ما حالت اول یعنی حل کردن یک معادله و بدست آوردن پارامتر های مدل بصورت مستقیم میباشد.

Closed Form Linear Regression

در طراحی و پیاده سازی الگوریتم Linear Regression به روش Closed Form اگر ورودی های X ما به سایز n باشند و یک متغیر هدف نیز داشته باشیم آنوقت میتوان معادله یک مدل رگرسیون خطی را به صورت زیر نمایش داد.

معادله خطی رگرسیون

که Y_i بیانگر متغیر وابسته، X_i_1  نشانگر متغیر های مستقل  وW_0  و W_1  وزن و یا پارامتر های رگرسیون هستند. با توجه به معادله بالا ما میتوانیم پارامتر های رگرسیون را با استفاده از فرمول زیر محاسبه کنیم.

محاسبه وزن های معادله خطی

در فرمول بالا X'  ترانهاده ماتریس X و (X'X)^-^1 وارون نتیجه X'X است.بعد از بدست آوردن پارامتر ها برای انجام پیش بینی بر روی ورودی های جدید از فرمول زیر استفاده میشود.

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

پیاده سازی

در این پیاده سازی ما از زبان پایتون و کتاب خانه های Numpy، Pandas و Matplotlib برای خواندن فایل ها، انجام پیش پردازش ها و محاسبات و رسم نمودار ها استفاده شده است. داده هایی که این تمرین استفاده میشود یکسری داده های مصنوعی می باشد که تنها یک متغیر مستقل دارد یعنی بردار x ما تک ستونه است. در ادامه به تشریح توابع نوشته شده که مربوط به بخش اصلی الگوریتم هستند میپردازیم. این کد ها را متاسفانه به دلیل کمبود وقت خیلی تمیز نزدم، بهبود کد به عهده خودتون 🙂

load_data

Load Data Function

این تابع دو فایل CSV داده های Train و Test را بوسیله کتاب خانه Pandas درون برنامه وارد و بر میگرداند. آدرس فایل ها در ورودی تابع pd.read_csv وارد نمایید.

Normalization

Normalization Function

این تابع مقدار متغیر های مستقل را بین صفر و یک نرمال میکند.

prepare_data

Data Preparation Function

این تابع متغیر های مستقل و غیر مستقل را از برای داده های Train و Test جدا کرده و بر میگرداند.

learn_model

Model Learning Function

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

Predict

Prediction Function

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

Mse

Mean Square Error Function

این تابع برای محاسبه Mean Square Error بر روی مقادیر پیش بینی شده و مقادیر واقعی استفاده میشود. ورودی اول مقدار های پیش بینی شده و ورودی دوم مقدار های واقعی هستند.

نتیجه نهایی

بعد از انجام محاسبات، بدست آوردن پارامتر ها و اجرای مدل بر روی داده های Train نمودار ها و نتایج زیر حاصل گردید.

نمودار زیر خط رگرسیون روی داده های Test می باشد.

Regression Line on Test Data

و این نمودار نیز خط رگرسیون روی داده های Train می باشد.

Regression Line on Train Data

وزن یاد گرفته شده نیز مقدار زیر میباشد.

100.15481913

برای دانلود فایل کد ها و دیتاست ها اینجا را کلیک کنید. برای رفتن به آموزش بعدی نیز اینجا را کلیک کنید.

امیدوارم این آموزش برای شما مفید بوده باشد. پیشنهاد میکنم که در تمرین ها و پروژه های درسی این کد ها را کپی نکنید چون انسان های زرنگ دیگری نیز وجود دارند.

خوب و خوش باشید.

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

آدرس ایمیل شما نمایش داده نخواهد شد.

فوتر سایت

سایدبار کشویی

بایگانی‌ها

دسته‌ها