[AIVLE SCHOOL] 머신러닝(6) - 로지스틱 회귀

춤추는 머쉬룸·2024년 10월 16일

AIVLE SCHOOL 6기

목록 보기
50/80
post-thumbnail

10/16 7세션

A. 로지스틱 함수

  • 시그모이드 함수라고도 함
  • 0초과 1미만의 값이 됨
  • 0.5보다 크면 1이라고 예측, 작으면 0이라고 예측
σ(z)=11+ez\sigma(z) = {1 \over 1 + e^{-z}}
  • z가 매우 큰 값 : 출력값이 1에 가까워짐
  • z=0 : 출력값이 0.5
  • z가 매우 작은 값(음수) : 출력값이 0에 가까워짐

B. 소프트맥스 함수

  • 다중 클래스 분류에서 사용
  • 각 클래스에 대한 회귀 판별식 값을 소프트맥스 함수에 입력하면, 각 클래스에 속할 확률을 계산할 수 있음

C. 로그 손실

C-1. 이진분류

LogLosssample=[ylog(p)+(1y)log(1p)]LogLoss_{sample} = -[ylog(p) + (1-y)log(1-p)]
  • y=1 이면, LogLoss = -log(p)
  • y=0 이면, LogLoss = -log(1-p)

C-2. 다중 분류

D. 로지스틱 회귀 함수

D-1. 모델링

  • LogisticRegression(max_iter=n) 으로 반복횟수를 조절할 수 있음.
# 1단계: 불러오기
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report

# 2단계: 선언하기
model = LogisticRegression()

# 3단계: 학습하기
model.fit(x_train, y_train)

# 4단계: 예측하기
y_pred = model.predict(x_test)

# 5단계 평가하기
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

D-2. 모델 살펴보기

# 확률값 확인
> p = model.predict_proba(x_test)

> print(p[:10].round(3))

# 0일 확률 / 1일 확률
[[0.799 0.201]
 [0.2   0.8  ]
 [0.678 0.322]
 [0.961 0.039]
 [0.766 0.234]
 [0.762 0.238]
 [0.059 0.941]
 [0.578 0.422]
 [0.675 0.325]
 [0.884 0.116]]
 
# p_pred 값 확인 - 확률값이 0.5보다 크면 1, 작으면 0

> print(y_pred[:10])
[0 1 0 0 0 0 1 0 0 0]

D-3. 임계값 증명

# 새로운 예측값 - 0.5를 임계값으로 했다는 것을 증명
# 1이다 x가 0.5보다 크면. 아니면 0이다. x는 p1에서 왔다

# 확률값 확인
> p = model.predict_proba(x_test)
> p1 = p[:, 1]

> y_pred2 = [1 if x > 0.5 else 0 for x in p1]
> print(y_pred[:10])
> print(y_pred2[:10])
> print(classification_report(y_test, y_pred2))

[0 1 0 0 0 0 1 0 0 0]
[0, 1, 0, 0, 0, 0, 1, 0, 0, 0]

0개의 댓글