Hello AI
[Ch.01] 선형회귀란(Linear Regression) 본문
1. Notation in this chapter
x: 독립변수 | y: 종속변수 | p, q: 파라미터 | Simple Linear Regression: 단순 선형회귀 | Multiple Linear Regression: 다중 선형회귀 | cost function, loss function: 비용함수 |
2. Regression 과 Linear Regression 의 개념
2-1. Regression 에 대한 간단한 기본 개념.
회귀(Regression) 란 여러 변수로 구성된 데이터들이 주어져 있을 때, 특정 변수와 다른 나머지 변수 간 관계를 알아내는(모델링하는) 과정을 말한다. 쉽게 이해하기 위해 아래와 같이 아주 간단한 식이 있다고 가정한다.
\[ y = px+q\]
\(x\) 와 \(y\) 모두 '변수' 인데, 우변의 \(x\) 는 입력값이 대입되는 독립변수, 좌변의 \(y\) 는 출력값을 나타내는 종속변수가 된다. 파라미터 \(p\) , \(q\) 는 주어진 데이터에서 결정이 되는 파라미터들이다. 이 때 종속변수 \(y\) 와 독립변수 \(x\) 사이의 관계를 알아보는 회귀를 진행해 볼 수 있을 것이다. 일례로 아래와 같은 데이터들이 주어져 있다고 할 때,
\(x\) | \(y\) |
1 | 4 |
2 | 7 |
3 | 10 |
4 | 13 |
Table 1. 주어진 \(x\) 와 \(y\) 데이터.
두 변수간 상관도는 다음과 같이 그려볼 수 있다.
2-2. Linear Regression 에 대한 간단한 기본 개념.
그럼 이 상관도의 점들 사이에 직선을 긋고, 이 직선의 방정식을 가지고 두 변수의 관계를 알아볼 수가 있는데, 이 때 점들 사이를 나누는 직선을 회귀 직선(Regression Line)이라고 한다. 만약 데이터들이 Table 1의 예시처럼 아주 쉽게 주어진다면 Figure 1 처럼 상관도를 그리고, 그 위에 똑바른 직선을 그어 두 변수간 관계를 모델링하는 회귀가 쉽게 완성 될 것이다. 하지만 현실세계에서의 데이터는 이와 다르게 복잡하며, 만약 아래의 Figure 2-(a) 처럼 데이터들이 주어져 있다면 이 땐 직선을 Figure 2-(b)와 같이 (최대한 두 변수 간 관계가 잘 반영되도록) 그려서 두 변수간 관계를 모델링하는 회귀를 해 볼 수 있다.
어쨌든 결론적으로, 이렇게 직선(line)을 통해 변수들 간 관계를 알아보는 방법을 두고 선형 회귀(Linear Regression) 라고 부를 수 있다.
3. Model 의 파라미터를 구하기 위한 비용함수.
3-1. model이란?
쉽게 생각해서
\[ y = px+q\]
가 바로 모델이라고 생각하면 된다. 현재 이 모델은 파라미터 \(p\) , \(q\) 를 통해 규정 되어 있다. 위 2-2에서 '두 변수 간 관계가 잘 반영되도록 직선을 그린다' 라고 했는데, 변수 간 관계가 잘 반영되려면 이 파라미터들의 값을 최대한 실제 데이터들에 맞게 추정을 해야한다. 회귀 부분에서 사용했던 Table 1의 예시를 보면, 다음과 같이 정리할 수가 있겠다.
1. Table 1. 을 보았을 때 우리는 종속변수 y와 독립변수 x 간 관계가 \[ y = 3x+1\] 임을 알 수 있다.
2. 이에 우리는 모델을 임의로 설계 할 수 있다. 바로 \[ y = px+q\] 이렇게.
3. 2에서 설계한 모델에 있는 파라미터 p, q 각각이 3, 1 이 되게 회귀 직선(Regression Line)을 그어 두 변수간 관계를 모델링하는 회귀를 완성해 본다.
3-2. 비용함수 (cost function 또는 손실함수(loss function), 목적함수(objective function) 이라고도 불림.)
일반적으로 변수들(독립변수들) 앞에 붙은 파라미터를 가중치(weight), 그 외에 상수값을 편향(bias)라고 부르는데, 한 가지 주의할 점은 데이터 중심의 회귀방정식에서는 x, y 들이 변수였으나 비용함수에서는 파라미터들(이를테면 p, q)가 변수가 된다. 즉 비용함수는 파라미터들을 알아내기 위한 방정식이라는 것이다.
가장 간단하게 사용해 볼 수 있는 비용함수는 어떤 형태일까? 바로 '실제 데이터 중 종속변수의 값 - 우리가 설계한 모델에 데이터를 대입해 나온 예측값' 을 비용함수로 사용하는 것이다. 즉
\[ C_k (Cost function) = \sum_{k=1}^4 y_k - (px_k+q)\]
다음과 같이 말이다. p와 q를 각각 2, 1로 설계했다고 하면 Table 1의 data를 기준으로 k = 1,2,3,4 에 해당하는 각각의 yk값 4, 7, 10, 13 이 얻어지고, 내가 설계한 모델에 대해서는 2*1+1, 2*2+1, 2*3+1, 2*4+1 즉 3, 5, 7, 9 가 얻어진다. 이때의 cost function의 값은 (4-3=1), (7-5=2), (10-7=3), (13-9=4) 를 모두 합친 1+2+3+4 = 10 이 얻어진다. 만약 p와 q를 실제값에 맞게 3과 1로 설정했다면 cost function 값은 0, 0, 0, 0 의 '최소화(minimize)'가 가능하며, 이렇게 비용함수가 최솟값이 되는 방향으로 파라미터를 설정하는 작업을 최적화(Optimization) 이라고 한다.
그러나 이 역시, 실제 데이터는 매우 복잡하다는 점을 감안해야 하며 만약 yk값이 4, -12, 389, 22 와 같이 얻어진다면 cost function의 값은 (4-3 =1), (-12-5=-17), (389-7=382), (13-22=-9) 1-17+382-9 = 357 이라는, 뭔가 분석하기 어려운 값이 나온다. 따라서 일반적으로 cost function으로 사용 되는 방정식은 보통 다음과 같다.
\[ C_k (Cost function) = \sum_{k=1}^m \left [y_k - (px_k+q)\right ]^2 \]
또는 아래와 같이 쓰이기도 한다. 이 cost function을 사용하면 실제 데이터와 예측 데이터 간 오차가 - 값으로 나오지 않는다. 제곱을 했으므로.
\[ C_k (Cost function) = \frac{1}{2m} \sum_{k=1}^n \left [y_k - (px_k+q)\right ]^2 \]
위 식에서 시그마 앞에 보면 1/2m 이 곱해져 있다. 데이터의 개수인 1/m 으로 나누는 이유는 저렇게 제곱한 오차에 대한 평균을 얻기 위한것이다. 1/2 의 의미는 나중에 나오겠지만 위 식을 미분했을때 나오는 2 를 제거하기 위해서다.
4. 미분 그리고 벡터 및 행렬의 연산을 이용한 파라미터 구하기.
4-1. 파라미터의 값을 어떻게 실제 데이터와 가깝게 구하는가?
다시 한 번 cost function의 식을 보면 다음과 같다.
\[ C_k (Cost function) = \frac{1}{2m} \sum_{k=1}^n \left [y_k - (px_k+q)\right ]^2 \]
이 때 실제 데이터가 (x=1, y=4) 그리고 (x=2,y=8) 이렇게 2개만 주어져있고 설계한 모델은 px 이라고 가정해보겠다.(편의상 q는 생략.) cost function을 구한 결과는 다음과 같다.
\[ C_k (Cost function) = \frac{1}{2*2(=m)} \left [(4 - (1*p))^2 + (8 - (2*p))^2 \right ] \]
\[ = \frac{1}{2*2(=m)} \left [16-8p+p^2+64-32p+4p^2 \right ] \]
\[ = \frac{1}{4} \left [5p^2-40p+80 \right ] \]
즉 cost function 이 아래로 볼록한(보통 이를 'convex' 하다고 말함.) 2차 방정식 형태가 되는데, 이를 미분을 해서 기울기가 0인 지점을 계산하면 그것이 곧 cost function 이 최소화되는 지점이다. 그럼 cost function이 최솟값이 되는 이 지점의 파라미터로 내가 설계한 모델의 파라미터를 설정하면 이것이 곧 최적화(Optimization) 가 된다.
출처: 처음 배우는 딥러닝 수학