ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 선형 회귀(Linear Regression) (1) : 파라미터 추정
    Machine Learning/etc. 2021. 6. 26. 04:21

    선형 회귀(Linear Regression)

    (1) 파라미터 추정

    (2) 모델 성능 평가 1 (평가 지표)

    (3) 모델 성능 평가 2 (가설 검정)

     

    들어가기 전에

    이 글은 내가 개인적으로 공부한 내용을 기록으로 남기고자 정리한 게시글이기 때문에, 설명이 명확하지 않은 부분이 존재하고 잘못된 내용이 존재할 수도 있어 학습으로서의 가치는 떨어질거라고 본다. 단지 참고만 하자.
    그래도 이 글을 읽으실 분들은, 혹시 이 글에서 틀린 부분이 있다면 지적해 주시면 감사하겠습니다..!

     

     

    1. 선형 회귀(Linear Regression)란?

    하나 이상의 독립 변수(Independent Variable, X)와 종속 변수(Dependent Variable, Y)간의 관계를 선형 함수로 설명하는 것

    을 말한다. 이렇게 하면 독립 변수로부터 종속 변수를 예측하는 것이 가능해진다.

    통계학에서는 도출된 모델이 변수간의 관계를 잘 설명하는지 검증하는 데에 초점을 두고, 인공지능 분야에서는 모델로부터 새로운 값을 예측하는 데에 초점을 둔다...고 한다. <인공지능을 위한 수학>피셜. 뭐 그래도 두 분야 다 데이터의 관계를 가장 잘 나타내는 모델을 만들어야 하는 건 똑같은 듯.

     

     

    2. 선형 회귀에서의 파라미터 추정 (Simple Regression에서)

    옛날에 과제로 낸 걸 재탕함. 보다시피 gradient descent를 이용해서 파라미터를 구했었다.

    일단은 직선으로 표현 가능한 단순 선형 회귀(Simple Linear Regression)만 생각해보자. (y = ax + b의 형태)

     

    직관적으로 생각해보자.

    "변수 간의 관계를 가장 잘 설명하는 모델은 무엇일까?"

     

    만약 어떤 선형회귀 모델이 존재하고, 모든 x를 모델에 넣었을 때 나온 값($\widehat{y}$)이 모든 실제 y값과 동일하다면, 이 모델은 X와 Y의 관계를 완벽하게 설명한다고 볼 수 있다.

    이에 착안한다면, 좋은 모델이란 예측값($\widehat{y}$)과 실제값(y)의 차이가 최소가 되게 하는,

    즉 모든 예측값($\widehat{y}$)과 실제값(y)의 차이의 합이 최소가 되게 하는 모델이라고 할 수 있다.

     

    즉 수식으로 나타내면 $\sum_{i=1}^n \left| y_i-\widehat{y}_i \right|$ 가 되는데, 절댓값을 사용하면 대소에 따라 부호를 바꿔줘야 하는 번거로움이 생기므로 절댓값 대신 차를 단순히 제곱하는 방식을 취한다.

    그러면 식은 다음과 같아진다. (SSE : Error Sum of the Squares)

    $$SSE = \sum_{i=1}^n \left( y_i-\widehat{y}_i \right)^2 = \sum_{i=1}^n \left( y_i-\beta_0-\beta_1x_i \right)^2 = \sum_{i=1}^n \widehat{\epsilon}_i^2$$

     

    이를 행렬로 나타내면 회귀식은 $ \widehat{Y} = X\widehat{\beta} $이 되고, SSE는 다음과 같다.

    $$  SSE = (Y - \widehat{Y})^T (Y - \widehat{Y}) = (Y - X\widehat{\beta})^T (Y - X\widehat{\beta})  $$

    (이 때, $\widehat{Y} = \left[ y_1\ y_2\ ...\ y_n \right]^T$ 인 column vector, $\widehat{\beta} = \left[ \widehat{\beta}_0\ \widehat{\beta}_0 \right]^T$ 인 column vector, X는 $ \begin{bmatrix} 1 & x_1 \\ \vdots & \vdots \\ \end{bmatrix} $ 의 구조를 갖는 행렬)

     

    이 식이 최소가 되는 $\widehat{Y}$를 구하면 되는데  $\widehat{Y}$는 $\widehat{\beta}$에 관한 식으로 나타내어지므로 $\widehat{\beta}$를 구하면 될 것이다.

     

     

    이를 최소 자승법, 최소 제곱법 (Ordinary Least Squares, OLS) 이라 한다.

    최소 자승법의 종류에는 OLS말고도 GLS 등 여러 가지가 있으나, 여기서는 가장 기본적인 OLS를 '최소자승법'이라 두겠다.

     

     

    2-1. $\widehat{\beta}$ 안의 원소($\widehat{\beta}_0, \widehat{\beta}_0$)들을 구하는 방법?

    또 들어가기 전에 한 가지 더 덧붙이자면 필자는 수학을 싫어할 뿐더러 잘 못한다. 그러므로 최대한 검토를 하긴 했으나 수학적으로 실수를 하거나 오개념이 나올 수 있음을 미리 유의하기 바랍니다.... (블로그 제목을 코딩이 아니라 수학이 싫지만 해야 해.. 로 고쳐야 하나보다.)

     

    벡터 $\widehat{\beta}$를 구하는 방법은 여러 가지가 있는데, (대표적으로 gradient descent가 있다. 또한 SVD(특이값 분해)로도 구할 수 있다고 한다. 이에 대해선 이 글 참조.) 위의 LS 식은 (각 변수에 대해) 2차식이 되므로 선형적이다. 그러므로 local minimum과 global minimum이 동일하기 때문에, $\widehat{\beta}$에 대해 미분해서 0이 될 때의 $\widehat{\beta}$ 값이 바로 SSE가 최소가 되는 $\widehat{\beta}$값이 될 것이다.

    우리가 고등학교 시절(혹은 미분적분학 배우던 새내기 시절..) 함수의 최솟값을 구했던 것과 똑같이 해 주면 되는 것이다..! 이를 정규 방정식(Normal Equation)라고 부른다.

     

    여기서 선형대수(?)적으로 접근하면 아예 행렬 자체를 두고 미분해서 해를 구하는 경우도 있던데, 나는 행렬곱 순서도 맨날 헷갈려하는 바보에다가 수학과는 담 쌓은지가 오래되어서 그냥 베이직하게.. 원소 $\widehat{\beta}_0, \widehat{\beta}_0$ 각각에 대해 편미분을 취해서 따로 해를 구하고자 한다. 행렬 단위로 미분하는 과정은 이 글을 참조하시길..! 저렇게 미분하면 Multiple 선형 회귀(독립 변수 X가 2개 이상)일 때도 해를 뚝딱 구할 수 있다.

     

    • $\beta_0$ 추정

     

    SSE를 $\beta_0$에 대해 편미분한 후, 해를 구한다.

    $$ \frac{\partial \sum_{i=1}^n \epsilon_i^2}{\partial \beta_0} = \frac{\partial \sum \left( y_i-\beta_0-\beta_1x_i \right)^2}{\partial \beta_0} $$

    $$ = -2 \left(\sum y_i - \sum \beta_0 - \sum \beta_1 x_i \right) = -2 \left( n \bar{y} - n \beta_0 - n \beta_1 \bar{x} \right) = 0 $$

    (이 때 $\bar{x} : x$의 평균)

     

    위의 식을 $\beta_0$에 대해 정리하면 다음과 같다.

    $$  \widehat{\beta}_0 = \bar{y} - \widehat{\beta}_1 \bar{x}  $$

    이 때 $\widehat{\beta}_0$는 $\beta_0$에 대한 점추정이라는 뜻이다. 이것이 갑자기 왜 붙었냐하면, 우리가 구한 $\beta_0$는 실제 모집단을 가지고 구한 파라미터가 아니기 때문이다. (실제로 모집단을 가지고 모델링하는 것은 불가능하다. 가능했다면 X와 Y에 대해 오차 0의 완벽한 상관관계를 보여주는 모델을 만들었을 것이다.) 일부 표본만 가지고 파라미터를 "추정"한 것이기 때문에, 파라미터 위에 ^이 붙는다. (틀렸으면 댓글로 알려주세요.)

     

    도출된 식을 자세히 보면 한 가지 흥미로운 점이 발견되는데, $\beta_1$을 알아야 하는 것 외에도 X와 Y의 평균 또한 알아야 해당 파라미터를 구할 수 있다. (이는 나중에 자유도 개념에서 또 한번 언급되므로, 기억해두자.)

     

    • $\beta_1$ 추정

     

    아까와 마찬가지로 SSE를 $\beta_1$에 대해 편미분한 후 해를 구한다.

    $$ \frac{\partial \sum_{i=1}^n \epsilon_i^2}{\partial \beta_1} = \frac{\partial \sum \left( y_i-\beta_0-\beta_1x_i \right)^2}{\partial \beta_1} $$

    $$ = -2 \sum x_i \left( y_i - \beta_0 - \beta_1 x_i \right) = 0  $$

     

    우리는 $ \beta_0 $를 이미 구했으므로, $ \beta_0 $자리에 구한 식을 넣어 주자.

    $$ \Rightarrow -2 \sum x_i \left( y_i - \bar{y} + \beta_1 \bar{x} - \beta_1 x_i \right) = 0 $$

    $$ \Rightarrow \sum x_i \left( x_i - \bar{x} \right) \beta_1 = \sum x_i \left( y_i - \bar{y} \right) $$

     

    양 변의 $ \sum $ 안에 있는 식들을 전개해보자. $ \beta_1 $은 $x$와 관련 없으므로 $ \sum $ 밖으로 빼 준다. 

    $$ \Rightarrow \beta_1 \sum \left( x_i^2 - x_i \bar{x} \right)  = \sum \left( x_i y_i - x_i \bar{y} \right) $$

    전개된 식을 살짝 변형한다.

    $$ \Rightarrow \beta_1 \sum \left( x_i^2 - 2x_i \bar{x} + x_i \bar{x} \right)  = \sum \left( x_i y_i - x_i \bar{y} - \bar{x} \bar{y} + \bar{x} \bar{y} \right) $$

    이 때 $ \sum x_i = n \bar{x} = \sum \bar{x} $ 임을 이용해 ($y$도 마찬가지) 식을 고친다.

    $$ \Rightarrow \beta_1 \sum \left( x_i^2 - 2x_i \bar{x} + \bar{x}^2 \right)  = \sum \left( x_i y_i - x_i \bar{y} - \bar{x} y_i + \bar{x} \bar{y} \right) $$

     

    좌변은 완전제곱식 꼴이고 우변은 일차식의 곱으로 표현된다.

    $$ \Rightarrow \beta_1 \sum \left( x_i - \bar{x} \right) \left( x_i - \bar{x} \right) = \sum \left( x_i - \bar{x} \right) \left( y_i - \bar{y} \right) $$

     

    위의 식을 $ \beta_1 $에 대해 정리하면 다음과 같다.

    $$  \widehat{\beta}_1 = \frac {\sum \left( x_i - \bar{x} \right) \left( y_i - \bar{y} \right)} {\sum \left( x_i - \bar{x} \right) \left( x_i - \bar{x} \right)} = \frac {SS_{xy}} {SS_{xx}}  $$

    강의 자료에는 각 변수의 편차의 곱을 SS라고 두었는데, (추정컨대 Sum of squares, 제곱합이라는 의미인 듯 하다.) 다른 곳을 찾아봐도 SS를 쓴 곳은 많이 없어서 원래 식과 SS식, 두 가지 표기를 병기하려 한다.

     

    $ \beta_0 $을 구했을 때와는 다르게, $ \beta_1 $은 X와 Y값만 알면 파라미터값을 구할 수 있다. 즉 먼저 $ \beta_1 $부터 구하고, $ \beta_0 $에 해당 결과를 대입해 $ \beta_0 $도 마저 구하면 되는 것이다.

     

     

    3. 용어 정의

    여태까지는 "파라미터", $ \widehat{\beta}_0 $, $ \widehat{\beta}_1 $ 등으로 뭉뚱그려 말했는데. 다음 글 (2)에 들어가기 앞서 이들을 뭐라고 불러야 하는지 확실하게 짚고 넘어가도록 하겠다.

     

    • $ \widehat{\beta}_1 $ : Slope

    식 $ y = \beta_0 + \beta_1 x $ 에서의 위치를 봐도 알 수 있듯이 해당 변수는 slope, 기울기라 불린다. Multi Linear Regression일 경우 slope가 여러 개이다.

     

    • $ \widehat{\beta}_0 $ : Y-Intercept

    이것도 짐작했겠지만 해당 변수는 Y-Intercept, y절편이라 불린다. 혹은 앞을 생략하고 그냥 Intercept로도 많이 불리더라.. Multi Linear Regression이어도 intercept는 한 개이다.

     

    그리고 선형 회귀 모델을 구성하는 각 파라미터들은, "파라미터" 라고 불리기도 하지만 수학에서처럼 coefficient(계수)라고 불리기도 한다. 다음 글 (2)에 선형 회귀 예제를 들 텐데, 그 예제에서 사용한 statsmodel 라이브러리에서도 각 파라미터들을 'coefficient'라 칭한다.

     

     

    4. Multi Linear Regression에서는?

    2-1의 방법(편미분)을 써서 X가 2개일 때 $ \widehat{\beta}_1 $값을 도출하였으나, 결과가 유의미한 것 같지 않아 따로 적지는 않는다. X가 2개일 수도, 3개일 수도 혹은 수십개일 수도 있는데 언제까지 편미분만 하고 있을 순 없지 않은가. 그 때는 아까 언급했던, 행렬 단위로 미분을 수행하면 된다.

    참고로, 그렇게 미분을 수행하였을 때 얻는 결과는 다음과 같다. (아까 첨부한 링크에서 유도 과정을 볼 수 있다.)

    $$  \widehat{\beta} = \left( X^TX \right) ^{-1} X^T y  $$

     

    그런데 식을 보아하니 역행렬의 불안한 기운(?)이 느껴진다. 만약 역행렬 $ \left( X^TX \right) ^{-1} $ 이 존재하지 않는다면..? 이 글에서는 불필요한 feature들을 제거하거나 regularization을 하면 이 문제를 해결할 수 있다고 한다.

    뭐... 정 안되면 gradient descent 쓰면 된다!

     

     

     

     

    내용이 적어서 생각보다 빨리 끝났다... 이제 다음 글이 문제지만..

    그럼 다음 글에서 만나요 :-)

    오탈자, 틀린 부분 있으면 언제든지 지적해 주세요.

    댓글

Life is hard, so am I