Logistik regressiya


ULASHISH

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]
 
Misolni ishga tushirish »

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]
 
Misolni ishga tushirish »

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]]
   

Misolni ishga tushirish »

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!