Machine learning

로지스틱 회귀(Logistic Regression) #1

Data Engineer 2015. 6. 26. 23:00

1. Introduction


  로지스틱 회귀에 관한 포스팅에 앞서서 먼저 최적화(Optimization) 알고리즘에 관해 이야기 하고자 한다. 생활 속에서 우리는 대부분 최적화 문제를 많이 접하게 된다. 일상에서 최적화 문제는 어떤 것들이 있을까? 예를 들어보자. '서울에서 부산까지 가장 빠른 시간에 가려면 어떻게 가야하는가?', '가장 적은 양의 연료로 가장 큰 힘을 내도록 하기 위해서는 어떻게 엔진을 설계해야 하는가?', '캐나다까지 가장 적은 비용으로 가려면 어떻게 해야 하는가?' 최적화라는 것은 이러한 문제를 효과적으로 처리하는 방법을 말한다.
  최적화 알고리즘을 미리 언급하는 이유는 이후에 설명하는 회귀가 바로 최적화 알고리즘을 이용하기 때문이다. 회귀(Regression)란 무엇일까? 회귀란 Figure 1과 같이 데이터가 표시된 좌표평면을 가로지르는 선(best-git line)을 그리는 것이다.


Figure 1. 선형 회귀의 예(독립 변수 1개, 종속 변수 1개)


  로지스틱 회귀는 데이터 묶음을 분류하기 위해 방정식을 계산하게 되는데 이 방정식은 가장 알맞은 매개변수의 집합을 찾는 것이다. 이 매개변수의 집합을 찾기위해 바로 최적화 알고리즘 중에 하나인 기울기 상승(Gradient ascent)을 사용하게 된다. Gradient ascent에서 좀 더 나아간 확률적 기울기 상승(Stochastic Gradient Ascent)에 대해 이야기하겠다. 이러한 최적화 알고리즘은 분류기(classifier)를 훈련하는데 사용된다.


2. 시그모이드 함수 (Sigmoid Function)


  난데 없이 설명에 함수가 하나 등장한다. 바로 시그모이드 함수이다. 이 함수는 무언인가? 

  우리는 어떤 데이터에서 분류 항목이 2개인 경우에 함수에 입력 데이터를 넣으면 결과로 0 또는 1로 출력할 수 있을 것이다. 이러한 방식으로 어떤 Input 데이터를 넣으면 0과 1사이의 수를 구하게 되는 함수인 것이다. 비슷한 함수로는 단계 함수(Step fuction), Threshhold 함수가 있다. 단계 함수는 Figure 2와 같다.


Figure 2. Step Function


  단계 함수는 그림과 같이 간단하다. 방정식 또한 간단하지만 이 함수가 가지는 문지는 0에서 1 사이 지점이 너무나 순식간에 분할을 수행해버린다. 이러한 위치를 기준으로 나눠지게 되면 때론 분류를 어렵게 할 수 있는 단점을 지닌다.

  시그모이드 함수는 단계 함수와 비슷하지만 조금 더 부드러운 변화로 구분을 하게 된다. 시그모이드 함수의 방정식은 아래와 같다.



  Figure 3은 시그모이드 함수의 형태를 표현한 것이다. 시그모이드의 값이 0.5인 그래프이다. 이 그래프의 경우 입력값이 0.5가 넘으면 1로 분류되고 0.5 이하이면 0으로 분류된다. 로지스틱 회귀를 이용한 분류에서는 뒤에 설명하겠지만, 각가의 속성에 가중치를 곱한 다음 서로 더한 결과를 시그모이드 함수에 입력하여 0에서 1사이의 수를 구하게 된다.


Figure 3. 시그모이드 그래프


3. 최적화를 이용한 회귀 계수 찾기


  아래의 수식은 위에 있는 시그모이드 함수의 입력인 z이며, z는 다음과 같이 구하게 된다.




  여기서 w는 가중치, x는 속성을 의미한다. 벡터 x는 입력 데이터이고, 가장 좋은 계수인 w를 찾아야 한다. 좋은 계수를 찾아야 성공적으로 분류가 가능한 분류기가 될 수 있다. 그럼 여기서 좋은 계수를 찾기 위해서 어떻게 해야 하는가? 이를 위해 최적화 알고리즘을 적용해야한다. 여기서 사용하는 최적화 알고리즘은 기울기 상승(Gradient ascent)를 이용하여 찾게 된다.


4. 기울기 상승(Gradient Ascent)


  이 알고리즘은 함수에서 최대 지점을 찾기 위해 기울기의 방향으로 이동하는 것이 가장 좋은 방법에 기반을 두고 있다. 여기서 기울기는 역삼각형(그려야함) 기호를 쓰고, 함수 f(x,y)의 기울기는 다음과 같은 방정식으로 표현한다.



  여기서 기울기는 만큼 x방향으로, 그리고 만큼 y방향으로 이동하는 것을 의미한다.

  Figure 4과 같이 기울기 상승 알고리즘은 기울기가 제공한 방향으로 한단 계 이동한다. 기울기 연산자는 항상 가장 크게 증가하는 방향으로 향하게 된다. 방향은 이러한 방법으로 결정을 하게 되고, 크기는 매개변수

에 의해 결정(즉, 이동할 거리를 조절)된다. 기울기 상승 알고리즘은 다음과 같다.



  이러한 과정은 단계의 반복 횟수를 만족하거나 알고리즘이 확실한 오차 범위 안에 있게 될때 까지 반복한다.


Figure 4. 기울기 상승을 실행하는 모습


  이것과 반대가 되는 알고리즘이 바로 기울기 하강(Gradient Descent)이다. 기울기 하강과 기울기 상승의 차이점은 위에 수식에서 플러스 대신 마이너스로 표현된다. 아래의 수식과 같은데 결국 기울기 하강은 상승과는 다르게 최대값을 찾고자 하는 것이 아닌 최소값을 찾고자하는 것이다.



  이번 포스팅에서는 로지스틱 회귀를 이용하기 위한 기본적인 배경 지식에 관해 알아보았다. 다음 포스팅에서는 이어서 실제 로지스틱 회귀에서 적합한 매개변수를 찾아서(기울기 상승법을 이용) 분류하는 방법과 기울기 상승보다 좀 더 개선된 확률적 기울기 상승(Stochastic Gradient Ascent) 알고리즘에 관해 알아보도록 하겠다.



References

[1] Sigmoid function
[2] Step Function
[3] Gradient Descent

'Machine learning' 카테고리의 다른 글

의사 결정 트리 (Decision Tree)  (1) 2015.06.22