Blog | Tag | Local | Guest | Login | Write |  RSS
2008/10/31에 해당되는 글 2건
2008.10.31 :: Linear Regression

1. File Layout

 앞서 설명한 File heading 에 이어 다음의 내용을 적어준다.

/** ***************************************************************************** **
 ** includes                                                                                                         **
 **  ***************************************************************************** **/
include 되는 헤더파일을 작성.
파일 위치 경로는 makefile 에 작성.



/** ***************************************************************************** **
 ** defines                                                                                                           **
 **  ***************************************************************************** **/
#define 이용한 constant, function macro 의 순서로 작성.


/** ***************************************************************************** **
 ** typedef                                                                                                           **
 **  ***************************************************************************** **/
스트럭쳐.


/** ***************************************************************************** **
 ** globals                                                                                                           **
 **  ***************************************************************************** **/
2개 이상의 파일에서 공유되는 전역변수.


/** ***************************************************************************** **
 ** locals                                                                                                             **
 **  ***************************************************************************** **/
이 파일에서만 사용되는 변수.


/** ***************************************************************************** **
 ** forward declarations                                                                                        **
 **  ***************************************************************************** **/
함수 프로토 타입정의



2. Function Comments

- 각 function definition 에 관한 정보 작성.
- 각 function definition 의 앞부분에 위치.

-  형 태

   /** ************************************************** **
    ** Functions : Function name                                    **
    ** Synopsis : Function 이 사용하는 알고리즘 등을 기술  **
    ** External Effects : 참조되는 전역변수                       **
    ** Parameters : 파라미터의 의미                                 **
    ** Return : 리턴값 및 의미                                            **
    ** Error : 에러 발생시 리턴되는 값과 의미                       **
    ** *************************************************** **/



3. Layout

3.1 Source File

 - 한줄에 하나의 명령문 사용.
 - 한 line 은 80 column 을 넘지 않는다.
 - 한 function 내의 실행문은 300 ~ 500 라인을 넘기지 않는다.(주석포함시 600 ~ 1000)

 

Linear Regression
Logistic Regression은 training set으로부터 주어진 vector data를 이용하여 data들의 방향을 찾고 실제 제공하지 않은 

data들을 예측할 수 있는 algorithm이다. 이 algorithm을 구현하는 방법은 다음과 같은 방법이 있다.

1. LMS(Least Mean Square) algorithm
2. The normal equations

예를들어 주식 시장을 예측할 수 있는 algorithm을 구현하려고 하면, 주식 가격을 결정할 수 있는 factor는 여러가지가

있다. 그 factor중에서 기업 영업 실적(x1), 업종의 경기(x2), 우리나라의 경기(x3) 만을 놓고 주식 시장을 예측한다고 하자.

그럼 이 3개의 요인은 다음과 같은 수식으로 표현할 수 있다.


이 수식에서 training set x1, x2, x3가 주어지고 θ0, θ1, θ2, θ3값을 찾는다면 새로운 data값 x1, x2, x3에 대해 h(x)를 찾을

수 있다. 결국 이 값을 이용해 h(x)를 구할 수 있게 되고, 우리가 값을 예측할 수 있게 되는 것이다. (물론 더 많은 factor들과

다른 다양한 이론들이 필요하겠지만...)

결국 여기에 맞는 θ0, θ1, θ2, θ3를 찾는 것이 regression의 목표이다.

위 수식은 간단히 다음과 같이 표현할 수 있다.

( theta, x는 vector, T 는 transpose )
위 식의 vector θ를 찾기 위한 cost function은 다음과 같이 정의한다.


cost function을 가지고 우리가 원하는 값 θ를 찾기 위해서는 J(θ)값을 minimize시키면 된다.

이 알고리즘을 구현하는 방법 3가지중 LMS algorithm에 대해 소개한다.


LMS(Least Mean Square) algorithm

이 방법은 θ를 초기에 예상하는 값으로 설정한 후 이 값이 cost function의 minize값에 따라서 어떻게 변하는지 구하면 된다.

이 θ값을 update하기 위한 rule은 다음과 같다.

eq=\theta_j := \theta_j - \alpha\frac{\delta}{\delta\theta_j}J(\theta)

eq=\frac{\delta}{\delta\theta_j}J(\theta)  이 값은 위의 cost function을 differentiation한 값이다. 이 값을 이용해서 eq=\theta_j 를 update시켜 값을 구한다.

eq=\frac{\delta}{\delta\theta_j}J(\theta)  이 값은 다음과 같다.

eq=\frac{\delta}{\delta\theta_j}J(\theta) = \frac{\delta}{\delta\theta_j}\frac{1}{2}(h_\theta(x) - y)^2 
= (h_\theta(x) - y)x_j

이 값의 유도는 생략한다. 이 값을 위의 update rule에 적용하면 다음과 같다.

eq=\theta_j := \theta_j + \alpha (y^i - h_\theta(x^i) )x^i_j
이 방법을 LMS update rule이라 한다.

이 update rule을 이용해 eq=\theta 값을 찾을 수 있다.

matlab을 이용해 test해 보았다. random하게 200개의 sample을 만들었다. 우선 원래 선은 y=x이고 x는 0부터 20까지 200개의

random data에 gaussian distribution을 이용하여 noise를 추가하였다. gaussian distribution의 mean = 0, variance = 20을

이용하였다.

이를 이용해 regression한 결과는 다음과 같다.

( 그림 1 - test 1 )

( 그림 2 - test 2 )


data를 random하게 생성하였지만 구한 line은 동일하다는 것을 알 수 있다.

나머지 The normal equations 방법은 직접 찾아보길....

다음은 classifier의 고전인 perceptron에 대해서 알아보자.