STUDY/Python

머신러닝 2주 차 | 이진 논리 회귀 , 다항 논리 회귀, 전처리

nicesugi 2022. 5. 14. 12:10

 

논리 회귀로 풀기 힘든 문제가 등장 했을 때, 그 문제가 0 또는 1로 풀어야 할 때 !

이진 논리 회귀(Binary logistic regression)로 해결할 수 있다.

선형회귀와 계산은 같지만 출력에 Logistic function(=Sigmoid function)를 붙여서

딥러닝에서는 시그모이드 함수(Sigmoid function)라고도 불림

입력값(x)으로 어떤 값이든 받을 수가 있지만 출력 결과(y)는 항상 0에서 1사이 값을 가짐

 

 

 

머신러닝-로지스틱 함수(Logistic function) = 딥러닝-시그모이드 함수(Sigmoid function)

 

선형회귀와 계산방식 같고 출력에서 시그모이드 추가
이진 논리 회귀(Binary logistic regression) 가설

이진 논리 회귀에서의 손실 함수 ; 확률 분포 그래프의 차이를 비교할 때

(선형회귀에서 정답값을 나타내는 점과 우리가 세운 가설의 거리를 최소화했던, loss를 최소화하는 함수를 사용하듯)

  • tensorflow > Crossentropy 이용
  • Keras >  binary_crossentropy 이용

crossentropy

 

 

 


 

 

 

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

결과값이 어떤 값의 범위에 따라 여러가지 결과값으로 나눌 때 사용하는 회귀 방법 !

다항 논리 회귀 (Multinomial logistic regression)

다항 논리 회귀도 다항 분류에 속하기 때문에 원핫 인코딩 방법을 사용하는데 만드는 방법은 간단하다.

아래의 예시를 보면 abcdf 의 5개의 배열을 0으로 맞추고, 해달 클랙스 인덱스에 1을 넣는다.

 

(순차모델을 임포트해서 차례대로 쓰는 것 같다 > from tensorflow.keras.models import Sequential)

다항 논리 회귀 예시

 

Logit function 은 데이터 간의 차이를 확장하고 값의 범위로 인해 상한과 하한이 있는 일부 문제 데이터 간의 차이를 더 크게 만듬

촉매제 역할을 하는데 그 다음 softmax 함수를 사용하여 확장된 데이터를 확률 구간(0,1)에 매핑하고 확률이 가장 큰 범주를 예측 값으로 출력한 다음 교차 엔트로피 함수를 사용하여 손실 값을 계산한다.

logits scores

softmax 함수 는 선형모델에서 나온 결과(logit)를 모두가 더하면 1이 되도록 만들어주는 함수 (아래 probabilities, p의 합은 1)

왜 모두 더해서 1을 만드냐? 예측의 결과를 확률(Confidence)로 만들기 위함으로 원핫인코딩의 라벨 값을 전부 더해도 1(100%)이 됨.

logit > softmax > probalilities
input > logit > softmax > crossentropy >

다항 논리 회귀에서의 손실 함수(결과 값의 확률 분포 차이를 계산할 때)는

(tf에서는 이진이나 다항이나 같은 crossentropy 이용하지만, keras에서는 다른 함수를 이용함)

  • tensorflow > Crossentropy 이용
  • Keras >  categorical_crossentropy 이용

 


 

전처리(Preprocessing)

데이터를 전처리 하는 이유는,

특성들이 단위, 값의 범위 등 차이가 생겨 직접 비교가 불가능하거나 혹은 단위가 같더라도 범위가 달라 문제가 생길 수가 있는데

이 때 전처리 작업을 함. 정규화, 표준화 이외에도 여러 방법이 있으며

필요없는 데이터를 지우고 필요한 데이터만을 취하는 것, null 값이 있는 행을 삭제하는 것 등도 포함하여 전처리라고 함

어떤 방식이 좋은지는 데이터셋에 따라 다르기 때문에 여러 방식과 학습을 반복해 결과를 도출해내는 것을 추천한다고 한다.

 

 

 

 

  • 전처리 이전의 original data

 

 

 

 

  • 정규화 (Normalization) data

데이터를 0과 1사이의 범위를 가지도록 만듬

데이터를 환경에 맞게 적용한다고 생각하면 될듯.

100점 만점인지, 500점 만점인지 처럼

 

 

 

  • 표준화 (Standardization) data

데이터의 평균이 0이 되도록 표준편차가 1이 되도록

 (표준편차 : 관측값에서 평균 또는 중앙값을 뺀 것)

 

 

 

 

 

 

 

 

참조 : https://www.programmersought.com/

반응형