ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기계학습] 로지스틱 회귀(분류 Classification)(Logistic Regression) (Part 1/2)
    코딩(Coding)/기계학습 2022. 1. 21. 11:29
    728x90

    로지스틱 회귀(분류)

    앞서 포스팅했던 선형회귀는 학습한 데이터를 기반으로 새로운 데이터에 대한 Output을 예측하는 문제라고 설명할 수 있겠다. 하지만, 로지스틱 회귀는 반대로 좌표평면상의 데이터를 각 그룹(class)으로 분류(classification)하는 것이다.

    image

    다음과 같은 데이터에 대해서 선형회귀를 적용한다고 가정한다면,

    image

    위 그림처럼 직선이 그려질 것이다. 이 직선을 토대로 x가 5를 기준으로 성공/실패를 분류 할 수 있을 것이다.

    하지만, 문제는 아래에서 발생한다.

    image

    만약 새로운 데이터 (20, 성공)이 있다면, x가 10을 기준으로 성공/실패를 분류할 것인데, 예외로 (9, 성공)이 분류에 실패하게 될 것이다.

    따라서 해결방법으로 새로운 함수를 도입한다.
    바로 시그모이드(Sigmoid) 함수이다.

    image-20220118133037333

    함수식은 아래와 같다.
    $$
    Sigmoid(z) = \frac{1}{1 + e^{-z}}
    $$
    시그모이드 함수는 위 그림에서 처럼 비선형적인 형태를 띈다.
    시그모이드 함수는 무조건 0과 1사이의 값을 가지는 활성화 함수이다.
    이 밖에 분류에 사용되는 활성화 함수는 tanh이나 계단함수 등등이 있다.

    기존의 데이터를 가장 잘 대변하는 직선을 찾는 선형회귀 문제에서 더 나아가 가설 직선을 시그모이드에 대입하여 분류를 잘 하도록 하는 문제이다.

    • $$
      H(x) = Wx + b
      $$
    • $$
      z = H(x) = Wx + b \\
      g(z) = \frac{1}{1+e^{-z}} \\
      g(x) = \frac{1}{1+e^{-(Wx + b)}}
      $$

    최종적으로, 우리는 주어진 데이터를 가장 잘 분류하는 가설 g(z)를 찾는 것이고 똑같이 W와 b를 찾는 것이다.

    활성화 함수?

    image

    • 보통 분류 문제는 One-Hot으로 표현된 데이터이다. 이는 연속된 데이터가 아니라 딱딱 끊어져 표현된 데이터이다.
    • A, B, C라는 3개의 클래스가 있다면,
      • [1, 0, 0] : A
      • [0, 1, 0] : B
      • [0, 0, 1] : C
    • 따라서, 이 데이터를 "선형"으로 표현하는데에는 한계가 있다.
      • 음과 양의 방향으로 무한으로 뻗어가는 직선의 특징 때문
    • 따라서 새로운 함수가 필요한데, 새로운 함수는 비선형적인 특징을 가진 함수를 뜻한다.

    image

    • 대표적으로 비선형성을 가진 함수는 앞서 설명했던 Sigmoid 함수가 있다.
    • 이 밖에도 딥러닝에서 사용하는 활성화 함수는 여러가지가 있다.
      • 특히 요즘에는 Relu를 사용한다.
        • 가중치 손실(Gradient Vanishing)을 최소화 해준다.

    image

    • 그렇다면 왜 활성화 함수를 사용하는가?
    • 선형적인 단순함을 추구하기 보다는 비선형성을 주어 모델(가설)의 복잡성을 주기 위함이다.
    • 지금 포스팅하는 로지스틱 회귀는 비록 1개의 Layer밖에 없지만, 이후 설명하게 될 딥러닝 관점에서는 직선을 여러개 만드는 것보다 비선형성을 주어 가설(모델)의 복잡함을 추가하여 강력한 모델을 구현한다.

    가설 정의

    자 다시 돌아와서, 그럼 분류 문제에서는 가설정의를 어떤식으로 하는가?

    image

    위 그림이 로지스틱 회귀에서의 가설부분이다.

    • 입력 X가 모델에 input으로 들어가고
    • 데이터를 가장 잘 대변하는 직선과 활성화 함수(Sigmoid)를 거친다음
    • 0~1사이의 값을 0.5를 기준으로 분류하여 Y값(Label)을 얻어낸다.

    그렇다면, 분류 문제의 가설를 정의했으니

    • $$
      z = H(x) = Wx + b \\
      g(z) = \frac{1}{1+e^{-z}} \\
      g(x) = \frac{1}{1+e^{-(Wx + b)}}
      $$

    다음은 Cost함수를 정의할 차례이다.

    오차 정의

    • 앞서 설명했던 선형회귀에선 실제 값(Label)과 가설직선(Output)간의 차이를 제곱하여 평균을 통해 오차를 정의하였다.
    • 분류 문제에 대해서도 해당 문제가 적용될까?
    • $$
      Cost(W, b) = \frac{1}{m}\sum_{i=0}^m((g(x_i) - Y_i)^2)
      $$
    • 해당 오차함수에는 문제가있지 않을까? 아래 그래프를 살펴보자
    • image
    • 그래프를 보면 전체적으로 Cost를 최소로하는 W,b 값이 존재하지만, 경사하강법을 적용할 수 없다.
    • 그 이유는 해당 오차함수는 Convex하지 않기 때문이다. 즉 최적의 값으로 수렴하지 못하고 Local Minima에 빠질 우려가 있다는 것이다.
      • 즉, 접선의 기울기가 0이 되는 부분이 여럿 존재하다는 의미이다.
      • 그림을 살펴보아도 접선의 기울기가 0이되는 부분이 많다.
    • 따라서 새로운 Cost 함수를 정의해야한다.
    • 바로 Cross-Entropy 함수이다.
      • image
      • image
      • 모양도 완만한 곡선이기에 경사하강법을 적용할 수 있다.
    • 해당 함수는 오차 함수의 정의에 충실하게 설계되었다.
      • 실제 값과 같으면 값은 작아지고, 실제 값과 다르면 값은 커진다.

    오차 최소화

    • 오차 최소화는 Cost함수를 최소화하는 최적의 W와 b를 찾는 과정이다.
    • 이 문제를 해결하기 위해 경사하강법을 사용하여 최적의 W,b를 찾아낸다.

    정리

    image

    다변수 분류

    여기까지 공부하면 우리는 0과 1만을 구분 할 수 있는 것이다. 즉, 이진분류를 공부한 것이다.
    세상에는 여러가지 Class로 구분되는데, 여러가지 Class에 대해서 분류할 수 없는 것일까?

    image

    • 예시로 3개의 클래스로 분류하는 문제에서,,,
    • 정답은 간단하다. 우리는 3개의 Logistic 회귀를 적용하면 된다.
      • 즉 직선을 3개를 만들고 3개의 직선을 모두 Sigmoid함수에 대입하면 된다.
      • 한개의 가설은 A인지(1) 아닌지(0)
      • 두번째 가설은 B인지(1) 아닌지(0)
      • 마지막 가설은 C인지(1) 아닌지(0)

    다변수 분류도 행렬로 처리

    image

    • 3개의 Logistic 회귀를 사용한다고 했는데, 연산관점에서 볼때, 모두 행렬로 표현이 가능하다.(그림참조)
    • image
    • 결국 다변수 분류 또한 가장 간단한 Wx + b로 표한이 가능하다는 의미이다.

    Softmax 함수

    • 최종적으로 우리는 입력값 X를 대입하면 3개의 output을 얻는 것이다.
    • 이 3개의 output은 각각 무엇을 의미하는 것일까?
    • 바로, 입력 X가 각 클래스에 해당할 확률을 의미한다.
    • 하지만 확률이라기엔 값이 크기 때문에 0~1사이의 값(합은 1)으로 표현해 줘야한다.
      • 이때 사용하는 함수로 Softmax 함수를 사용한다.
    • image
    • image
    • 위 과정을 가쳐 모델이 출력한 3개의 output을 소프트맥스 함수를 통해 확률로 표현하고
    • 확률 중에서 가장 높은 값을 1로 나머지는 0으로 표현하여 one-hot 인코딩한다.
    • 위 까지 완료하면 우리가 가진 Y(Label)값과 같기에 오차를 구할 수 있게 된다.

    오차와 오차 최소화

    • 오차는 Cross-Entorpy를 사용한다.
      • $$
        D(S,L) = -\sum_{i=0}^m(L_i log⁡(S_i))
        \\ L_i : 실제 Y 값
        \\ S_i : 예측 값 = S(H(x))
        $$
    • 오차 최소화 또한 경사하강법을 통해 최소화한다.

    정리

    image

    다음 포스팅은 Logistic 회귀를 직접 코드로 구현해보는 실습을 포스팅을 작성할 예정이다.
    포스팅에 사용된 ppt는 pdf 형식으로 제 Github에서 다운받을 수 있습니다.
    https://github.com/JoSangYeon/Machine_Learning_Project/blob/master/PPT/01.%20Machine%20Learning.pdf

    728x90

    댓글

Designed by black7375.