선형 회귀는 너무 쉬워 2
시간 제한1초메모리 제한1024 MB
n개의 점이 주어질 때 최소제곱 회귀직선을 구하고, 해가 유일하지 않으면(모든 x좌표가 같으면) EZPZ를 출력한다.
문제
유림이는 선형 회귀에 자신이 있다. 그래서 MatKor 동아리에서 선형 회귀에 관한 수업을 할 때 집중하지 않았다. 당시 강사였던 동우는 이를 못마땅하게 여겨 유림이에게 다른 문제 선형 회귀는 너무 쉬워 1을 내주었고, 유림이는 문제를 쉽게 풀었다.
동우는 이제 기존의 선형 회귀 문제를 내주었다. 데이터 이 주어졌을 때, 이를 가장 잘 설명하는 일차함수 를 찾는 문제이다. 여기서 주어진 점들 에 대해 를 통해 얻는 추정치 로 정의하고, 실제 에서 예측치인 를 뺀 값 를 잔차 로 정의한다.
선형 회귀 문제는 이 잔차 제곱의 합이 에 가장 가깝도록, 즉 이 최소가 되도록 하는 실수 와 를 찾는 문제이다. 이 값이 최소가 되도록 하는 와 를 , 라고 한다. 여기서 은 를, 은 를 나타낸다.
동우는 유림이에게 주어진 점들에 대해 잔차 제곱의 합이 최소가 되도록 하는 실수 와 를 구해보라는 문제를 내주었다.
그러나 유림이는 이미 답을 알고 있고, 바로 코딩하기로 했다. 답은 다음과 같다.
-
먼저 의 합을 , 의 합을 , 의 합을 , 의 합을 라 하고, 이를 구하자. 그렇다면 와 는 경우에 따라 다음과 같다.
- 만약 라면 아래와 같이 답을 구할 수 있다. \[\begin{align*}a_2&=\frac{nS_{xy}-S_xS_y}{nS_{xx}-S_x^2}\\ b_2&=\frac{S_y-a_2S_x}{n}\end{align*}\]
- 계산 중 분자와 분모에 대해 의 큰 수가 등장할 수 있음에 유의해 적절한 자료형을 사용하도록 하자.
- 만약 이라면 가능한 와 쌍이 유일하지 않고 여러 개 존재한다.
- 만약 라면 아래와 같이 답을 구할 수 있다. \[\begin{align*}a_2&=\frac{nS_{xy}-S_xS_y}{nS_{xx}-S_x^2}\\ b_2&=\frac{S_y-a_2S_x}{n}\end{align*}\]
위의 결과에 대한 구체적인 증명 과정은 아래 노트에 있으므로, 관심이 있다면 나중에 읽어보자.
입력
첫 줄에 데이터의 개수를 의미하는 정수 이 주어진다.
두 번째 줄부터 개의 줄에 걸쳐 한 줄에 하나씩 점의 좌표를 나타내는 정수 와 ()의 값이 주어진다.
이때, 서로 같은 점이 여러 번 주어질 수 있음에 유의한다.
출력
첫 번째 줄에 의 값이 에 가장 가깝도록 하는 와 가 유일하게 존재한다면, 이를 공백으로 구분하여 출력한다
만약 답으로 가능한 와 쌍이 여러 개 존재한다면, 첫 줄에 EZPZ를 출력한다.
정답과의 절대 혹은 상대 오차가 이하라면 정답으로 간주한다.
힌트
선형 회귀식을 구하는 방식은 행렬을 이용하는 법, 미분을 이용하는 법 등 다양하지만 다음과 같은 방식을 소개하겠다.
<과정>
선형 회귀를 하기 위해 을 0과 가장 가깝게 만들라는 것은, 각 오차의 제곱들의 합이므로 각 항이 0보다 커, 해당 식을 최소로 만드는 와 를 찾으면 된다. 이때, 해당 값이 와 가 될 것인데 그 말은, 를 만족해야 한다는 것이다. 즉, 일 때, 의 최솟값일 때 의 값이 결국 가 될 것이고, 반대로 일 때로 고정하면 도 최솟값이다. 즉, 서로 다른 변수에 대해 고정하고 미분했을 때 0이 나오는 와 를 찾으면 된다. 즉, , 을 만족시키는 와 를 찾으면 된다. 즉, 이를 Gradient 벡터라고 정의하고 을 구하면 된다.
여기서 를 들의 합, 를 들의 합, 를 들의 합, 를 들의 합으로 정의하자. 수식으로 나타내면 , , , 가 된다. 우선 이 값들을 먼저 구해 놓은 뒤, Gradient 벡터를 보면 다음과 같다.
\frac{\partial f}{\partial a} $$= \frac{\partial}{\partial a}\displaystyle\sum\_{i=1}^n (ax\_i+b-y\_i)^2 $$= \displaystyle\sum\_{i=1}^n{\frac{\partial}{\partial a}\left( (ax\_i+b-y\_i)^2\right)}$$= 2\displaystyle\sum\_{i=1}^n{x\_i(ax\_i+b-y\_i)}$$=2\left(a\displaystyle\sum\_{i=1}^n{x\_i^2}+b\displaystyle\sum\_{i=1}^n{x\_i}-\displaystyle\sum\_{i=1}^n{x\_iy\_i}\right)이고, 이 값이 일 때 최적이므로, 을 만족한다. 이 식을 이라 하자.
마찬가지로 \frac{\partial f}{\partial b} $$= \frac{\partial}{\partial b}\displaystyle\sum\_{i=1}^n (ax\_i+b-y\_i)^2 $$= \displaystyle\sum\_{i=1}^n{\frac{\partial}{\partial b} \left((ax\_i+b-y\_i)^2\right)}$$= 2\displaystyle\sum\_{i=1}^n{(ax\_i+b-y\_i)}$$=2\left(a\displaystyle\sum\_{i=1}^n{x\_i}+b\displaystyle\sum\_{i=1}^n{1}-\displaystyle\sum\_{i=1}^n{y\_i}\right)이고, 이 값이 일 때 최적이므로, 을 만족한다. 이 식을 라 하자.
의 식을 변변 계산하면, 가 된다.
여기서 으로 생각하면, 라는 것은 코시-슈바르츠 부등식을 통해 쉽게 알 수 있다.(혹은 분산이 0보다 크며, 제곱의 평균에서 평균의 제곱을 뺀 값이라는 성질을 통해 알 수 있다) 또한, 등호는 모든 좌표가 같을 때라는 것 역시 등호 성립 조건에서 알 수 있다.
<결론>
- 만약 라면, 을 만족한다. 여기서 구한 를 의 에 대입하면, 가 된다. 즉, 이 식에 값을 넣고 계산하여 최적해를 구할 수 있다.
- 만약 이라면, 코시-슈바르츠 부등식 혹은 분산과 0의 등호 조건과 같으므로, 모든 의 좌표가 같다는 것을 의미하고, 그 값을 라 하자. 가 이고 일 때, 최솟값을 가진다면, 이고 일 때도 이므로, 마찬가지로 최솟값을 가진다. 즉, 가능한 와 쌍이 여러 개 존재한다.
<추가 증명>
추가로, Gradient 벡터(변수가 여러 개일 경우는 Jacobian Matrix)를 한 번 더 편미분해 구한 것을 Hessian Matrix라고 부른다. 이는 로 표현할 수 있다.
이 경우 Hessian Matrix를 보면, , , 이다. 즉, 이 변수 및 조건과 관계없이 성립한다는 사실을 알 수 있고, 이는 결국 점의 좌표 관계없이 와 두 축에 대해 convex 함을 의미하며, local minimum 즉, 위에서 구한 와 가 global minimum도 된다는 것을 알 수 있다.