[Coursera] Supervised Machine Learning: Regression and Classification(3)

홍건하·2025년 4월 28일
0

우리가 이전에 알아봤던 Linear Regression은 입력에 대해서 연속적인 출력값을 예측해서 분류 문제(0 또는 1, class가 2개 이상이어도 됨)에는 부적합하다.

그럼 분류 문제는 어떻게 풀까?

먼저, threshold를 설정해서 threshold값보다 작으면 0, 크면 1을 주는 형식으로 해결할 수 있다.
그리고, Decision boundary를 구하는 방법이 있는데 차근차근 알아보자.

Logistic Regression

분류 문제를 위해 사용되는 모델 중 하나는 Logistic Regression이 있다.

Logisitic Regression을 알아보기 전, Sigmoid Function에 대해서 살펴보자.(이게 뭔데;)

Sigmoid Function

위에 보이는 그림은 sigmoid function을 나타내는 그래프 이다.
보이는 것처럼 output(y)는 0~1사이의 값으로 국한된다.

수식적으로는,

  • f(x)=11+exf(x)=\frac{1}{1+e^{-x}}

로 나타낼 수 있다.

(Logistic regression에서 사용되어서인지, Logistic Function이라고 부르기도 한다고 함.)


그럼 sigmoid function은 어디서 어떻게 사용되는 걸까?

일단 우리가 알던 식을 복기해보면

  • fw,b(x)=z=wx+bf_{\vec w,b}(\vec x)=z=\vec w\cdot \vec x +b

이러한 식이 나왔었다.

하지만 이 식은 위에서 말했던 것처럼 연속적인 출력값 즉, class들로만 국한되지 않는다.

그래서 우리는, z에 sigmoid function을 입혀서 출력이 0~1 사이로 국한되도록 해준다.

  • sigmoid(z)=11+ez=11+e(wx+b)sigmoid(z) = \frac{1}{1+e^{-z}}=\frac{1}{1+e^{-(\vec w\cdot \vec x + b)}}

로 나타낼 수 있고, 이렇게 되면 이제 output은 [0,1][0,1]값으로 국한되는 것이다.

그리고 이렇게 마지막에 sigmoid function을 넣어준 것을 Logistic Model이라고 한다.

Ex) x: 종양 크기, y: 0(종양 아님), 1(종양)

  • fw,b(x)=0.7f_{\vec w,b}(\vec x)=0.7(이 말은, 70퍼센트로 종양이라는 말이다.)
    이 식을 보면 fw,b(x)=P(y=1x,w,b)f_{\vec w,b}(\vec x)=P(y=1|\vec x, \vec w, b)
    라고 볼 수 있다. 풀어서 말하면, vector x, vector w, b가 주어졌을 때 y가 1일 확률을 구하는 거와 동일하다는 것이다.

Decision Boundary

그럼 위의 값이 결국 0이냐 1이냐는 어떻게 파악할 것인가. 이걸 위해 결국 우리는 threshold가 필요한 것이다.

threshold 이상이면 1이고, 보다 작으면 0으로 판단한다는 것이다.

여기서 threshold를 통해서 우린 decision boundary를 구할 수 있는데,

바로 fw,b(x)=thresholdf_{\vec w,b}(\vec x)=threshold 인 이 값이 바로 Decision Boundary가 되는 것이다.

(이 그림에서는 threshold값이 0임을 파악할 수 있다.)

Logistic Regression에서는 보통 threshold값으로 0.5를 많이 지정한다.

Non-linear decision boundary

여기에 추가로 linear하지 않은 Polynomial logistic regression에 대해서 decsion boundary가 존재한다.


Ex) fw1,w2,b(x)=w1x12+w2x22+bf_{w_1, w_2,b}(x)=w_1x_1^2+w_2x_2^2+b
이 식의 threshold 값을 0이라고 하고, w1=1,w2=1,b=1w_1=1,w_2=1,b=-1이라고 했을 때
z=x12+x221=0z = x_1^2+x_2^2-1=0 이라는 식이 나오고, 이건 반지름이 1이고 중심이 (0,0)인 원이 decision boundary가 된다는 말이다.

Cost Function for logistic regression

자 이제 Logistic Regression의 cost function(비용 함수)에 대해서 알아보자.

  • i=1,...,mi=1,...,m: m개의 학습 데이터
  • j=1,...,nj=1,...,n: n개의 feature들

항상 우리가 궁금해하는 것은 fw,b(x)=11+e(wx+b)f_{\vec w, b}(\vec x)=\frac{1}{1+e^{-(\vec w\cdot \vec x+b)}} 에서 w와 b를 어떻게 구할 것인지이다.
사실 우리가 이전에 봤던, linear regression과 별반 다르지 않지만, cost function의 형태가 다르다.

Linear Regression model에서는 Mean-squared Error를 사용하였지만 이 함수는 logistic regression model에서는 제대로 작동하지 않는다.

위의 그림과 같이 cost function이 convex하지 않게 된다. 그래서 Local minimal에 빠질 가능성이 높다.

그래서 대신 사용할 surrogate(대리) loss를 선택해야한다.

