Logistik regressiya
Logistik regressiya
Logistik regressiya tasniflash muammolarini hal qilishga qaratilgan. Bu uzluksiz natijani bashorat qiladigan chiziqli regressiyadan farqli o‘laroq, kategoriyali natijalarni bashorat qilish orqali amalga oshiradi.
Eng oddiy holatda ikkita natija mavjud bo‘lib, ular binomial deb ataladi, ularning misoli o‘smaning yomon yoki yaxshi ekanligini taxmin qilishdir. Boshqa hollarda tasniflash uchun ikkitadan ortiq natijalar mavjud, bu holda u multinomial deb ataladi. Ko‘p nomli logistik regressiyaning umumiy misoli 3 xil tur o‘rtasida iris gulining sinfini bashorat qilishdir.
Bu yerda binomial o‘zgaruvchini bashorat qilish uchun asosiy logistik regressiyadan foydalanamiz. Bu faqat ikkita mumkin bo‘lgan natijaga ega ekanligini anglatadi.
U qanday ishlaydi?
Pythonda biz uchun ishni bajaradigan modullar mavjud. NumPy modulini import qilish bilan boshlang.
import numpy
X-da mustaqil o‘zgaruvchilarni saqlang.
Tobe o‘zgaruvchini y da saqlang.
Quyida namunaviy ma’lumotlar to‘plami keltirilgan:
#X represents the size of a tumor in centimeters.
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)
#Note: X has to be reshaped into a column from a row for the LogisticRegression() function to work.
#y represents whether or not the tumor is cancerous (0 for "No", 1 for "Yes").
y = numpy.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1])
Biz sklearn modulidagi usuldan foydalanamiz, shuning uchun biz ushbu modulni ham import qilishimiz kerak:
from sklearn import linear_model
Sklearn modulidan logistik regressiya obyektini yaratish uchun LogisticRegression() usulidan foydalanamiz.
Ushbu obyektda fit() deb nomlangan usul mavjud bo‘lib, u mustaqil va bog‘liq qiymatlarni parametr sifatida qabul qiladi va regressiya obyektini munosabatlarni tavsiflovchi ma’lumotlar bilan to‘ldiradi:
logr = linear_model.LogisticRegression()
logr.fit(X,y)
Endi bizda logistik regressiya obyekti mavjud bo‘lib, u o‘simtaning o‘lchamiga qarab saraton yoki yo‘qligini aniqlashga tayyor:
#predict if tumor is cancerous where the size is 3.46mm:
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
Misol
To‘liq misolni amalda ko‘ring:
import numpy
from sklearn import linear_model
#Reshaped for Logistic function.
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)
#predict if tumor is cancerous where the size is 3.46mm:
predicted = logr.predict(numpy.array([3.46]).reshape(-1,1))
print(predicted)
Natija
[0]
Biz 3,46 mm o‘lchamdagi o‘simta saraton bo‘lmasligini taxmin qildik.
Koeffitsient
Logistik regressiyada koeffitsient - X dagi o‘zgarish birligi uchun natijaning log-koeffitsientlarining kutilayotgan o‘zgarishi.
Bu eng intuitiv tushunchaga ega emas, shuning uchun keling, undan mantiqiyroq narsalarni yaratish uchun foydalanaylik.
Misol
To‘liq misolni amalda ko‘ring:
import numpy
from sklearn import linear_model
#Reshaped for Logistic function.
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)
Natija
[4.03541657]
Bu shuni ko‘rsatadiki, o‘simta hajmi 1 mm ga oshgani sayin, uning saraton o‘simtasi bo‘lish ehtimoli 4 baravar ortadi.
Ehtimollik
Koeffitsient va kesishma qiymatlari har bir o‘smaning saraton bo‘lish ehtimolini topish uchun ishlatilishi mumkin.
Yangi qiymatni qaytarish uchun model koeffitsienti va kesishma qiymatlaridan foydalanadigan funksiya yarating. Ushbu yangi qiymat ushbu kuzatuvning o‘simta bo‘lish ehtimolini ifodalaydi:
def logit2prob(logr,x):
log_odds = logr.coef_ * x + logr.intercept_
odds = numpy.exp(log_odds)
probability = odds / (1 + odds)
return(probability)
Funksiya tushuntirilgan
Har bir kuzatish uchun log koeffitsientlarini topish uchun biz birinchi navbatda koeffitsient va kesishmani ajratib, chiziqli regressiyaga o‘xshash formulani yaratishimiz kerak.
log_odds = logr.coef_ * x + logr.intercept_
Keyin log-koeffitsientlarni koeffitsientga aylantirish uchun log-kodlarni eksponentatsiya qilishimiz kerak.
odds = numpy.exp(log_odds)
Endi bizda koeffitsient bor, biz uni 1 va koeffitsientlarga bo‘lish orqali ehtimollikka aylantira olamiz.
probability = odds / (1 + odds)
Keling, har bir o‘smaning saraton bo‘lish ehtimolini aniqlash uchun biz o‘rgangan narsamiz bilan funksiyadan foydalanamiz.
Misol
To‘liq misolni amalda ko‘ring:
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))
Natija
[[0.60749955] [0.19268876] [0.12775886] [0.00955221] [0.08038616] [0.07345637] [0.88362743] [0.77901378] [0.88924409] [0.81293497] [0.57719129] [0.96664243]]
Natijalar tushuntirildi
3,78 0,61 3,78 sm o‘lchamdagi o‘smaning saraton bo‘lish ehtimoli 61% ni tashkil qiladi.
2,44 0,19 2,44 sm o‘lchamdagi o‘smaning saraton bo‘lish ehtimoli 19% ni tashkil qiladi.
2,09 0,13 2,09 sm o‘lchamdagi o‘smaning saraton bo‘lish ehtimoli 13% ni tashkil qiladi.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
