[머신러닝] Lecture 06 Logistic Regression

이재호·2025년 3월 1일

머신러닝

목록 보기
5/18

https://www.youtube.com/watch?v=GmDkNjGygR8&list=PLiPvV5TNogxIS4bHQVW4pMkj4CHA8COdX&index=6

먼저 Classification에 대해서 알아보자.
아래와 같은 예시들이 classification이다.

  • 이메일: 스팸인지 아닌지
  • 온라인 거래: 사기인지 아닌지
  • 종양: 악성 종양인지 아닌지

    그리고 보통 Negative면 0, Positive면 1로 하여 yy값(target값)을 부여한다.
    또한, 단순히 Yes or No와 같이 binary classification뿐만 아니라 y0,1,2,3y \in {0, 1, 2, 3}처럼 여러 개의 class에 대한 분류도 있다.

그렇다면 linear regression으로 classification을 해보자.
아래 그림에서는 linear regression으로 구한 h(x)=θTxh(x)=\theta^Tx가 꽤나 잘 분류하고 있는 걸 확인할 수가 있다.

  • h(x)0.5h(x) \geq 0.5y=1y=1(Yes),
  • h(x)<0.5h(x) < 0.5y=0y=0(No) 와 같이 구분을 할 수가 있다.

하지만 만약 새로운 학습 데이터가 추가된다면 어떨까? 아래 그림을 보자.
보다시피 기존의 h(x)h(x)인 분홍색 linear line에서 파란색 linear line으로 fit될 것이다.
그리고 똑같이 threshhold 값을 기준으로 분류를 했을 때, 올바르게 분류를 하지 못할 것이다.
아래 그림에서는 tumor size 데이터 중 XXXX "XX(해당 부분)"XX 부분이 실제로 Yes인데 아마 No라고 예측이 될 것이다.

그리고 classification은 y=0 or 1y=0 \ or \ 1과 같이 정의를 내리지만, 실제로 h(x)h(x)의 값은 그 범위를 벗어날 수 있다.
그래서 0h(x)10 \le h(x) \le 1을 갖는 "Logistric Regression(Classification)"을 적용하여야 한다.

Logistric Regression의 모델은 아래 그림과 같다.
hθ(x)h_\theta(x)의 값의 범위가 0~1로 나오도록 하기 위해 특별한 함수를 적용한다.
이 함수의 명칭은 "Sigmoid function" 혹은 "Logistic frunction"이라고 부른다. 이 함수가 가질 수 있는 값의 범위는 오른쪽 그래프와 같다.

  • hθ(x)=g(θTx)h_\theta(x) = g(\theta^T x)
  • g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}
  • z=θTxz=\theta^Tx

    따라서 최종적으로 예측 함수는 hθ(x)=11+eθTxh_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}로 정의된다.

예측 함수 hθ(x)h_\theta(x)는 입력값 xx에 대해 y=1y=1일 확률을 알려준다.
만약 악성 종양을 판단하는 예측 함수 hθ(x)h_\theta(x)에 종양 사이즈 xx를 넣었을 때 값이 0.7로 나왔다면, 이는 해당 종양 사이즈는 70% 확률로 악성 종양일 것이라는 것을 뜻한다.

  • 그래서 hθ(x)h_\theta(x)를 정리하면 아래와 같다.
  • hθ(x)=P(y=1x;θ)h_\theta(x)=P(y=1|x;\theta) : 입력값 xx와 파라미터 θ\theta가 주어졌을 때 y=1y=1일 확률.
  • 따라서 다음과 같이 정리할 수도 있다.
  • P(y=0x;θ)+P(y=1x;θ)=1P(y=0|x;\theta)+P(y=1|x;\theta)=1
  • P(y=0x;θ)=1P(y=1x;θ)P(y=0|x;\theta) = 1-P(y=1|x;\theta)

그렇다면 Logistic Regression을 어떤 식으로 할 수 있을까?
sigmoid 함수를 적용한 예측 함수 hθ(x)=11+eθTxh_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}를 가지고,

  • hθ(x)0.5h_\theta(x) \ge 0.5y=1y=1이라고 예측한다.
  • 이를 다른 식으로 표현하면 z=θTx0z=\theta^Tx \ge 0을 만족하면 y=1y=1이라고 예측한다.
  • 그리고 y=0y=0로 예측하는 경우는 그 반대에 해당한다.

