آموزش

درک رگرسیون لجستیک در پایتون

با رگرسیون لجستیک و ویژگی‌های پایه اون آشنا می‌شی و یاد می‌گیری چطور با استفاده از Scikit-learn در پایتون، یک مدل یادگیری ماشین برای یک کاربرد واقعی بسازی.

تاریخ انتشار:
2 شهریور 1405
پایتون
10 دقیقه
تحلیل داده
یادگیری ماشین
کاربرهای فینکا در چه شرکت‌هایی مشغول به کار هستند؟

تکنیک‌های طبقه‌بندی (Classification) بخش مهمی از کاربردهای یادگیری ماشین و داده‌کاوی رو تشکیل می‌دن. تقریبا ۷۰٪ از مسائل علم داده به طبقه‌بندی مربوط می‌شه. مسائل طبقه‌بندی متنوعی وجود داره، اما رگرسیون لجستیک (Logistic regression) یه روش رایج و کاربردی برای حل مسائل طبقه‌بندی باینری یا دوکلاسه (Binary classification) به حساب می‌یاد. یه دسته دیگه، طبقه‌بندی چندکلاسه‌ست (Multinomial classification) که با مسائلی سروکار داره که در اون‌ها متغیر هدف چند تا کلاس داره. مثلا مجموعه داده IRIS یه نمونه خیلی معروف از طبقه‌بندی چندکلاسه‌ست. دسته‌بندی مقالات، بلاگ‌ها و اسناد هم مثال‌های دیگه‌ای از این نوع هستن.

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

رگرسیون لجستیک یکی از ساده‌ترین و پرکاربردترین الگوریتم‌های یادگیری ماشین برای طبقه‌بندی دوکلاسه‌ست. پیاده‌سازیش راحته و می‌تونه به عنوان یه مدل پایه (Baseline) برای هر مسئله طبقه‌بندی باینری استفاده بشه. مفاهیم پایه‌ای این الگوریتم در یادگیری عمیق هم خیلی به درد می‌خوره. رگرسیون لجستیک در واقع رابطه بین یه متغیر وابسته باینری و متغیرهای مستقل رو توصیف و تخمین می‌زنه.

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

رگرسیون لجستیک چیه؟

رگرسیون لجستیک یه روش آماری برای پیش‌بینی کلاس‌های باینریه. در این روش متغیر هدف یا خروجی ذاتاً دوگانه‌ست؛ دوگانه یعنی کلاً دو تا کلاس بیشتر نمی‌تونه داشته باشه. مثلا می‌شه ازش برای تشخیص سرطان استفاده کرد. این روش در واقع احتمال رخ دادن یه رویداد رو محاسبه می‌کنه.

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

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

در این معادله، y متغیر وابسته‌ست و x1، x2 ... تا Xn متغیرهای توصیفی (مستقل) هستن.

تابع سیگموئید:

اعمال تابع سیگموئید روی رگرسیون خطی:

ویژگی‌های رگرسیون لجستیک:

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

رگرسیون خطی در مقابل رگرسیون لجستیک

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

تخمین حداکثر درست‌نمایی و روش حداقل مربعات

روش MLE یه متد برای بیشینه‌سازی درست‌نماییه، در حالی که OLS یه روش تقریبی برای کم کردن فاصله‌ست. بیشینه‌سازی تابع درست‌نمایی، پارامترهایی رو پیدا می‌کنه که بیشترین احتمال رو برای تولید داده‌های مشاهده‌شده دارن. از دیدگاه آماری، MLE میانگین و واریانس رو به عنوان پارامترهایی برای تعیین مقادیر یه مدل در نظر می‌گیره. از این پارامترها می‌شه برای پیش‌بینی داده‌های مورد نیاز در یه توزیع نرمال استفاده کرد.

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

تابع سیگموئید

