벡터의 정사영
본문공부한 시간 \(x\)(시간)과 점수의 향상 \(y\)(점)를 세 학생에게서 쟀더니 \((0, 1)\), \((1, 3)\), \((2, 4)\)였다. 세 점은 한 직선 위에 있지 않아서 \(y = c + mx\)가 세 점을 모두 지나게 할 수는 없다. 그래서 세 점과의 오차의 제곱의 합이 가장 작은 직선을 고르기로 했다. 그 직선은 \(y = 1.17 + 1.5x\)라고 하는데, 이 직선은 어떻게 구했을까? 벡터의 정사영이 이 문제와 무슨 관계가 있을까?
1.7.1가장 가까운 점은 수선의 발
벡터 \(\vec b\)를 벡터 \(\vec a\) 방향의 직선 위의 점 \(t\vec a\)로 가장 가깝게 나타내려면, \(\vec b - t\vec a\)의 길이가 가장 작은 \(t\)를 찾는다. 그 점은 \(\vec b\)의 끝에서 직선에 내린 수선의 발이므로, 오차 \(\vec b - t\vec a\)가 \(\vec a\)와 수직이어야 한다. 내적으로 쓰면 \(\vec a\cdot(\vec b - t\vec a) = 0\)이고, 여기서 \(t = \dfrac{\vec a\cdot\vec b}{\vec a\cdot\vec a}\)이다. 이 \(t\vec a\)가 \(\vec b\)의 \(\vec a\) 위로의 정사영이다. 이 생각은 차원과 상관없이 성립하며, 직선 대신 평면이나 더 높은 차원의 부분공간 위로도 정사영할 수 있다.
\(\vec b\)의 \(\vec a\) 위로의 정사영은 \(\mathrm{proj}_{\vec a}\vec b = \dfrac{\vec a\cdot\vec b}{\vec a\cdot\vec a}\vec a\)이다. \(\vec b\)를 벡터 \(\vec a_1, \vec a_2\)가 생성하는 부분공간 위로 정사영한 \(c\vec a_1 + m\vec a_2\)는 오차 \(\vec b - c\vec a_1 - m\vec a_2\)가 \(\vec a_1\)과 \(\vec a_2\)에 모두 수직이 되도록 정하며, 이것이 오차의 크기를 가장 작게 한다.
세 점을 지나는 직선 \(y = c + mx\)를 찾는 문제를 벡터로 쓰면, \(\vec 1 = (1, 1, 1)\), \(\vec x = (0, 1, 2)\), \(\vec y = (1, 3, 4)\)에 대해 \(c\vec 1 + m\vec x = \vec y\)를 푸는 일이다. 해가 없다는 것은 \(\vec y\)가 \(\vec 1\)과 \(\vec x\)가 생성하는 평면 밖에 있다는 뜻이다. 그래서 \(\vec y\)를 그 평면 위로 정사영한 벡터가 \(\vec y\)에 가장 가깝고, 그 계수가 오차의 제곱의 합을 가장 작게 하는 \(c\), \(m\)이다.1
1.7.2수직 조건이 만드는 방정식
오차 벡터 \(\vec e = \vec y - c\vec 1 - m\vec x\)가 \(\vec 1\)과 \(\vec x\)에 모두 수직이라는 조건을 내적으로 쓰면 \(\vec 1\cdot\vec e = 0\), \(\vec x\cdot\vec e = 0\)의 두 방정식이 된다. 첫째 조건은 오차의 합이 0이라는 뜻이어서, 최소제곱 직선은 점들의 평균점을 지난다. 둘째 조건은 오차에 \(x\)를 곱한 합이 0이라는 뜻이다. 두 방정식을 정규방정식이라 하며, 미지수 \(c\), \(m\)에 대한 연립일차방정식이어서 쉽게 풀린다.
1.7.3예제 풀이
처음 질문의 세 점에 대해 정규방정식을 세워 최소제곱 직선을 구하여라. 오차 벡터가 \(\vec 1\)과 \(\vec x\)에 수직임을 확인하고, 오차의 제곱의 합을 구하여라.
\(\vec 1\cdot\vec 1 = 3\), \(\vec 1\cdot\vec x = 3\), \(\vec x\cdot\vec x = 5\), \(\vec 1\cdot\vec y = 8\), \(\vec x\cdot\vec y = 11\)이므로 정규방정식은 \(3c + 3m = 8\), \(3c + 5m = 11\)이다. 빼면 \(2m = 3\)이므로 \(m = 1.5\), \(c = 7/6 \approx 1.17\)이다. 직선은 \(y = 7/6 + 1.5x\)이다.
직선 위의 값은 \(7/6\), \(8/3\), \(25/6\)이므로 오차는 \(\vec e = (1 - 7/6,\ 3 - 8/3,\ 4 - 25/6) = (-1/6, 1/3, -1/6)\)이다. \(\vec 1\cdot\vec e = -1/6 + 1/3 - 1/6 = 0\), \(\vec x\cdot\vec e = 0 + 1/3 - 1/3 = 0\)이어서 둘 다 수직이다. 오차의 제곱의 합은 \(1/36 + 1/9 + 1/36 = 1/6\)이다. 즉 해가 없는 연립방정식은 목표 벡터를 만들 수 있는 부분공간 위로 정사영해 가장 가까운 답을 얻으며, 오차가 그 부분공간에 수직이라는 조건이 최소제곱 직선의 방정식을 준다.
아래 탐구 카드에서 비탈에서 썰매를 끄는 힘을 정사영으로 나누어 보고, 여러 점에 가장 잘 맞는 직선을 최소제곱으로 찾아보자.
- 최소제곱법은 1805년 프랑스의 르장드르가 발표했고, 가우스는 1801년 소행성 세레스의 궤도를 이 방법으로 계산해 태양 뒤로 사라졌던 세레스가 다시 나타날 위치를 맞혔다. 오늘날 자료에 직선이나 곡선을 맞추는 거의 모든 계산이 이 방법을 쓴다.
벡터 \(\vec b\)의 \(\vec a\) 위로의 정사영은 \(\dfrac{\vec a\cdot\vec b}{\vec a\cdot\vec a}\vec a\)로, 오차가 \(\vec a\)에 수직이 되는 가장 가까운 점이며, 이 생각은 어떤 차원의 부분공간 위로도 넓혀진다. 해가 없는 연립방정식은 목표 벡터를 부분공간 위로 정사영해 오차의 제곱의 합이 가장 작은 답을 얻는다. 처음 질문의 세 점에 대한 최소제곱 직선은 오차가 두 벡터에 수직이라는 정규방정식에서 \(y = 7/6 + 1.5x\)로 정해진다.