λ¨Έμ‹ λŸ¬λ‹

λ‘œμ§€μŠ€ν‹± νšŒκ·€ sklearn logistic regression iris python

주영 🐱 2022. 12. 4. 14:19
728x90
λ°˜μ‘ν˜•

νšŒκ·€ μ•Œκ³ λ¦¬μ¦˜μ€ λΆ„λ₯˜μ—μ„œλ„ μ‚¬μš©λœλ‹€. λΆ„λ₯˜μ˜ μ˜λ―ΈλŠ” μ •ν•΄μ Έ μžˆλŠ” λ²”μ£Όλ“€ 쀑 ν•˜λ‚˜λ‘œ μ˜ˆμΈ‘ν•˜λŠ” 것이닀. 이λ₯Ό μΉ΄λ“œκ±°λž˜ 이상 유무, μŠ€νŒΈλ©”μΌμ—¬λΆ€, 고객 μ΄νƒˆ μ—¬λΆ€, λ°±ν˜ˆλ³‘ μ—¬λΆ€ λ“± λΆ„λ₯˜ν•˜λŠ” λ¬Έμ œμ— ν™œμš©ν•  수 μžˆλ‹€. 

λ‘œμ§€μŠ€ν‹± νšŒκ·€λŠ” μƒ˜ν”Œμ΄ νŠΉμ • ν΄λž˜μŠ€μ— 속할 ν™•λ₯ μ„ μΆ”μ •ν•˜λŠ”λ° 널리 μ‚¬μš©λœλ‹€. μΆ”μ •ν™•λ₯ μ΄ 50%κ°€ λ„˜μœΌλ©΄ κ·Έ μƒ˜ν”Œμ΄ ν•΄λ‹Ή ν΄λž˜μŠ€μ— μ†ν•œλ‹€κ³  μ–˜κΈ°ν•  수 μžˆλ‹€. ν΄λž˜μŠ€μ— μ†ν•œλ‹€λŠ” 것은, λ ˆμ΄λΈ”μ΄ 1인 μ–‘μ„±ν΄λž˜μŠ€(positive class), ν΄λž˜μŠ€μ— μ†ν•˜μ§€ μ•ŠλŠ” 것은 λ ˆμ΄λΈ”μ΄ 0인 μŒμ„± 클래슀(negative class0라고 ν•œλ‹€. 이λ₯Ό 이진 λΆ„λ₯˜κΈ°λΌ ν•œλ‹€. 

ν”νžˆ λ‘œμ§€μŠ€ν‹± νšŒκ·€λŠ” μ’…μ†λ³€μˆ˜κ°€ μ΄ν•­ν˜• 문제(즉, μœ νš¨ν•œ λ²”μ£Όμ˜ κ°œμˆ˜κ°€ λ‘κ°œμΈ 경우)λ₯Ό 지칭할 λ•Œ μ‚¬μš©λœλ‹€. 이외에, 두 개 μ΄μƒμ˜ λ²”μ£Όλ₯Ό κ°€μ§€λŠ” λ¬Έμ œκ°€ λŒ€μƒμΈ κ²½μš°μ—” λ‹€ν•­ λ‘œμ§€μŠ€ν‹± νšŒκ·€ (multinomial logistic regression) λ˜λŠ” λΆ„ν™” λ‘œμ§€μŠ€ν‹± νšŒκ·€ (polytomous logistic regression)라고 ν•˜κ³  볡수의 λ²”μ£Όμ΄λ©΄μ„œ μˆœμ„œκ°€ μ‘΄μž¬ν•˜λ©΄ μ„œμˆ˜ λ‘œμ§€μŠ€ν‹± νšŒκ·€ (ordinal logistic regression) 라고 ν•œλ‹€. 즉 λ‘œμ§€μŠ€ν‹± νšŒκ·€λŠ” μ΄ν•­ν˜• λ˜λŠ” λ‹€ν•­ν˜•μ΄ 될 수 μžˆλ‹€. μ΄ν•­ν˜• λ‘œμ§€μŠ€ν‹± νšŒκ·€(binomial logistic regression)의 경우 쒅속 λ³€μˆ˜μ˜ κ²°κ³Όκ°€ (성곡, μ‹€νŒ¨) 와 같이 2개의 μΉ΄ν…Œκ³ λ¦¬κ°€ μ‘΄μž¬ν•˜λŠ” 것을 μ˜λ―Έν•˜λ©° λ‹€ν•­ν˜• λ‘œμ§€μŠ€ν‹± νšŒκ·€λŠ” μ’…μ†ν˜• λ³€μˆ˜κ°€ (λ§‘μŒ, 흐림, λΉ„)와 같이 2개 μ΄μƒμ˜ μΉ΄ν…Œκ³ λ¦¬λ‘œ λΆ„λ₯˜λ˜λŠ” 것을 가리킨닀. μ΄ν•­ν˜• λ‘œμ§€μŠ€ν‹±μ˜ νšŒκ·€ λΆ„μ„μ—μ„œ 2개의 μΉ΄ν…Œκ³ λ¦¬λŠ” 0κ³Ό 1둜 λ‚˜νƒ€λ‚΄μ–΄μ§€κ³  각각의 μΉ΄ν…Œκ³ λ¦¬λ‘œ λΆ„λ₯˜λ  ν™•λ₯ μ˜ 합은 1이 λœλ‹€.

 

<μž‘λ™ 원리>

μ„ ν˜•νšŒκ·€μ™€ λΉ„μŠ·ν•˜κ²Œ κ°€μ€‘μΉ˜ 합을 κ³„μ‚°ν•˜κ³  편ν–₯을 λ”ν•œλ‹€. κ·ΈλŸ¬λ‚˜ 쒅속 λ³€μˆ˜μ™€ λ…립 λ³€μˆ˜ μ‚¬μ΄μ˜ κ΄€κ³„에 μžˆμ–΄μ„œ μ„ ν˜• λͺ¨λΈκ³Ό μ°¨μ΄μ μ„ μ§€λ‹ˆκ³  μžˆλ‹€. μ²« λ²ˆμ§Έ μ°¨μ΄μ μ€ μ΄ν•­ν˜•μΈ λ°μ΄ν„°μ— μ μš©ν•˜μ˜€μ„ λ•Œ μ’…속 λ³€μˆ˜ y의 κ²°κ³Όκ°€ λ²”μœ„[0,1]둜 μ œν•œλœλ‹€λŠ” κ²ƒμ΄κ³  λ‘ λ²ˆμ§Έ μ°¨μ΄μ μ€ μ’…속 λ³€μˆ˜κ°€ μ΄μ§„적이기 λ•Œλ¬Έμ— μ‘°κ±΄λΆ€ ν™•λ₯ (P(yβ”‚x))의 λΆ„포가 μ •κ·œλΆ„포 λŒ€μ‹  μ΄ν•­ λΆ„포λ₯Ό λ”°λ₯Έλ‹€λŠ” μ μ΄λ‹€.

λ‘œμ§€μŠ€ν‹± ν•¨μˆ˜λŠ” 은 0κ³Ό 1사이λ₯Ό 좜λ ₯ν•˜λŠ” μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜μ΄λ‹€. 즉, λ‘œμ§€μŠ€ν‹± ν•¨μˆ˜λŠ” μ‹œκ·Έλͺ¨μ΄λ“œ ν•¨μˆ˜λΌκ³ λ„ ν•œλ‹€. 

λ‘œμ§€μŠ€ν‹± ν•¨μˆ˜λŠ” π‘₯κ°’μœΌλ‘œ μ–΄λ–€ 값이든 받을 μˆ˜κ°€ μžˆμ§€λ§Œ 좜λ ₯ κ²°κ³ΌλŠ” 항상 0μ—μ„œ 1사이 값이 λœλ‹€. 즉, ν™•λ₯ λ°€λ„ν•¨μˆ˜(probability density function) μš”건을 μΆ©μ‘±μ‹œν‚€λŠ” ν•¨μˆ˜μΈ 것이닀. S자 ν˜•νƒœμ˜ λ‹¨μˆœ 증가 ν˜Ήμ€ λ‹¨μˆœ κ°μ†Œ κ·Έλž˜ν”„μ΄λ‹€. 

μœ„ μ‹μ—μ„œ xλŠ” μ„ ν˜• νšŒκ·€ ν˜•νƒœλ‘œ λ‹€μŒκ³Ό κ°™λ‹€ 

odds(μŠΉμ‚°)은 μ΄λŸ¬ν•œ x의 해석을 μš©μ΄ν•˜κ²Œ ν•œλ‹€λŠ” κ°œλ…μ—μ„œ λ“±μž₯ν•œλ‹€. μŠΉμ‚°μ€ μž„μ˜μ˜ 사건 π΄κ°€ λ°œμƒν•˜μ§€ μ•Šμ„ ν™•λ₯  λŒ€λΉ„ 일어날 ν™•λ₯ μ˜ λΉ„μœ¨λ‘œ, pκ°€ 성곡확λ₯ μ΄λΌλ©΄ μ‹€νŒ¨ λŒ€λΉ„ 성곡확λ₯ μ˜ λΉ„μœ¨μ΄λ‹€. λ‹€μŒ 식 처럼 ν‘œν˜„ν•  수 μžˆλ‹€.

p에 λ‘œμ§€μŠ€ν‹± ν•¨μˆ˜λ₯Ό λ„£μœΌλ©΄ oddλŠ” κ²°κ΅­ λ²”μ£Ό 0(μŒμ„±ν΄λž˜μŠ€)에 속할 ν™•λ₯  λŒ€λΉ„ λ²”μ£Ό 1(μ–‘μ„±ν΄λž˜μŠ€)에 속할 ν™•λ₯ μ΄ λœλ‹€. 

odds에 logλ₯Ό μ·¨ν•˜λ©΄

λ‹¨μˆœν•œ μ„ ν˜•κ²°ν•© ν˜•νƒœλ‘œ λ³€ν•˜κ²Œ λœλ‹€ . 이λ₯Ό λ‘œμ§“ λ³€ν™˜μ΄λΌκ³  ν•œλ‹€.

 


μ‚¬μ΄ν‚·λŸ°μ—μ„œ κ΅¬ν˜„ν•΄λ΄…μ‹œλ‹€

유λͺ…ν•œ iris λ°μ΄ν„°μ—μ„œ κ½ƒμžŽμ˜ λ„ˆλΉ„λ‘œ Iris-Versicolor을 κ°μ§€ν•˜λŠ” 이진 λΆ„λ₯˜κΈ°λ₯Ό λ§Œλ“€μ–΄λ³Ό κ²ƒμž…λ‹ˆλ‹€. 

μ‚¬μ΄ν‚·λŸ°μ˜ logisticRegression은 클래슀 λ ˆμ΄λΈ”μ„ λ°˜ν™˜ν•˜λŠ” predict()와 ν΄λž˜μŠ€μ— 속할 ν™•λ₯ μ„ λ°˜ν™˜ν•˜λŠ” predict_proba()κ°€ μžˆμŠ΅λ‹ˆλ‹€. 

from sklearn import datasets
iris=datasets.load_iris()

#κ½ƒμžŽμ˜ λ„ˆλΉ„λ‘œ Iris-Versicolor을 κ°μ§€ν•˜λŠ” 이진 λΆ„λ₯˜κΈ°λ₯Ό λ§Œλ“€μ–΄λ³΄μž

import numpy as np
X=iris['data'][:,3:]#κ½ƒμžŽμ˜ λ„ˆλΉ„λ§Œ
y=(iris['target']==2).astype(np.int32) #Iris-Versicolorλ©΄ 1, μ•„λ‹ˆλ©΄ 0

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()
lr.fit(X,y)

import matplotlib.pyplot as plt

newX=np.linspace(0,3,1000).reshape(-1,1)
yProba = lr.predict_proba(newX)
plt.plot(newX,yProba[:,1],"g",label="Iris-Versicolor")
plt.plot(newX,yProba[:,0],"b--",label="NOT Iris-Versicolor")

μ΄ˆλ‘μƒ‰ 라인을 보면 μš°λ¦¬κ°€ μ°ΎλŠ” Iris-Versicolor ν’ˆμ’…μ˜ κ½ƒμžŽ λ„ˆλΉ„λŠ” 1,4~2.5cm에 λΆ„ν¬ν•©λ‹ˆλ‹€. 반면 λ‹€λ₯Έ ν’ˆμ’…μ€ 일반적으둜 κ½ƒμžŽμ˜ λ„ˆλΉ„κ°€ 더 μž‘μ•„ 0.1~1.8cm에 λΆ„ν¬ν•©λ‹ˆλ‹€. κ½ƒμžŽμ˜ λ„ˆλΉ„κ°€ 2cm이상이면 Iris-Versicolor ν΄λž˜μŠ€μ— λŒ€ν•œ 높은 ν™•λ₯ μ„ 좜λ ₯ν•©λ‹ˆλ‹€. 이 두 κ·Ήλ‹¨μ—μ„œλŠ” κ²ΉμΉ˜λŠ” 뢀뢄이 μžˆμ–΄ λΆ„λ₯˜κ°€ ν™•μ‹€ν•˜μ§€ μ•Šμ§€λ§Œ, μ–΄μ¨Œλ“  λΆ„λ₯˜ν•˜λ €κ³  ν•˜λ©΄(predict_proba()κ°€ μ•„λ‹Œ predict()λ₯Ό μ‚¬λ£”ν•΄μ„œ) κ°€μž₯ κ°€λŠ₯성이 큰 클래슀λ₯Ό λ°˜ν™˜ν•  κ²ƒμž…λ‹ˆλ‹€. 그렇기에 μ–‘μͺ½ ν™•λ₯ μ΄ λ˜‘κ°™μ΄ 50%κ°€ λ˜λŠ” 1.6cmκ·Όλ°©μ—μ„œ κ²°μ • 경계가 λ§Œλ“€μ–΄μ§ˆ κ²ƒμž…λ‹ˆλ‹€. 

 

code:

https://colab.research.google.com/drive/15vQxtl97V3lCS1fyOIzT7pTILaEbKD41?usp=sharing

λ°˜μ‘ν˜•