예시와 함께 살펴보자. 아래와 같이 예측 함수 hθ(x)=g(θ0+θ1x1+θ2x2)h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2)이 주어졌다고 가정해보자. 그리고 파라미터 벡터는 θ=[311]\theta=\begin{bmatrix}-3 \\ 1 \\ 1\end{bmatrix}처럼 주어졌다고 가정해보자.

  • 이 경우 θTx=3+x1+x20\theta^Tx=-3+x_1+x_2 \ge 0를 만족하면 y=1y=1이라고 예측할 것이다.
  • 즉, x1+x23x_1+x_2 \ge 3을 만족하는 데이터들에 대해서는 y=1y=1이라고 예측하고, 만족하지 못하는 데이터들에 대해서는 y=0y=0이라고 예측한다.
  • 그리고 x1+x2=3x_1+x_2 = 3이라는 함수를 통해서 이를 구분할 수가 있으며, 이를 "Decision Boundary"라고 부른다.
  • 해당 Decision Boundary를 기준으로 기준보다 크면 1로, 작으면 0으로 분류한다.

비선형 Decision Boundary도 존재할 수 있다. 아래 그림을 살펴보자.

  • hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1^2+\theta_4x_2^2) 이라는 예측 함수가 있다.
  • 그리고 파라미터 벡터는 θ=[10011]\theta=\begin{bmatrix}-1 \\ 0 \\ 0 \\ 1 \\ 1\end{bmatrix}과 같다.
  • 이 경우 θTx\theta^Tx1+x12+x22-1+x_1^2+x_2^2의 값이 0 이상이어야 y=1y=1로 예측할 것이다. 그리고 해당 Decision Boundary를 그리면 왼쪽 위 그림과 같이 x12+x22=1x_1^2+x_2^2=1 모양의 그래프가 그려질 것이다. 이와 같은 예시가 non-linear boundary decision이다.
  • 그렇다면 만약 더 복잡한 함수가 주어진다면 어떨까? 아마 왼쪽 아래와 같이 특이한 Decision Boundary가 나올 것이다.

앞에서 Logistic Regression이 어떻게 이뤄지는지 배웠다. 그렇다면 이제 어떻게 최적의 파라미터 θ\theta를 찾을 수 있을지 고민해보자.

우선 Cost function을 보자.
기존의 linear regression 형태의 cost function인 J(θ)=1mi=1m12(hθ(x(i))y(i))2J(\theta)=\frac{1}{m}{\sum_{i=1}^m{\frac{1}{2}{(h_\theta(x^{(i)})-y^{(i)})^2}}} 과 같은 방식으로 적용하면 cost function은 왼쪽 그래프처럼 non-convex한(no global optima) 그래프가 나올 것이다. 따라서 오른쪽 그래프와 같이 나오는 cost function을 정의해야 한다.

Logistic regression의 Cost(실제값과 예측값 간의 차)은 아래 그림과 같다.

  • 만약 실제값(타겟값) yy가 1이라면, Cost(hθ(x),y)=log(hθ(x))Cost(h_\theta(x), y)=-\log(h_\theta(x))와 같이 적용하고,
  • yy가 0이라면, Cost(hθ(x),y)=log(1hθ(x))Cost(h_\theta(x), y)=-\log(1-h_\theta(x))와 같이 적용한다.
  • 위 그래프를 보면 log(hθ(x))-\log(h_\theta(x)) 함수에 대한 그래프를 볼 수가 있다.
  • hθ(x)h_\theta(x)가 0에 가까워질수록 값이 매우 증가하고 1에 가까워질수록 값이 감소하는 것을 알 수 있다.
  • 이는 y=1y=1인 경우에서 예측값이 1에 가까워질수록 해당 Cost의 값이 감소한다는 것을 보여준다. (학습하기에 적절한 cost이다.)

반면에 y=0y=0인 경우의 Cost 그래프는 아래 그림과 같다.

  • 그래프는 log(1hθ(x))-\log(1-h_\theta(x))을 나타낸다.
  • 즉, y=0y=0인 경우에, 예측값 hθ(x)h_\theta(x)의 값이 0에 가까워질수록 Cost의 값이 감소하고, 1에 가까워질수록 Cost의 값이 증가한다는 것을 알 수 있다.

