
با درود فراوان، در این پست و چند پست بعدی هدف ما پیاده سازی سه الگوریتم 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 از کریستوفر بیشاپ مراجعه کنید. به طور کلی به دو روش مدل های رگرسیون خطی استفاده میشوند:
- حل کردن یک معادله و بدست آوردن پارامتر های مدل
- استفاده از یک الگوریتم بهینه سازی برای بدست آوردن پارامتر های مدل
در ادامه همانطور که گفته شد قصد ما حالت اول یعنی حل کردن یک معادله و بدست آوردن پارامتر های مدل بصورت مستقیم میباشد.
Closed Form Linear Regression
در طراحی و پیاده سازی الگوریتم Linear Regression به روش Closed Form اگر ورودی های X ما به سایز n باشند و یک متغیر هدف نیز داشته باشیم آنوقت میتوان معادله یک مدل رگرسیون خطی را به صورت زیر نمایش داد.

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

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

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

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

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

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

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

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

این تابع برای محاسبه Mean Square Error بر روی مقادیر پیش بینی شده و مقادیر واقعی استفاده میشود. ورودی اول مقدار های پیش بینی شده و ورودی دوم مقدار های واقعی هستند.
نتیجه نهایی
بعد از انجام محاسبات، بدست آوردن پارامتر ها و اجرای مدل بر روی داده های Train نمودار ها و نتایج زیر حاصل گردید.

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

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

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