ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Week 3] Logistic Regression Model
    Courses/Andrew Ng - Machine Learning 2021. 12. 30. 23:09

    Cost Function

     로지스틱 회귀에서의 비용 함수를 정의내려 봅시다. 선형 회귀에서의 비용 함수와는 다른 모양이 되어야 합니다. 선형 회귀의 비용 함수를 분류 문제에 적용하면 비볼록함수(non-convex fuction) 이 되어 수많은 로컬 최솟값을 갖게 됩니다. 이 경우 경사 하강법을 적용해도 전역 최솟값에 수렴하기 어렵습니다.

     따라서 우리는 로지스틱 회귀를 위한 새로운 비용 함수를 사용합니다.

     가설 함수를 log에 집어 넣은 형태입니다. y=1일 때, h(x)가 1, 즉 가설이 결과를 완벽히 예측했을 때 비용은 0이 됩니다. 그렇지만 가설이 0에 가까워 질 수록 비용은 무한대로 증가합니다. 

     반대로 y=0일 때 , negative일 때는 가설이 1이면 비용이 무한대, 가설이 0이면 비용이 0이 됩니다.

     

    Simplified Cost Function and Gradient Descent

    위 Cost 함수를 y의 값에 따라 나누지 않고 한번에 표현해 보겠습니다.

    y에 0과 1을 대입해보면 방금 정의내린 Cost 함수와 동일하다는 것을 알 수 있습니다.

     비용 함수 J는 이렇게 됩니다.

     이제 최적화된 파라미터 Θ를 찾기 위해 J의 최솟값을 구해보도록 하겠습니다. 선형 회귀에서 했던 것 처럼 경사 하강법을 사용합니다.

     보면 결론적으로 선형 회귀와 로지스틱 회귀의 비용 함수의 최솟값을 구하는 알고리즘 공식은 동일합니다. 다만 가설 함수 h의 형태가 다를 뿐입니다.

     

    Advanced Optimization

    로지스틱 회귀에서 경사 하강법보다 더 빠른 고급 최적화 알고리즘들이 있습니다.

     Conjugate gradient, BFGS, L-BFGS등이 그렇습니다. 이 알고리즘들의 장점은 

    1. 학습률을 따로 정의내릴 필요가 없다.
    2. 경사 하강법보다 더 빠르다.

    단점은 복잡하다는 것입니다. 다만 라이브러리 등에 구현되어 있어 우리가 직접 증명하거나 구현할 필요는 없습니다. 옥타브에서 고급 최적화 알고리즘을 사용하는 법을 배우면 됩니다.

    왼쪽과 같은 벡터가 있을 때 비용 함수와 기울기를 계산하는 함수를 정의합니다. 그 후 몇가지 옵션을 설정하는 변수 options를 사용합니다. 'GradObj' 'on'은 전역 최솟값을 구하는 함수의 gradient값을 반환한다는 뜻입니다. 'MaxIter' '100'은 최대 반복 횟수를 100번으로 세팅합니다.

     그리고 fminunc 함수를 호출합니다. @costFunction은 비용 함수를 가리키는 포인터이고 initialTheta는 초기값 파라미터 벡터, options는 아까 설정한 값입니다.

     옥타브에서 구동시켜 보면 최적화 파라미터 optTheta와 최솟값 functionVal을 반환하는 것을 볼 수 있습니다. exitFlag는 알고리즘이 최적 값에 수렴되었는지 여부를 알려줍니다.

     

    Multiclass Classification

    이번에는 분류값이 여러 개인 경우에 대해 알아보겠습니다. 지금까지는 y값이 0 or 1이었지만 이제는 [1,2,3,4...] 이렇게 복수일 경우입니다. 

     Class가 두개였을 경우 명확하게 Decision boundary를 구하기 쉬웠지만 복수개가 되면 어려워집니다. 따라서 멀티 클래스 문제를 여러 개의 이진 분류 문제로 전환합니다. 위 그림의 경우 클래스가 3개이므로 가설 함수를 3개 만듭니다. 새로운 입력값이 들어오면 모든 가설 함수를 실행하고 확률이 가장 높게 나온 클래스를 선택합니다.


    혼자서 강의를 듣고 정리한 것이니 틀린 점이 있다면 언제든지 지적 부탁드립니다 :)

    댓글

Designed by Tistory.