رگرسیون لجستیک: راهنمای جامع با پایتون
رگرسیون لجستیک یکی از پرکاربردترین الگوریتمهای یادگیری ماشین در دسته بندی مسائل است. این الگوریتم برای پیشبینی احتمال وقوع یک رویداد باینری (دو حالت) یا چند دستهای استفاده میشود. در این مقاله، به بررسی عمیق رگرسیون لجستیک، مفاهیم اساسی، کاربردها و پیادهسازی آن با استفاده از پایتون خواهیم پرداخت.
مقدمه و مفاهیم اساسی
در بسیاری از مسائل دنیای واقعی، هدف پیشبینی یک متغیر وابسته (Dependent Variable) بر اساس یک یا چند متغیر مستقل (Independent Variables) است. زمانی که متغیر وابسته پیوسته باشد، میتوان از رگرسیون خطی استفاده کرد. اما زمانی که متغیر وابسته دستهای باشد (مثلاً بله/خیر، اسپم/غیر اسپم، بیمار/سالم)، رگرسیون لجستیک گزینه مناسبی است.
رگرسیون لجستیک به جای پیشبینی مقدار دقیق متغیر وابسته، احتمال تعلق یک نمونه به یک دسته خاص را پیشبینی میکند. این احتمال بین 0 و 1 قرار دارد. برای این منظور، از تابع لجستیک (Sigmoid Function) استفاده میشود. تابع لجستیک به صورت زیر تعریف میشود:
σ(z) = 1 / (1 + e-z)
در این فرمول، z یک ترکیب خطی از متغیرهای مستقل است: z = β0 + β1x1 + β2x2 + … + βnxn که در آن βi ضرایب رگرسیون و xi متغیرهای مستقل هستند.
تابع لجستیک، مقدار z را به یک احتمال بین 0 و 1 نگاشت میکند. اگر احتمال پیشبینی شده بیشتر از یک آستانه مشخص (معمولاً 0.5) باشد، نمونه به یک دسته خاص تعلق میگیرد، در غیر این صورت به دسته دیگر تعلق میگیرد.
انواع رگرسیون لجستیک
رگرسیون لجستیک به دو نوع اصلی تقسیم میشود:
- رگرسیون لجستیک باینری (Binary Logistic Regression): در این نوع، متغیر وابسته فقط دو حالت دارد.
- رگرسیون لجستیک چند دستهای (Multinomial Logistic Regression): در این نوع، متغیر وابسته بیش از دو حالت دارد.
رگرسیون لجستیک چند دستهای، در واقع تعمیم رگرسیون لجستیک باینری است و از روشهای مختلفی برای پیشبینی احتمال تعلق یک نمونه به هر یک از دستهها استفاده میکند.
پیادهسازی رگرسیون لجستیک با پایتون
برای پیادهسازی رگرسیون لجستیک در پایتون، میتوان از کتابخانههای مختلفی مانند Scikit-learn استفاده کرد. در اینجا یک مثال ساده از پیادهسازی رگرسیون لجستیک باینری با استفاده از Scikit-learn آورده شده است:
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import pandas as pd
# بارگذاری دادهها
data = pd.read_csv('data.csv')
# جدا کردن ویژگیها و برچسبها
X = data[['feature1', 'feature2']]
y = data['target']
# تقسیم دادهها به مجموعههای آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# ایجاد مدل رگرسیون لجستیک
model = LogisticRegression()
# آموزش مدل
model.fit(X_train, y_train)
# پیشبینی بر روی مجموعه تست
y_pred = model.predict(X_test)
# ارزیابی مدل
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
در این کد، ابتدا دادهها از یک فایل CSV بارگذاری میشوند. سپس ویژگیها (X) و برچسبها (y) جدا میشوند. دادهها به مجموعههای آموزش و تست تقسیم میشوند. یک مدل رگرسیون لجستیک ایجاد میشود و با استفاده از مجموعه آموزش، آموزش داده میشود. در نهایت، پیشبینیها بر روی مجموعه تست انجام میشود و دقت مدل ارزیابی میشود.
ارزیابی مدل رگرسیون لجستیک
برای ارزیابی عملکرد مدل رگرسیون لجستیک، میتوان از معیارهای مختلفی استفاده کرد. برخی از مهمترین این معیارها عبارتند از:
- دقت (Accuracy): نسبت پیشبینیهای صحیح به کل پیشبینیها.
- صحت (Precision): نسبت پیشبینیهای مثبت صحیح به کل پیشبینیهای مثبت.
- بازخوانی (Recall): نسبت پیشبینیهای مثبت صحیح به کل نمونههای مثبت واقعی.
- F1-score: میانگین هارمونیک صحت و بازخوانی.
- منحنی ROC و AUC: منحنی ROC (Receiver Operating Characteristic) یک نمودار است که عملکرد مدل را در آستانههای مختلف نشان میدهد. AUC (Area Under the Curve) مساحت زیر منحنی ROC است و نشاندهنده توانایی مدل در تمایز بین دستهها است.
- ماتریس درهمریختگی (Confusion Matrix): جدولی که تعداد پیشبینیهای صحیح و نادرست را برای هر دسته نشان میدهد.
پیشپردازش دادهها و مهندسی ویژگی
پیشپردازش دادهها و مهندسی ویژگی نقش مهمی در بهبود عملکرد مدل رگرسیون لجستیک دارند. برخی از تکنیکهای رایج پیشپردازش دادهها عبارتند از:
- مقیاسبندی ویژگیها (Feature Scaling): مقیاسبندی ویژگیها به منظور جلوگیری از تأثیر بیش از حد ویژگیهایی با مقادیر بزرگتر بر روی مدل.
- کدگذاری متغیرهای دستهای (Categorical Feature Encoding): تبدیل متغیرهای دستهای به فرمت عددی که مدل بتواند آن را پردازش کند.
- مدیریت دادههای گمشده (Missing Data Handling): پر کردن یا حذف دادههای گمشده.
مهندسی ویژگی شامل ایجاد ویژگیهای جدید از ویژگیهای موجود به منظور بهبود عملکرد مدل است. این کار میتواند شامل ترکیب ویژگیها، ایجاد ویژگیهای تعاملی و یا استفاده از دانش دامنه برای ایجاد ویژگیهای مرتبط باشد.
تنظیم پارامترهای مدل
مدل رگرسیون لجستیک دارای پارامترهای مختلفی است که میتوان آنها را تنظیم کرد تا عملکرد مدل بهبود یابد. برخی از مهمترین این پارامترها عبارتند از:
- C (Regularization Parameter): پارامتر C میزان جریمهای را که برای پیچیدگی مدل اعمال میشود، کنترل میکند. مقادیر کوچکتر C منجر به مدلهای سادهتر و مقادیر بزرگتر C منجر به مدلهای پیچیدهتر میشوند.
- penalty: نوع جریمهای که برای پیچیدگی مدل اعمال میشود. میتواند ‘l1’ (Lasso) یا ‘l2’ (Ridge) باشد.
- solver: الگوریتمی که برای حل مسئله بهینهسازی استفاده میشود.
برای تنظیم پارامترهای مدل، میتوان از تکنیکهایی مانند جستجوی شبکهای (Grid Search) یا بهینهسازی بیزی (Bayesian Optimization) استفاده کرد.
کاربردهای رگرسیون لجستیک
رگرسیون لجستیک در طیف گستردهای از کاربردها مورد استفاده قرار میگیرد، از جمله:
- تشخیص اسپم (Spam Detection): تشخیص ایمیلهای اسپم بر اساس محتوای آنها.
- تشخیص تقلب (Fraud Detection): تشخیص تراکنشهای تقلبی در سیستمهای مالی.
- پیشبینی نرخ ریزش مشتری (Customer Churn Prediction): پیشبینی مشتریانی که احتمال دارد از یک سرویس انصراف دهند.
- تشخیص بیماری (Disease Diagnosis): تشخیص بیماریها بر اساس علائم و نشانههای بالینی.
- ارزیابی ریسک اعتباری (Credit Risk Assessment): ارزیابی ریسک اعتباری متقاضیان وام.
نتیجهگیری
رگرسیون لجستیک یک الگوریتم قدرتمند و پرکاربرد در یادگیری ماشین است که برای مسائل دستهبندی بسیار مناسب است. با درک مفاهیم اساسی، پیادهسازی با پایتون، ارزیابی مدل و تنظیم پارامترها، میتوان از این الگوریتم برای حل طیف گستردهای از مسائل دنیای واقعی استفاده کرد. پیشپردازش دادهها و مهندسی ویژگی نیز نقش مهمی در بهبود عملکرد مدل دارند.

بدون دیدگاه