تابع سیگموئید که بهش تابع لجستیک هم می‌گن، یه منحنی به شکل S بهمون می‌ده که می‌تونه هر عدد حقیقی رو بگیره و اون رو به یه مقدار بین ۰ و ۱ نگاشت کنه. اگه منحنی به سمت بی‌نهایت مثبت بره، y پیش‌بینی‌شده تبدیل به ۱ می‌شه، و اگه به سمت بی‌نهایت منفی بره، y پیش‌بینی‌شده صفر می‌شه. اگه خروجی تابع سیگموئید بیشتر از ۰.۵ باشه، می‌تونیم خروجی رو به عنوان ۱ یا بله (YES) دسته‌بندی کنیم و اگه کمتر از ۰.۵ باشه، می‌تونیم اون رو ۰ یا خیر (NO) در نظر بگیریم. مثلا، اگه خروجی ۰.۷۵ باشه، از نظر احتمالی می‌تونیم بگیم ۷۵ درصد شانس وجود داره که بیمار به سرطان مبتلا باشه.

انواع رگرسیون لجستیک

انواع رگرسیون لجستیک عبارتند از:

  • رگرسیون لجستیک باینری: متغیر هدف فقط دو تا خروجی ممکن داره؛ مثل اسپم یا غیر اسپم، سرطانی یا سالم.
  • رگرسیون لجستیک چندجمله‌ای: متغیر هدف سه یا چند تا دسته اسمی (بدون ترتیب) داره؛ مثل پیش‌بینی نوع نوشیدنی.
  • رگرسیون لجستیک ترتیبی: متغیر هدف سه یا چند تا دسته ترتیبی داره؛ مثل امتیاز رستوران یا یه محصول از ۱ تا ۵.

ساخت مدل در Scikit-learn

بیا یه مدل پیش‌بینی دیابت رو با استفاده از کلاسیفایر رگرسیون لجستیک بسازیم.

اول از همه، دیتاست Pima Indian Diabetes رو با استفاده از تابع read_csv از کتابخونه pandas لود می‌کنیم. این دیتاست رو می‌تونیم از اینجا بدست بیاریم

لود کردن داده‌ها

ما با پاس دادن col_names به تابع read_csv() در pandas، خوندن ستون‌ها رو ساده‌تر می‌کنیم.

خروجی
   pregnant  glucose  bp  skin  insulin   bmi  pedigree  age  label
0         1       85  66    29        0  26.6     0.351   31      0
1         8      183  64     0        0  23.3     0.672   32      1
2         1       89  66    23       94  28.1     0.167   21      0
3         0      137  40    35      168  43.1     2.288   33      1
4         5      116  74     0        0  25.6     0.201   30      0

انتخاب ویژگی‌ها

اینجا باید ستون‌های داده‌شده رو به دو نوع متغیر تقسیم کنی: متغیر وابسته (یا همون متغیر هدف) و متغیر مستقل (یا ویژگی‌ها).

تقسیم داده‌ها

برای اینکه عملکرد مدل رو بهتر درک کنی، استراتژی خوبیه که دیتاست رو به دو بخش آموزشی و آزمایشی تقسیم کنی.

بیا دیتاست رو با تابع train_test_split() تقسیم کنیم. برای این کار باید ۳ تا پارامتر بهش پاس بدی: features، target، و اندازه test_set. علاوه بر این، می‌تونی از random_state هم برای انتخاب تصادفی رکوردها استفاده کنی.

اینجا، دیتاست به نسبت ۷۵ به ۲۵ تقسیم می‌شه. یعنی ۷۵٪ از داده‌ها برای آموزش مدل و ۲۵٪ هم برای تست کردنش استفاده می‌شن.

توسعه مدل و پیش‌بینی

اول از همه، ماژول LogisticRegression رو ایمپورت کن و با استفاده از تابع LogisticRegression() و تنظیم یه مقدار برای random_state (برای تکرارپذیری نتایج)، یه شیء از کلاسیفایر رگرسیون لجستیک بساز.

بعدش، مدلت رو با استفاده از متد fit() روی داده‌های آموزشی برازش بده (آموزش بده) و در نهایت با متد predict() روی داده‌های تست، پیش‌بینی رو انجام بده. 

