مهمترین الگوریتمهای یادگیری ماشین (به همراه کدهای پایتون و R) – بخش سوم: رگرسیون لجستیک


نباید گول نام این رگرسیون را بخورید! این الگوریتم مربوط به کلاسبندی است و نه رگرسیون. این الگوریتم برای برآورد مقادیر گسسته (مقادیر باینری مانند 1/0، آری/خیر، درست/نادرست) بر اساس مجموعهای از متغیر (های) وابسته استفاده میشود. به بیان سادهتر این الگوریتم احتمال رخداد یک رویداد را بر حسب گنجاندن دادهها در یک تابع لجستیکی پیشبینی میکند. از اینرو به نام رگرسیون logit نیز شناخته میشود. از آنجا که این الگوریتم، احتمال را پیشبینی میکند، مقادیر خروجی آن بین 0 تا 1 هستند.
این الگوریتم را نیز با یک مثال ساده توضیح میدهیم.
فرض کنیم دوستی یک پازل به شما میدهد تا حل کنید. تنها دو سناریو متصور است: یا شما آن را حل میکنید یا حل نمیکنید. حال فرض کنید که طیف گستردهای از پازل و معماها به شما داده میشود تا مشخص شود در کدام یک بهتر عمل میکنید. خروجی این بررسی ممکن است چیزی شبیه این باشد: اگر یک مسئله مثلثاتی پایه دهمی به شما داده بشود شما به احتمال 70% آن را حل میکنید. از سوی دیگر اگر سؤال تاریخ پایه پنجمی به شما داده شود احتمال دریافت پاسخ تنها 30% است. این آن چیزی است که رگرسیون لجستیک به ما ارائه میدهد.
اگر از دید ریاضیاتی به این الگوریتم نگاه کنیم خروجی به صورت یک ترکیب خطی از متغیرهای پیشبین مدلسازی شده است.
odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence
ln(odds) = ln(p/(1-p))
logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk
در بخش بالا p احتمال وجود خصوصیت مطلوب است. این تابع پارامترهایی را انتخاب میکند که احتمال مشاهده مقادیر نمونه بیشینه شود. این رگرسیون برخلاف رگرسیون معمولی که مجموع مربع خطاها را کمینه میکند عمل میکند.
اینک ممکن است بپرسید که چرا از لگاریتم استفاده کردهایم؟ هدف، سادهسازی بوده است چون این تابع یکی از بهترین روشهای ریاضیاتی برای شبیهسازی یک تابع گام است. میتوان در مورد جزییات بیشتر توضیح داد اما در حوزه این مقاله نمیگنجد.
کد پایتون
#Import Library
from sklearn.linear_model import LogisticRegression
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create logistic regression object
model = LogisticRegression()
# Train the model using the training sets and check score
model.fit(X, y)
model.score(X, y)
#Equation coefficient and Intercept
print('Coefficient:
', model.coef_)
print('Intercept:
', model.intercept_)
#Predict Output
predicted= model.predict(x_test)
کد R
x <- cbind(x_train,y_train)
# Train the model using the training sets and check score
logistic <- glm(y_train ~., data = x,family='binomial')
summary(logistic)
#Predict Output
predicted= predict(logistic,x_test)
توضیحات بیشتر
مراحل مختلف زیادی وجود دارند که باید امتحان شوند تا این مدل بهبود یابد:
- گنجاندن متغیرهای تعاملی
- حذف ویژگیها
- تکنیکهای رگوله سازی
- استفاده از یک مدل غیرخطی
در بخش بعدی این سلسله مطالب شما را با الگوریتم درخت تصمیم آشنا میکنیم.
سلام من در مورد رگرسون لبه (ridge regression) در یادگیری ماشین و نسخه کرنلی آن میخواستم بدونم ولی در سایت های فارسی هیچ نامی ازین مورد برده نشده