Logistic Regression에 대해서 우리는 log loss를 가져온다.(예측 확률이 실제 정답과 얼마나 일치하는 지를 측정하고, 예측이 실제와 멀어질 수록 더 큰 패널티를 부여한다고 함. 게다가 convex하다.)

  • L(fw,b(x(i)),y(i))L(f_{\vec w,b}(x^{(i)}),y^{(i)})
    • log(fw,b(x(i))), if y(i)=1-log(f_{\vec w,b}(\vec x^{(i)})),\text{ if }y^{(i)}=1
    • log(1fw,b(x(i))), if y(i)=0-log(1-f_{\vec w,b}(\vec x^{(i)})),\text{ if }y^{(i)}=0

이러한 손실함수 식으로 만들면 논리적으로도 맞고, convex하게 된다.

(아래 log(f)가 -log(f)임.)

고로, 보이는 것 처럼 y가 1이면 f(x)가 1로 이동하여 손실함수의 값은 0에 가까워지고, y가 0이면 f(x)가 0으로 이동하여 총 손실함수는 다시 0에 가까워진다.

Simplified Cost Function

위의 cost function을 좀 더 간단하게 만들면,

  • L(fw,b(x(i)),y(i))=y(i)log(fw,b(x(i)))(1y(i))log(1fw,b(x(i)))L(f_{\vec w,b}(\vec x^{(i)}),y^{(i)})=-y^{(i)}log(f_{\vec w,b}(\vec x^{(i)}))-(1-y^{(i)})log(1-f_{\vec w,b}(\vec x^{(i)}))

로 나타낼 수 있다.

원래 알려져있던 logistic regression의 손실함수는 이런 단계를 걸쳐서 나오게 된 것이다.(linear regression loss function->안됨->surrogate loss-> 찾았다-> 단순화)

Costfunction:J(w,b)=1mi=1m[L(fw,b(x(i),y(i))]\therefore Costfunction: J(\vec w,b)=\frac{1}{m}\sum^m_{i=1}[L(f_{\vec w,b}(\vec x^{(i)},y^{(i)})]

  • J(w,b)=1mi=1m[y(i)log(fw,b(x(i)))+(1y(i))log(1fw,b(x(i)))]J(\vec w,b)=-\frac{1}{m}\sum^m_{i=1}[y^{(i)}log(f_{\vec w,b}(\vec x^{(i)}))+(1-y^{(i)})log(1-f_{\vec w,b}(\vec x^{(i)}))]

(이렇게 Log loss를 선택한 이유는 maximum likelihood estimation과 연관되어있다고 한다.)

Gradient Descent Implementation

그럼 위의 손실함수로 이제 w, b를 어떻게 구할 수 있을까?

linear regression과 logistic regression에 다른 점은 일단

  • fw,b=11+e(wx+b)f_{\vec w, b}=\frac{1}{1+e^{-(\vec w\cdot \vec x+b)}} 이렇게 sigmoid function을 정의한다는 것이다.
  • 그리고 cost function이 다름, J(w,b)=1mi=1m[y(i)log(fw,b(x(i)))+(1y(i))log(1fw,b(x(i)))]J(\vec w,b)=-\frac{1}{m}\sum^m_{i=1}[y^{(i)}log(f_{\vec w,b}(\vec x^{(i)}))+(1-y^{(i)})log(1-f_{\vec w,b}(\vec x^{(i)}))]

일단 각 w와 b를 업데이트하는 식으로 보면 결국 gradient descent를 쓰는 건 동일하다(convex 함수라 가능)

  • wj=wjαddwjJ(w,b)w_j=w_j-\alpha\frac{d}{dw_j}J(\vec w,\vec b), ddwjJ(w,b)=1mi=1m(fw,b(x(i))y(i))xj(i)\frac{d}{dw_j}J(\vec w,\vec b)=\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})x_j^{(i)}
  • bj=bjαddbjJ(w,b)b_j=b_j-\alpha\frac{d}{db_j}J(\vec w,\vec b), ddbjJ(w,b)=1mi=1m(fw,b(x(i))y(i))\frac{d}{db_j}J(\vec w,\vec b)=\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})

으로 나온다. 얼핏 보기엔 linear regression의 gradient descent와 별반 다를게 없어 보이지만, f의 식이 다르다는 점을 생각하자.

고로, 다시 정리해서 써보면,

  • wj=wjα[1mi=1m(fw,b(x(i))y(i))xj(i)]w_j=w_j-\alpha[\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})x_j^{(i)}]
  • bj=bjα[1mi=1m(fw,b(x(i))y(i))]b_j=b_j-\alpha[\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})]

로 적을 수 있다.


The Problem of Overfitting

우리는 지금까지 regression 문제와 classification 문제들을 어떻게 처리할 지에 대해 살펴보았다.

하지만, 재밌는 건 우리가 훈련하라고 준 데이터들에 너무 잘 학습이 되어버리는 것도 문제가 된다.

한마디로, 훈련 데이터에만 맞는 모델이 나오면 새로운 데이터에 대해서는 제대로된 결과를 주지 못한다는 것이다.

