ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 머신러닝 - Logistic Regression
    머신러닝 & 딥러닝/머신러닝 기초 2024. 3. 4. 14:41

    머신러닝에서 예측 모델

     머신러닝은 지도학습, 비지도학습, 강화학습으로 나눌 수 있었다. 그 중 지도학습에는 Classification과 Regression이 있었다.

    Classification은 예측 모델링의 하나로 mapping function을 input X에서 discrete한 변수 Y로 근사화하는 것이다. 이 과정에서 learning parameter를 기준으로 데이터 셋을 다른 클래스로 나눌 함수를 찾는다.

    Regression은 예측 모델링의 하나로  mapping function을 input X에서 continuous한 변수 Y로 근사화하는 것이다. Continuous한 output은 부동 소수점, 정수와 같은 실수값을 포함하는 변수를 뜻한다.

    여기서 mapping function이란 모델 학습 과정에서 입력값과 출력 예측값 사이의 관계를 나타낸다. 딥러닝 모델의 훈련 목표는 이 mapping function을 정확하게 학습하여 새로운 데이터를 잘 일반화하고 예측이나 분류를 정확하게 수행하게 하는 것이다.

     

    선형 모델의 한계

     선형 모델이란 입력과 출력간의 선형 관계를 나타내는 모델이다. 선형 모델에서는 입력 특성과 가중치를 곱하고 편향을 더하여 출력을 계산한다.

    시험 합격/불합격 예측 모델을 만든다고 가정해보자. Y는 시험에 합격하면 1, 불합격하면 0이 될 것이다. X는 시험을 본 사람의 시험 점수를 나타내는 numerical한 값이 될 것이다. 이렇게 Y값이 범주형일 때 우리는 Linear Regression을 사용할 수 있을까?

    Linear Regression에서 1보다 큰 값과 0과 1 사이의 Y값을 알아내지 못한다. 따라서 Y값이 범주형일 경우 우리는 Logistic Function을 사용하여 해결할 수 있다.

     

    Logistic Regression이란?

     Logistic Function은 Y를 예측하는 것 대신에 Y의 확률을 예측한다. 따라서 output이 0과 1 사이인 함수를 사용하여 P(Y=1)을 모델링 할 수 있다.

    Logistic Regression에서 결과값은 각각의 클래스에 대한 확률이다. 따라서 실제값을 예측하는 Linear Regression과 다르게 Logistic Regression은 실제값을 예측하는 것이 아니라 확률을 도출하는 것이다.

    이를 위해 데이터에서 0과 1 사이의 결과값을 도출하는 함수가 필요하다. 우리는 이 함수로 sigmoid함수를 사용한다. 따라서 Linear Regression의 가설이었던 H(x) = wx + b 대신 Logistic Regression에서 가설은 H(x) = sigmoid(wx + b)가 된다.

    sigmoid 함수는 입력값이 한없이 커지면 1에 수렴하고 입력값이 한없이 작아지면 0에 수렴한다. 따라서 sigmoid 함수의 출력값은 0과 1사이의 값이 된다.

    def sigmoid(x):
        return 1 / (1 + np.exp(-x))

     

    x = np.arange(-5.0, 5.0, 0.1)
    y = sigmoid(x)
    
    plt.plot(x, y, "g")
    plt.plot([0, 0], [1.0, 0.0], ":")  # 가운데 점선 추가
    plt.title("Sigmoid function")
    plt.show()

    Logistic Regression은 실제값을 예측하는 것이 아니라 확률을 예측하는 것이기 때문에 가중치(w1)의 의미를 해석하는 것이 쉽지 않다. w1 값에 따라 다음과 같이 설명할 수 있다.

    • w1이 0이라면 X와 Y사이에는 아무런 관계가 없다는 것을 나타낸다.
    • w1이 0보다 크다면 X 값이 커질 때 Y가 1이 될 확률도 커진다.
    • w1이 0보다 작다면 X 값이 커질 때 Y가 1일 될 확률이 작아진다.

    채무 불이행 발생이 가능한 고객을 예측하는 모델이 있다고 가정해보자.

    X의 값으로는 연간 소득, 월간 신용카드 잔액이 될 수 있고 Y는 범주형으로 Yes, No 값이 될 수 있겠다.

    위 그래프를 보면 잔액이 낮을 경우 채무 불이행 확률이 0에 가깝지만 0보다 작지 않다. 또한 잔액이 높을 경우 채무 불이행 확률이 1에 가깝지만 1을 넘지 않는다.

     

    Logistic Regression 모델 학습시키기

     Logistic Regression의 경우 Linear Regression의 경우보다 더 복잡하다. 가중치를 최적화하기 위해서 일반적으로 MLE(Maximum Likelihood Estimation)를 사용한다. 데이터셋이 아주 크다면 SGD(Stochastic Gradient Descent)를 사용한다.

    Linear Regression에서는 loss function으로 MSE(평균제곱오차)를 사용하였다. 하지만 Logistic Regression에서 loss function으로 MSE를 사용할 경우 non-convex 형태의 그래프가 나오게된다. 이럴 경우 오차가 최소값이 되는 구간이라고 판단했지만 아니게 되는 local minima에 빠지게 된다.

    따라서 실제값이 1일 때 예측값이 0에 가까워지면 오차가 커져야하며 실제값이 0일 때 예측값이 1에 가까워지면 오차가 커져야 하므로 로그함수를 사용해야한다.

    즉, 실제값이 1일 때 예측값 H(x)가 1이면 오차가 0이므로 loss는 0이된다. H(x)가 0으로 수렴하는 경우 loss는 무한대로 발산하게 된다.

    Y의 실제값이 1일 때 -logH(x) 그래프를 사용하고 Y의 실제값이 0일 때 -log(1-H(x)) 그래프를 사용한다. 따라서 다음과 같이 나타낼 수 있다.

    losses = -(y_train * torch.log(hypothesis) + (1 - y_train) * torch.log(1 - hypothesis))

    Linear Regression에서 모든 오차의 평균을 구해 MSE를 사용하였다. Logistic Regression에서도 마찬가지로 모든 오차의 평균을 구한다.

    cost = losses.mean()

     

    여기서 Y와 예측값 H(x)의 차이가 커지면 loss는 커지고 Y와 예측값 H(x)의 차이가 작아지면 loss는 작아진다. Gradient descent를 사용하 loss function을 최소화 할 수 있다.

     

    Logistic Regression의 장단점

     Logistic Regression의 장점은 다음과 같다.

    • 클래스 분포에 대해 가정을 하지 않는다.
    • 다중 클래스에 쉽게 확장이 가능하다.
    • 학습 속도가 빠르며, 새로운 데이터의 분류 속도가 빠르다.
    • 많은 간단한 데이터셋에서의 정확도가 높다.
    • 모델 계수를 feature 중요도의 지표로 해석할 수 있다.

    하지만 Logistic Regression은 Linear decision boundary를 갖고 있기 때문에 입력 feature 공간을 선형 함수로만 분할할 수 있다. 따라서 비선형적인 데이터에 대해서는 제한적인 성능이 나타나게된다.

     

    정리

     Linear Regression의 경우 Y값이 범주형일 경우 1보다 큰 값, 0과 1사이의 값들을 알아낼 수 없었다. 따라서 우리는 output이 0과 1사이인 함수를 사용하여 P(Y=1)을 모델링하였다.

    이 함수로 sigmoid 함수를 사용하므로 Logistic Regression의 가설은 H(x) = sigmoid(wx + b)가 된다.

    Logistic Regression 모델을 학습시킬 때 loss function으로 Linear Regression에서 MSE를 사용하게 되면 Local minima에 빠질 수 있다. 따라서 -(ylogH(x) + (1 - y)log(1 - H(x))) 형태의 로그 함수를 사용한다.

     

    참고자료

    https://www.enjoyalgorithms.com/blogs/classification-and-regression-in-machine-learning

    https://hyunw.kim/blog/2017/11/01/Optimization.html

    https://wikidocs.net/57805

Designed by Tistory.