رگرسیون لجستیک (Logistic Regression)
«رگرسیون لجستیک» یک روش طبقه بندی است. طبقه بندی یعنی پیش بینی برچسب دسته ای، نه مقدار پیوسته. ساده ترین حالت، «دودسته ای (Binomial)» است؛ مثلا تومور بدخیم یا خوش خیم.
چطور کار می کند؟
در پایتون ماژول ها کمک می کنند. با NumPy شروع می کنیم.
import numpy
متغیرهای مستقل را در X بگذار. متغیر وابسته را در y بگذار.
# X اندازه تومور بر حسب سانتی متر است.
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1, 1)
# y می گوید تومور سرطانی است یا نه.
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
از sklearn تابع «LogisticRegression» را می گیریم و مدل را می سازیم.
from sklearn import linear_model
logr = linear_model.LogisticRegression()
logr.fit(X, y)
پیش بینی دودسته ای
حالا با اندازه تومور، برچسب را پیش بینی کن.
# پیش بینی برای اندازه 3.46 سانتی متر
predicted = logr.predict(numpy.array([3.46]).reshape(-1, 1))
print(predicted)
نکته: reshape لازم است؛ چون مدل ستون می خواهد، نه ردیف.
ضریب، لاگ شانس و شانس
ضریب، تغییر «لاگ شانس (Log-odds)» را نشان می دهد. با exp آن را به «شانس (Odds)» تبدیل می کنیم.
import numpy
from sklearn import linear_model
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1, 1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X, y)
log_odds = logr.coef_
odds = numpy.exp(log_odds)
print(odds)
تبدیل به احتمال
از شانس، «احتمال (Probability)» می سازیم. فرمول ساده است: odds/(1+odds).
def logit2prob(logr, X):
log_odds = logr.coef_ * X + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return probability
import numpy
from sklearn import linear_model
X = numpy.array([3.78, 2.44, 2.09, 0.14, 1.72, 1.65, 4.92, 4.37, 4.96, 4.52, 3.69, 5.88]).reshape(-1, 1)
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
logr = linear_model.LogisticRegression()
logr.fit(X, y)
def logit2prob(logr, X):
log_odds = logr.coef_ * X + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return probability
print(logit2prob(logr, X))
گام های عملی سریع
- آرایه های X و y را بساز.
- مدل را با fit آموزش بده.
- با predict برچسب جدید بگیر.
- در صورت نیاز، احتمال را محاسبه کن.
جمع بندی سریع
- رگرسیون لجستیک برای دسته هاست، نه مقدار پیوسته.
- لاگ شانس با exp به شانس تبدیل می شود.
- احتمال از فرمول odds/(1+odds) می آید.
- reshape برای ورودی تک ویژگی ضروری است.
ادامه مسیر: ماتریس اغتشاش برای ارزیابی مدل مفید است. همچنین خوشه بندی سلسله مراتبی را ببین. اگر تنظیم ابرپارامترها می خواهی، به جست وجوی گرید سر بزن.