예를 들면, 우리가 시험을 보기전 족보 그 자체를 외우고 가서 새로운 문제는 다 틀리게 되는 상황이다.

그리고 이걸 overfitting이라고 한다.(만약 반대로 아예 훈련 데이터에 대해서도 성능이 안좋으면 underfitting이라고 함)

Overfitting을 해결하기에는 다양한 방법이 있다.

먼저, 첫째로는 간단하게 더 많은 훈련 예제를 넣는 것이다. => 당연하게도 더 다양한 데이터에 대해서 볼 수 있고 학습이 더 잘되는 것이다.

또한, 전체 Feature들 중 우리가 중요하다고 생각하는 Feature만 확인하는 것이다.(Feature들이 너무 많으면 overfitting이 발생하기 쉽기 때문에, feature selection)

마지막 방법으로는 Regularization이 있다.

Regularization

직관적으로 보면 그냥, 상대적으로 값이 크게 나오는 입력값의 가중치를 작게하여 균형을 맞추겠다는 것이다.

  • f(x)=28x38x2+39x3174x4+100f(x)=28x-38x^2+39x^3-174x^4+100
    여기서 x3,x4x^3,x^4 값의 크기가 상대적으로 클 수 밖에 없으믈 w3,w4w^3, w^4의 값을 줄여주는 것이다.

Cost Function with Regularization

만약, 우리가 w의 값을 0으로 둔다면 그 가중치 값을 갖는 Feature은 아예 사라지게 된다.

우리는 Feature들의 가중치를 줄여야하는 데 어떤 가중치를 regularization을 해야할 지 특정할 수가 없다.

그래서 아예 loss function에 regularization term을 더해서 학습될 수 있도록 해준다.

  • J(w,b)=12mi=1m(fw,b(x(i)y(i))2+λ2mi=1nwj2J(\vec w,b)=\frac{1}{2m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)}-y^{(i)})^2+\frac{\lambda}{2m}\sum^n_{i=1}w_j^2

뒤에 더해지는 항이 regularization term이다.

하지만, 이런 식으로 하면 결국 예측값과 실제값의 차이를 최소화하면서 가중치 값도 작게 해야하므로 trade-off가 발생하는데, 그래서 우리는 lambda값을 잘 조정해서 이 둘의 balance를 맞춰주어야한다.

  • lambda \approx 0이면 regularization을 하지 않겠다는 뜻
  • lambda 값이 너무 크면 가중치 값을 0에 가깝게 하겠다는 뜻이다.

Regularized Linear Regression

  • J(w,b)=minw,b[12mi=1m(fw,b(x(i)y(i))2+λ2mi=1nwj2]J(\vec w,b)=min_{\vec w,b}[\frac{1}{2m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)}-y^{(i)})^2+\frac{\lambda}{2m}\sum^n_{i=1}w_j^2]

이제 regularization term이 포함되므로 w를 업데이트할 때, 살짝의 변경이 발생한다.

  • wj=wjαddwjJ(w,b)w_j=w_j-\alpha\frac{d}{dw_j}J(\vec w,\vec b), ddwjJ(w,b)=1mi=1m(fw,b(x(i))y(i))xj(i)+λmwj\frac{d}{dw_j}J(\vec w,\vec b)=\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}w_j
  • bj=bjαddbjJ(w,b)b_j=b_j-\alpha\frac{d}{db_j}J(\vec w,\vec b), ddbjJ(w,b)=1mi=1m(fw,b(x(i))y(i))\frac{d}{db_j}J(\vec w,\vec b)=\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})

b는 정규화 하지 않았으므로 그대로이다.

고로,

  • wj=wjα[1mi=1m(fw,b(x(i))y(i))xj(i)+λmwj]w_j=w_j-\alpha[\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}w_j]
  • bj=bjα1mi=1m(fw,b(x(i))y(i))b_j=b_j-\alpha\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})

이렇게 재 정의 할 수 있다.

Regularized Logistic Regression

위와 비슷하게 Logistic Regression에서도 조금의 변화가 발생한다.

  • J(w,b)=1mi=1m[y(i)log(fw,b(x(i)))+(1y(i))log(1fw,b(x(i)))]+λ2mi=1nwj2J(\vec w,b)=-\frac{1}{m}\sum^m_{i=1}[y^{(i)}log(f_{\vec w,b}(\vec x^{(i)}))+(1-y^{(i)})log(1-f_{\vec w,b}(\vec x^{(i)}))] + \frac{\lambda}{2m}\sum^n_{i=1}w_j^2

  • wj=wjα[1mi=1m(fw,b(x(i))y(i))xj(i)+λmwj]w_j=w_j-\alpha[\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}w_j]

  • bj=bjα1mi=1m(fw,b(x(i))y(i))b_j=b_j-\alpha\frac{1}{m}\sum^m_{i=1}(f_{\vec w,b}(\vec x^{(i)})-y^{(i)})

이렇게 전체적으로 비슷하게 변하지만, 항상 f가 linear regression과 다르다는 걸 확인하자.

profile
아무것도 모르는 사람

0개의 댓글