그래서 Logistic Regression의 Cost(hθ(x),y)Cost(h_\theta(x),y)를 하나의 식으로 정리하면,
"Cost(hθ(x),y)=ylog(hθ(x))(1y)log(1hθ(x))Cost(h_\theta(x),y)=-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x))"
라는 식으로 표현할 수 있다.

  • 실제값(타겟값) yy가 1이면, 1×log(hθ(x))0×log(1hθ(x))-1\times\log(h_\theta(x)) - 0\times{\log(1-h_\theta(x))}가 되어,
    "log(hθ(x))-\log(h_\theta(x))"만 남게 된다.
  • 반면에 실제값(타겟값) yy가 0이면, 0×log(hθ(x))1×log(1hθ(x))0\times\log(h_\theta(x)) - 1\times{\log(1-h_\theta(x))}가 되어,
    "log(1hθ(x))-\log(1-h_\theta(x))"만 남게 된다.

이제 Cost(실제값과 예측값 간의 차를 구하는 함수)를 가지고 cost function을 정리해보면 아래와 같이 나올 것이다.

  • J(θ)=1m[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]J(\theta)=-\frac{1}{m}[\sum_{i=1}^m{y^{(i)}\log{h_\theta(x^{(i)}) + (1-y^{(i)}) \log {(1-h_\theta (x^{(i)}))} }}]
  • 그리고 이 cost function J(θ)J(\theta)를 최소화하는 θ\theta 값을 찾으면 우리가 원하는, classification을 잘하는 예측 함수 hθh_\theta를 구할 수 있을 것이다.

cost function을 구했으니, 이제 gradient descent 방식을 적용해보자.
linear regression의 gradient descent 방식과 큰 차이는 없다.

  • 모든 파라미터 θj\theta_j에 대해서 cost function J(θj)J(\theta_j)를 편미분한 값을 learning rate에 따라서 연산해주면 된다.
  • θj:=θjαθjJ(θ)\theta_j := \theta_j - \alpha{\frac{\partial}{\partial \theta_j} J(\theta)}

linear regression의 gradient descent와 차이를 꼽자면, 예측 함수의 형태가 다르다는 점이다.
이 점을 빼고는 거의 유사하다.

  • linear regression의 hθ(x)h_\theta(x) : hθ(x)=θTxh_\theta(x)=\theta^Tx
  • logistic regression의 hθ(x)h_\theta(x) : hθ(x)=11+eθTxh_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}

컴퓨터로 계산할 때는, J(θ)J(\theta), θjJ(θ){\frac{\partial}{\partial \theta_j} J(\theta)} 등의 값을 연산하는 코드가 있어야 한다.

그리고 Gradient Descent 방식 뿐만 아니라 Conjugate gradient, BFGS, L-BFGS 등 다양한 최적화 알고리즘이 존재한다. 하지만 웬만하면 gradient descent가 가장 좋아 보인다.

그리고 위에서 봐왔던 binary classification(yes or no)뿐만 아니라 여러 개의 클래스를 갖는 "Multiclass classification"도 있다.

  • 이메일 폴더링: 업무용/친구/가족/취미
  • 병 진단: 정상/감기/플루
  • 날씨: 화창한, 구름 많은, 비, 눈

하지만 binary classification에서는 하나의 decision boundary를 그림으로써 분류가 가능하였는데, multi-class classification에서는 어떻게 분류를 할 수 있을까?

방법은 간단하다. 각각의 클래스에 대해서 1 vs. others 로 총 n개 클래스 만큼의 decision boundary를 만들면 된다.

  • class 1만 분류하는 boundary decision은 우측 첫 번째 그래프.
  • class 2만 분류하는 boundary decision은 우측 두 번째 그래프.
  • class 3만 분류하는 boundary decision은 우측 세 번째 그래프.

    그리하여 각 클래스를 분류하는 예측함수 hθ(x)h_\theta(x)는 class의 종류만큼 생성한다.
    hθ(i)(x)=P(y=ix;θ)    (i=1,2,3)h_\theta^{(i)}(x) = P(y=i | x;\theta)\ \ \ \ (i =1,2,3)

그래서 만약 학습 결과로 얻은 예측 함수 hθ(i)(x)h_\theta^{(i)}(x)에 대해서 새로운 입력값 xx가 주어진다면,
각각의 예측 함수에 대해서 적용한 후, 가장 값(확률)이 높게 나오는 클래스로 분류하면 된다.

  • Class of xx : maxi hθ(i)(x)\underset{i}{\max} \ h_\theta^{(i)}(x)
profile
천천히, 그리고 꾸준히.

0개의 댓글