코딩 개발일지

머신러닝 기초 - 이진/다항 논리 회귀 (Logistic regression) 본문

AI 본 교육/AI 10주차

머신러닝 기초 - 이진/다항 논리 회귀 (Logistic regression)

호기호 2023. 10. 18. 11:28

논리 회귀 (Logistic regression)

선형 회귀로 풀기 힘든 문제의 등장

ex) 대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 이수 여부(Pass or fail)를 예측하는 문제

 

0 or 1 밖에 없기 때문에, 직선형 그래프는 그릴 수 없다.

다른 방법이 필요했는데 바로 Logistic function( = Sigmoid function)을 사용하면 아래와 같이 만들 수 있다.

이 경우에서의 손실함수는 다음과 같다.

이렇게 가로축을 라벨(클래스)로 표시하고 세로축을 확률로 표시한 그래프를 확률 분포 그래프라고 한다.

확률 분포 그래프의 차이를 비교할 때는 Crossentropy 라는 함수를 사용한다.

즉, 임의의 입력값에 대해 우리가 원하는 확률 분포 그래프를 만들도록 학습시키는 손실 함수입니다.

 

정답이 0인 경우만 살펴보면, 우리가 현재 학습 중인 입력값의 확률 분포가 파란색 그래프처럼 나왔다고 가정하자. crossentropy는 파란색 그래프를 빨간색 그래프처럼 만들어주기 위해 노력하는 함수이다.

우리가 선형 회귀를 했을때 정답값을 나타내는 점과 우리가 세운 가설 직선의 거리를 최소화하려고 했던 거리 함수처럼 !!


다항 논리 회귀

클래스를 5개의 클래스로 나눠야할 때 사용함.

 

<예시>

대학교 시험 전 날 공부한 시간을 가지고 해당 과목의 성적(A, B, C, D, F)을 예측하는 문제

 

원핫 인코딩 (One-hot encoding) 은 다항 분류 문제를 풀 때 출력값의 형태를 가장 예쁘게 표현할 수 있는 방법이다.

다항 논리 회귀도 다항 분류에 속하기 때문에 원핫 인코딩 방법을 사용합니다.

여러개의 항을 0과 1로만 아름답게 표현할 수 있다!!!!

from sklearn.preprocessing import OneHotEncoder

다항논리회귀 사용할땐 꼭 import 해주기


전처리(Preprocessing)

넓은 범위의 데이터 정제 작업을 뜻함.

필요없는 데이터를 지우고 필요한 데이터만을 취하는 것, null 값이 있는 행을 삭제하는 것, 정규화(Normalization), 표준화(Standardization) 등의 많은 작업들을 포함한다.

 

또한 머신러닝 실무에서도 전처리가 80%를 차지한다는 말이 있을 만큼 중요한 작업이고, 항상 시간이 오래 걸리고 실수가 많이 발생하는 노가다 작업이다.

 

정규화 (Normalization)
정규화는 데이터를 0과 1사이의 범위를 가지도록 만든다.

같은 특성의 데이터 중에서 가장 작은 값을 0으로 만들고, 가장 큰 값을 1로 만드는 것. 

표준화 (Standardization) :
표준화는 데이터의 분포를 정규분포로 바꿔준다.

즉 데이터의 평균이 0이 되도록하고 표준편차가 1이 되도록 만들어준다.

<실전 예시>


선형회귀(Regression) 와 달리 분류(Classification) 를 이용하는 논리회귀를 사용할 때,

metrics 라는 것을 많이 쓸 것이다.

loss 수치를 봤을 때, 직관적으로 알수 있도록 보여주는 수치라고 생각하면 된다.

acc 쓰면 0~1 까지의 수치로 정확도를 나타내준다 !!

model = Sequential([
  Dense(1, activation='sigmoid')
])

model.compile(loss='binary_crossentropy', optimizer=Adam(learning_rate=0.01), metrics=['acc'])

model.fit(
    x_train,
    y_train,
    validation_data=(x_val, y_val), # 검증 데이터를 넣어주면 한 epoch이 끝날때마다 자동으로 검증
    epochs=20 # epochs 복수형으로 쓰기!
)

<결과>

acc 값을 보면, 모델릐 학습 정확도를 직관적으로 알 수 있다.


원핫 인코딩 (One-hot encoding)

<예시>

value 값이 1 일땐 encoded 된 값은 [1, 0, 0] 이고,

value 값이 2 일땐 encoded 된 값은 [0, 1, 0] 인 것을 볼 수 있다.