ارزیابی مدل با ماتریس درهم‌ریختگی

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

خروجی
array([[115,   8],
      [ 30,  39]])

اینجا می‌تونی ماتریس درهم‌ریختگی رو به شکل یه شیء آرایه‌ای ببینی. ابعاد این ماتریس ۲ در ۲ هست چون با یه مسئله طبقه‌بندی باینری سروکار داریم و کلاً دو تا کلاس ۰ و ۱ داریم. مقادیر روی قطر اصلی، نشون‌دهنده پیش‌بینی‌های درست هستن و مقادیر خارج از قطر، پیش‌بینی‌های اشتباه رو نشون می‌دن. در این خروجی، 115 و 39 پیش‌بینی‌های درستن، و 30 و 8 پیش‌بینی‌های نادرستن.

مصورسازی ماتریس درهم‌ریختگی با هیت‌مپ

بیا نتایج مدل رو در قالب یه ماتریس درهم‌ریختگی و با استفاده از matplotlib و seaborn مصورسازی کنیم.

در این بخش، ماتریس درهم‌ریختگی رو با یه هیت‌مپ نشون می‌دیم.

معیارهای ارزیابی ماتریس درهم‌ریختگی

بیا مدل رو با استفاده از گزارش طبقه‌بندی (classification_report) برای به دست آوردن معیارهایی مثل accuracy و precision  recall ارزیابی کنیم.

خروجی
                      precision  recall    f1-score   support
without diabetes       0.79      0.93      0.86       123
   with diabetes       0.83      0.57      0.67        69
        accuracy                           0.80       192
       macro avg       0.81      0.75      0.77       192
    weighted avg       0.81      0.80      0.79       192

خب، تو به نرخ طبقه‌بندی ۸۰٪ رسیدی که دقت خیلی خوبی به حساب می‌یاد.

Precision: منظور از Precision اینه که مدلت چقدر دقیقه و وقتی پیش‌بینی می‌کنه، چقدر احتمال داره درست بگه. در این مثال، وقتی مدل رگرسیون لجستیک پیش‌بینی کرده که بیماران دیابت دارن، در ۷۳٪ مواقع واقعاً دیابت داشتن.

Recall: اگه در مجموعه آزمایشی بیمارانی باشن که واقعاً دیابت داشته باشن، مدل رگرسیون لجستیک می‌تونه در ۵۷٪ مواقع اونا رو درست شناسایی کنه.

منحنی ROC

منحنی مشخصه عملکرد سیستم یا ROC نموداریه که نرخ مثبت واقعی رو در برابر نرخ مثبت کاذب نشون می‌ده. این منحنی در واقع توازن بین حساسیت و ویژگی رو به تصویر می‌کشه.

امتیاز AUC در این مثال ۰.۸۸ هست. امتیاز AUC برابر ۱ یعنی یه کلاسیفایر بی‌نقص داریم و ۰.۵ هم نشون‌دهنده یه کلاسیفایر کاملا بی‌ارزشه.

مزایا

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

معایب

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

جمع‌بندی

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

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

اگه دوست داری درباره رگرسیون لجستیک بیشتر بدونی، پیشنهاد می‌کنم دوره یادگیری ماشین با scikit-learn فینکا رو بگذرونی. همچنین می‌تونی با ثبت‌نام در مسیر شغلی دانشمند یادگیری ماشین با پایتون، مسیرت رو برای تبدیل شدن به یه مهندس یادگیری ماشین شروع کنی.

اشتراک‌گذاری
فهرست مطالب
  • رگرسیون لجستیک چیه؟
  • رگرسیون خطی در مقابل رگرسیون لجستیک
  • تخمین حداکثر درست‌نمایی و روش حداقل مربعات
  • انواع رگرسیون لجستیک
  • ساخت مدل در Scikit-learn
  • ارزیابی مدل با ماتریس درهم‌ریختگی
  • مزایا
  • معایب
  • جمع‌بندی

دریافت اپلیکیشن فینکا

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