پیشبینی دنیای واقعی با توابع ریاضی( رگرسیون )

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

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



ولی بیاید یکم بیشتر عمقی وارد رگرسیون بشیم.
تعداد رگرسیون ها زیاده ولی چند مدل اولیه اش میشه به این موارد اشاره کرد:

linear regression
lasso regression
ridge regression
logistic regression


باید توجه داشت که منظور از رابطه خطی در مدل رگرسیون، وجود رابطه خطی بین ضرایب است نه بین متغیرهای مستقل. برای مثال این مدل y=β0+β1x2+ϵ را نیز می‌توان مدل خطی در نظر گرفت در حالیکه مدل y=β0x^β1+ϵ دیگر خطی نیست و به مدل نمایی شهرت دارد.

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

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

قبل توضیح بیشتر چند شرط اولیه برای رگرسیون خطی رو بگیم :

-نباید داده پرت(outliers) داشته باشیم.
-باید تمامی داده های موجود مستقل باشند.یعنی وقوع هیچکدوم تاثیری روی دیگری نداشته باشه.
-باید دارای توزیع نرمال باشیم.
-متغیر های مستقل از هم مستقل باشند.

بسته به تعداد متغیر های تاثیر گذار تابع ما هم طولانی تر میشه و طبیعتا تو نمودار دوبعدی نمیشه نشونش داد.(متاسفانه کامپیوتر تو این زمینه ها خیلی از ما بهتره :| )

یه سری کلمه هم خیلی تو رگرسیون تکرار میشه مثل

مقدار R-Squeared : یک مقدار اماری هست که میگه داده چقدر با مقدار پیشبینی شده
در تابع رگرسیون فاصله دارد. مقدارش از صفر تا یک هست. یعنی مثلا اگر ۰.۳۲ باشه یعنی فقط ۳۲درصد فروش توسط این ویژگی ها و این تابع توضیف میشه.


مقدار mean absolute error : MAE : نسبت کل خطاها به تعداد کل داده ها. که خب هرچی کمتر باشه بهتره.


مقدار MSE : mean squared error : تفریق مقدار پیشبینی شده از مقدار واقعی به توان دو. تقسیم بر تعداد کل داده ها.
علت اینکه به توان دو میرسونیم اینه که حاصل تفریق گاهی اوقات مثبت میشه و گاهی اوقات منفی. برای خلاص شدن از این خنثی کردن همدیگه به توان دو میرسونیم.


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

برای خلاص شدن از این مشکل چند راه هست. اما دوتا از موارد میشه به دو الگوریتم lasso regression , ridge regression اشاره کرد.این الگوریتما فرقی که با رگرسیون خطی ساده دارن اینه که تو این الگوریتم ها متغیر های مستقلی که تاثیر کمتری دارن تو مقدار نهایی رو سعی میکنه یا درنظر نگیره یا تاثیرشونو به صفر برسونه


توضیح رگرسیون منطقی هم اینجاست

توضیح دقیق و عمیق ریاضیات این الگوریتم و خود کد هاشونو لینک میزارم میتونید مطالعه کنید:

یک نمونه کد از کارای آموزشی که مطالعه کردم و جمعشون کردم تو گیتاب

آموزش lasso , ridge

آموزش lasso, ridge بخش دوم

توضیحات ریاضیات رگرسیون(۱۰ قسمتی)
آموزش lasso, ridge بخش سوم