[머신러닝(machine learning) - 논리회귀(logical regression)] 내일배움캠프 AI트랙
앞서 다뤄봤던 선형회귀로 학습시켜 얻을 수 없는 결과는
어떤 방법으로 학습시킬 수 있을까?
만약에 공부시간과 시험성적을 선형회귀로 학습시켜 추측하게 한다면
우스꽝스러운 결과가 나올 것이다.
공부를 하루 24시간해도 성적은 높게 추측하는 오류가 발생하기 때문이다.
따라서, 이번 시간에는 논리회귀라는 것을 알아볼 것이다.
논리회귀의 함수는 아래 그림과 같이 S커브 형태를 띈다.
기존의 선형회귀함수에 시그모이드(sigmoid)를 추가하여
0과 1사이의 결과값을 얻을 수 있도록 하고,
threshold(임계치)를 정하여
0에 가까운 값인지 1에 가까운 값인지를 판단한다.
크로스엔트로피(crossentrophy)를 사용하여
확률분포의 차이를 줄여주는 손실함수를 만들 수 있다.
여기서 확률분포의 차이를 줄인다는 것은
선(추측값)으로부터 점(데이터)의 거리가 가깝다는 것으로
학습이 잘 된 모델을 만들어내는 것을 말한다.
논리회귀의 결과값은 항상 0과 1사이의 값을 가지게 되는데
결과값의 갯수에 따라 이진논리회귀와 다항논리회귀로 나뉜다.
01. 이진논리회귀
true와 false같이 결과값이 이분화될때 사용하는 방법이다.
예) 성공, 실패 / 양성, 음성 / pass, fail 등 (대신에 이 값들을 0과 1로 표현해주어야 함)
binary crossentrophy를 사용하여 손실함수를 얻을 수 있다.
추가로 metric이라는 메소드를 사용하여
acc(정확도)값을 함께 출력해서 얼마만큼 정확하게 학습하는지를 체크할 수 있다.
정확도도 0과 1사이의 값으로 판별한다.
02. 다항논리회귀
결과값이 여러개인 경우 사용하는 방법이다.
예를 들어 결과값이 1,2,3으로 결정되는 데이터셋이 있다고 하자.
논리회귀 함수에서는 결과값이 0 또는 1로 출력되어야 하는데
결과값이 1,2,3 이라구요? 뭔가 잘못된거 아닌가요?
바로, 이때 필요한 작업이 원핫 인코딩(one hot encoding)이다.
원핫 인코딩은 categorical(군집화)된 라벨의 갯수만큼 배열을 0으로 채우고
index 위치는 1로 채워 데이터를 가공하는 방식이다.
이진논리회귀에서 threshold(임계치)를 정하여 0과 1로 구분하였다면,
다항논리회귀에서는 softmax(소프트맥스)를 사용하여
가중치를 더한 값이 1이 되도록 %화하여 추측값을 출력한다.
여기서 categorical crossentrophy가 원핫인코딩과 소프트맥스를
거쳐 나온 값의 편차를 줄여 손실함수를 만들 수 있다.
이러한 작업을 통해 그려진 손실함수에 경사하강법을 사용하여
loss값을 global minimum 값으로 얻어내는 것은
모든 머신러닝 학습의 궁극적인 목표라고 할 수 있다.