본문 바로가기
혼공학습단

[혼공머신] 3주차(1)_로지스틱 회귀

by netsgo 2024. 1. 20.
 

혼자 공부하는 머신러닝+딥러닝 - 예스24

- 혼자 해도 충분하다! 1:1 과외하듯 배우는 인공지능 자습서 이 책은 수식과 이론으로 중무장한 머신러닝, 딥러닝 책에 지친 ‘독학하는 입문자’가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있

www.yes24.com

 

로지스틱 회귀(Logistic Regression)


로지스틱 회귀(Logistic Regression)는 이름은 회귀이지만 분류 모델이다. 이 알고리즘은 선형 회귀와 동일하게 선형 방정식을 학습한다. 예를 들면 다음과 같다.

 

$$z = a \times (Weight) + b \times (Length) + c \times (Diagonal) + d \times (Height) + e \times (Width) = f$$

 

특성은 늘어났지만 다중 회귀를 위한 선형 방정식과 같다. 하지만 확률이 되려면 z가 아주 큰 음수일 때 0이 되고, z가 아주 큰 양수일 때 1이 되도록 바꿀 수 있어야 한다. 이는 시그모이드 함수를 사용하면 가능하다.

 

시그모이드 함수

 

로지스틱 회귀(Logistic Regression)가 이진 분류인 경우 predict_proba() 메서드는 음성 클래스와 양성 클래스에 대한 확률을 출력한다. z는 LogisticRegression 클래스의 decision_function() 메서드를 이용해 구할 수 있으며, 이렇게 구한 결과는 양성 클래스에 대한 z 값이 된다. 사이파이 라이브러리의 expit() 함수에 decision_function()의 결과를 넣어 주면 양성 클래스에 대한 확률을 얻을 수 있다.

 

 

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression()
lr.fit(train_bream_smelt, target_bream_smelt)
decisions = lr.decision_function(train_bream_smelt[:, 5])
print(decisions) # 양성 클래스에 대한 z 값

from scipy.special import expit

print(expit(decisions)) # 시그모이드 함수 결과, 양성 클래스에 대한 확률

 

로지스틱 회귀(Logistic Regression)의 다중 분류


로지스틱 회귀의 다중 분류는 각 클래스마다 z 값을 하나씩 계산한다. 그리고 가장 높은 z 값을 출력하는 클래스가 예측 클래스가 된다. 또한 다중 분류에서 확률은 소프트맥스(softmax) 함수를 사용하여 각 클래스의 z 값을 확률로 변환한다.

 

softmax 함수는 여러 개의 선형 방정식의 출력값을 0~1 사이로 압축하고 전체 합이 1이 되도록 만든다. 이를 위해 지수 함수를 사용하기 때문에 정규화된 지수라고도 부른다. softmax 함수는 scipy.special 아래에 있는 softmax() 함수를 가지고 와서 사용한다.

 

from scipy.special import softmax

proba = sotxmax(decision, axis = 1)
print(np.round(proba, decimals = 3))