68강 심화 5에서 과결정계를 다뤘습니다. 방정식이 미지수보다 많으면 정확한 해가 대개 없습니다.
그런데 그런 문제가 가장 흔합니다. 데이터를 모아 모형을 맞추는 일이 전부 그 모양입니다. 관측이 백 개이고 파라미터가 셋이면 방정식 백 개에 미지수 셋입니다.
그러면 포기합니까. 아닙니다. 정확히 맞출 수 없으면 가장 가깝게 맞춥니다.
이 문제의 답이 이미 준비되어 있습니다. 74강에서 잔차가 좌영공간에 있어야 함을 보았고, 심화 4에서 그것이 세 줄 만에 정규방정식이 됨을 예고했습니다. 80강에서 정사영 행렬을 만들었고, 81강에서 QR로 푸는 법을 배웠습니다.
이 강의는 그 조각들을 하나로 묶습니다. 그리고 왜 이 방법이 옳은 답인지를 세 가지 관점으로 확인합니다. 기하, 미분, 통계입니다.
문제. , 를 봅니다.
(1) 에 해가 있습니까?
(2) 없다면 무엇을 구해야 합니까?
(3) 그 문제를 기하로 그리세요.
생각의 실마리. 68강 문제 4의 판정법을 씁니다. 와 를 비교합니다.
풀이. (1) 없습니다. 검산에서 이고 입니다. 상수항을 붙이니 계수가 올랐으므로 해가 없습니다.
(2) 정확히 만족할 수 없으니 오차를 가장 작게 만듭니다.
(3) 는 언제나 안에 있습니다. 는 그 밖에 있습니다.
64강 문제 2의 최소 거리 문제이며, 답은 정사영입니다.
이 문제에서 배우는 것: 최소제곱 문제.
최소제곱. 에 해가 없을 때
를 최소제곱 해라 하고, 를 잔차라 합니다.
왜 제곱을 최소화하는가. 이유가 여럿입니다.
| 이유 | 내용 |
|---|---|
| 기하 | 유클리드 거리이므로 정사영이 답입니다 |
| 미분 | 이차함수라 미분이 선형이고 풀립니다 |
| 통계 | 오차가 정규분포면 최대가능도 추정입니다 |
| 계산 | 닫힌 형태의 해가 있습니다 |
다른 기준도 가능합니다. 절댓값의 합을 최소화하면 중앙값 회귀가 되고, 최댓값을 최소화하면 체비셰프 근사가 됩니다.
| 기준 | 이름 | 성격 |
|---|---|---|
| \sum r_{i}^ | 최소제곱 | 이상치에 민감 |
| 최소절대편차 | 이상치에 강건 | |
| 최소최대 | 최악을 관리 |
첫째 줄만 선형대수로 풀립니다. 나머지는 선형계획이나 반복법이 필요합니다. 그 편의가 최소제곱이 널리 쓰이는 큰 이유이며, 이상치에 민감하다는 대가를 치릅니다.
바로 확인 1.
확인 1-1. 최소제곱 문제를 식으로 쓰세요.
답. 입니다.
확인 1-2. 기하적으로 무엇을 찾는 것입니까?
답. 열공간 위에서 에 가장 가까운 점입니다.
확인 1-3. 제곱을 쓰는 대가를 하나 쓰세요.
답. 이상치에 민감합니다.
문제. 문제 1의 상황에서 최적 조건을 찾습니다.
(1) 잔차가 만족해야 할 조건을 기하로 쓰세요.
(2) 그것을 행렬식으로 옮기세요.
(3) 해를 구하세요.
생각의 실마리. 64강 문제 2에서 최소 거리를 주는 점은 수직으로 내린 발이었습니다. 그러면 잔차가 와 수직입니다.
풀이. (1) 가 열공간의 모든 벡터와 수직이어야 합니다.
(2) 열공간과 수직인 것은 74강 문제 3에서 좌영공간이었습니다.
풀어 쓰면
세 줄 만에 나왔습니다.
(3) 검산에서
이고 풀면 입니다. 잔차에 대해 이 정확히 성립하고 입니다.
이 문제에서 배우는 것: 정규방정식.
정규방정식.
이 방정식의 해가 최소제곱 해입니다.
"정규"는 수직을 뜻합니다. 잔차가 수직이라는 조건에서 나왔기 때문입니다.
이 방정식은 언제나 해를 가집니다. 이기 때문이며, 마지막 등호는 73강 심화 2의 에서 나옵니다.
유일할 조건도 거기서 나옵니다.
73강 심화 2에서 증명한 것입니다. 이므로 두 영공간이 같습니다.
열이 독립이면
표기로는 이렇게 쓰지만 계산은 이렇게 하지 않습니다. 81강 문제 5에서 본 대로 조건수를 제곱하기 때문입니다. 문제 5에서 다시 짚습니다.
바로 확인 2.
확인 2-1. 최적 조건을 기하로 쓰세요.
답. 잔차가 열공간과 수직입니다.
확인 2-2. 정규방정식을 쓰세요.
답. 입니다.
확인 2-3. 해가 유일할 조건을 쓰세요.
답. 의 열이 일차독립이어야 합니다.
문제. 문제 2의 가 최소임을 확인합니다.
(1) 다른 에서 오차를 재세요.
(2) 일반적으로 증명하세요.
(3) 미분으로도 확인하세요.
생각의 실마리. (2)에서 임의의 로 두고 오차를 전개합니다. 직교 조건 때문에 교차항이 사라집니다.
풀이. (1) 검산에서 세 방향으로 움직여 봅니다.
| \mathbf | |
|---|---|
| \mathbf |
모두 큽니다.
(2) 전개합니다.
노름의 제곱을 계산하면
마지막 항이 입니다. 이기 때문입니다.
피타고라스 정리입니다. 검산에서 두 경우 모두 좌변과 우변이 소수 열째 자리까지 같습니다.
(3) 미분으로도 확인합니다. 을 전개하면
이고 그래디언트가
입니다. 이 정규방정식입니다.
이 문제에서 배우는 것: 세 관점이 같은 식을 줍니다.
| 관점 | 조건 | 나오는 식 |
|---|---|---|
| 기하 | 잔차가 수직 | A^{\top}\mathbf{r}=\mathbf |
| 미분 | 그래디언트가 \mathbf | \nabla f=\mathbf |
| 대수 | 피타고라스로 최소 확인 | 직접 증명 |
셋이 완전히 같은 방정식입니다.
미분 관점에서 최소임을 확인하려면 이계 조건이 필요한데, 44강의 볼록성입니다. 의 헤세 행렬이
이고 이것이 양반정치이므로 가 볼록입니다.
볼록함수의 임계점은 전역 최소이므로 안장점이나 극대의 걱정이 없습니다. 87강에서 양정치를 정식으로 다루고, 205강의 볼록최적화에서 이 성질의 값어치를 봅니다.
기하 관점이 가장 짧습니다. 미분 없이 직교 조건 하나로 끝났고, 그 조건이 74강에서 이미 준비되어 있었습니다.
바로 확인 3.
확인 3-1. 최소임을 보이는 등식을 쓰세요.
답. 입니다.
확인 3-2. 교차항이 사라지는 이유를 쓰세요.
답. 이기 때문입니다.
확인 3-3. 임계점이 전역 최소인 이유를 쓰세요.
답. 헤세 행렬 가 양반정치라 볼록하기 때문입니다.
문제. 80강의 정사영 행렬을 다시 봅니다.
(1) 와 를 비교하세요.
(2) 를 로 나타내세요.
(3) 노름 관계를 확인하세요.
생각의 실마리. 문제 1에서 이 문제가 "열공간 위의 최근접점 찾기"라 했습니다. 그 점이 정사영입니다.
풀이. (1) 검산에서 둘 다 입니다.
(2) 를 넣으면
80강 문제 3의 공식이 여기서 유도되었습니다. 그때는 주어진 것으로 확인만 했는데, 이제 최소제곱에서 자연스럽게 나옵니다.
(3) 검산에서
이 문제에서 배우는 것: 최소제곱은 정사영입니다.
관계.
최소제곱의 예측값은 를 열공간에 정사영한 것입니다.
74강 문제 4의 그림에서 완성됩니다.
앞의 것은 맞출 수 있고 뒤의 것은 맞출 수 없습니다. 최소제곱은 맞출 수 있는 만큼만 맞춥니다.
가 멱등이고 대칭임도 여기서 확인됩니다.
가 대칭이라 그 역도 대칭입니다. 69강 문제 4의 성질입니다.
80강 심화 2에서 멱등이고 대칭이면 직교 정사영이라 했으므로, 이 가 정말 수직으로 내립니다.
가 있으면 더 간단합니다. 81강에서 이면
80강 문제 3의 두 공식이 이렇게 이어집니다.
바로 확인 4.
확인 4-1. 가 무엇입니까?
답. 의 열공간 정사영 입니다.
확인 4-2. 를 로 쓰세요.
답. 입니다.
확인 4-3. 인 이유를 쓰세요.
답. 가 대칭이므로 그 역도 대칭이기 때문입니다.
문제. 에서 를 관측했습니다.
(1) 직선 를 적합하세요.
(2) 잔차의 성질을 확인하세요.
(3) 제곱합을 분해하세요.
생각의 실마리. 설계행렬의 첫 열을 로 두면 절편이 됩니다. 그러면 상수항이 하나의 "변수"가 됩니다.
풀이. (1) 로 두고 정규방정식을 풉니다. 검산에서
이므로 적합 직선은 입니다.
(2) 잔차가 입니다. 두 조건이 성립합니다.
검산에서 둘 다 True입니다.
이것이 을 성분으로 쓴 것입니다. 첫 성분이 이고 둘째가 입니다.
(3) 평균 를 기준으로 제곱합을 나눕니다.
| 항 | 값 |
|---|---|
| 총제곱합 \sum(y_{i}-\bar y)^ | |
| 회귀제곱합 \sum(\hat y_{i}-\bar y)^ | |
| 잔차제곱합 \sum r_{i}^ | |
| 합 |
정확히 갈라집니다. 그리고
이 문제에서 배우는 것: 회귀의 기하.
분산분해.
이며 입니다.
이것도 피타고라스 정리입니다. 을 열공간 성분과 잔차로 갈랐는데, 두 성분이 직교하기 때문입니다.
절편이 있어야 성립합니다. 이 열공간에 있어야 을 빼도 관계가 유지됩니다. 절편 없는 회귀에서는 이 이상하게 나올 수 있습니다.
잔차 조건의 뜻도 봅니다.
| 조건 | 뜻 |
|---|---|
| 잔차가 과 직교, 평균이 | |
| 잔차가 설명변수와 무상관 |
둘째 줄이 중요합니다. 잔차에 설명변수의 정보가 남아 있지 않다는 뜻이며, 남아 있다면 더 줄일 수 있었을 것입니다. 최소제곱이 짜낼 수 있는 만큼 짜냈다는 표시입니다.
64강 심화 3에서 평균 빼기가 방향 정사영이라 했는데, 여기서 그 조작이 분산분해의 기초가 됩니다.
바로 확인 5.
확인 5-1. 절편을 넣으려면 설계행렬에 무엇을 붙입니까?
답. 모든 성분이 인 열입니다.
확인 5-2. 잔차의 두 조건을 쓰세요.
답. 합이 이고 설명변수와의 내적이 입니다.
확인 5-3. 분산분해가 성립하는 근거를 쓰세요.
답. 두 성분이 직교하므로 피타고라스 정리입니다.
| 개념 | 식 |
|---|---|
| 최소제곱 | \min\lVert A\mathbf{x}-\mathbf{b}\rVert^ |
| 최적 조건 | (잔차가 수직) |
| 정규방정식 | A^{\top}A\hat{\mathbf{x}}=A^{\top}\mathbf |
| 유일 조건 | 의 열이 독립 |
| 예측값 | A\hat{\mathbf{x}}=P\mathbf |
| 정사영 | P=A(A^{\top}A)^{-1}A^{\top}=QQ^ |
| 분산분해 | SST SSR SSE |
| 세 관점 | 조건 |
|---|---|
| 기하 | 잔차가 열공간과 수직 |
| 미분 | \nabla\lVert A\mathbf{x}-\mathbf{b}\rVert^{2}=\mathbf |
| 대수 | 피타고라스로 최소 확인 |
| 계산 방법 | 조건수 | 권장 |
|---|---|---|
| 정규방정식 | \kappa^ | 이해용 |
| QR | 표준 | |
| SVD | 계수 부족까지 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 을 만듭니다 | QR로 풉니다 |
| 열이 종속인데 유일하다고 봅니다 | 무수히 많습니다 |
| 절편 없이 을 씁니다 | 분산분해가 깨집니다 |
| 이상치를 그냥 둡니다 | 제곱이라 크게 끌려갑니다 |
문제 6. 최소제곱 문제를 식으로 쓰세요.
답. 입니다.
문제 7. 최적 조건을 기하로 쓰세요.
답. 잔차가 열공간과 수직입니다.
문제 8. 정규방정식을 쓰세요.
답. 입니다.
문제 9. 그 이름의 유래를 쓰세요.
답. "정규"는 수직을 뜻하며 잔차의 직교 조건에서 왔습니다.
문제 10. 해가 유일할 조건을 쓰세요.
답. 의 열이 일차독립, 즉 입니다.
문제 11. 정규방정식이 언제나 해를 갖는 이유를 쓰세요.
답. 이기 때문입니다.
문제 12. 최소임을 보이는 등식을 쓰세요.
답. 입니다.
문제 13. 임계점이 전역 최소인 근거를 쓰세요.
답. 헤세 행렬 가 양반정치라 볼록합니다.
문제 14. 가 무엇입니까?
답. 의 열공간 정사영입니다.
문제 15. 를 두 가지로 쓰세요.
답. 이고 이면 입니다.
문제 16. 절편이 있는 회귀에서 잔차의 합이 얼마입니까?
답. 입니다.
문제 17. 분산분해 식을 쓰세요.
답. SST SSR SSE입니다.
문제 18. 실무에서 어떤 방법으로 계산합니까?
답. QR을 씁니다.
심화 1. 열이 종속일 때 무슨 일이 일어나는지 다루세요.
풀이. 문제 2에서 유일성 조건이 열의 독립이었습니다. 깨지면 어떻게 되는지 봅니다.
둘째 열이 첫째의 배이므로 입니다. 검산에서 도 이라 특이합니다.
해가 무수히 많습니다. 가 방향이므로, 한 해에 그 방향을 더해도 여전히 최소제곱 해입니다.
검산에서 확인합니다.
| 해 | 잔차 노름 | 해의 노름 |
|---|---|---|
| A^{+}\mathbf | ||
| +0.5\mathbf{n}_ | ||
| -1.0\mathbf{n}_ |
잔차는 모두 같고 해의 크기만 다릅니다.
예측값은 유일합니다. 이고 는 유일하게 정해지기 때문입니다.
이것이 다중공선성의 정확한 내용입니다. 72강 심화 6과 73강 심화 2에서 언급했는데, 여기서 결과가 분명해집니다.
| 양 | 유일한가 |
|---|---|
| 예측값 | 예 |
| 잔차 \mathbf | 예 |
| 계수 \hat | 아닙니다 |
| R^ | 예 |
셋째 줄만 안 됩니다. 그래서 "이 변수의 효과가 얼마"라고 말할 수 없습니다.
대응 방법이 셋입니다. 69강 심화 5에서 정리한 것과 같습니다.
| 방법 | 내용 |
|---|---|
| 최소 노름 해 | 의사역행렬 (83강) |
| 정칙화 | 능형회귀 (심화 2) |
| 변수 제거 | 종속인 열을 뺍니다 |
셋째 줄이 가장 정직합니다. 정보가 없으면 그 변수를 빼는 것이 해석에 낫습니다. 다만 무엇을 뺄지 정해야 하는 문제가 남습니다.
심화 2. 능형회귀를 유도하고 정칙화의 효과를 보이세요.
풀이. 심화 1의 문제를 다른 방식으로 해결합니다. 목적함수에 항을 더합니다.
그래디언트를 으로 두면
이면 언제나 가역입니다. 73강 심화 2에서 보였습니다.
효과를 검산에서 봅니다. 두 열이 거의 같은 설계행렬에서
| \hat | ||
|---|---|---|
| 10^ | ||
| 10^ | ||
**에서 계수가 **입니다. 두 변수가 거의 같으니 하나를 크게 더하고 다른 하나를 크게 빼도 예측이 비슷하기 때문입니다. 작은 잡음이 계수를 크게 흔듭니다.
를 조금만 넣어도 계수가 안정됩니다.
대가도 있습니다. 편향이 생깁니다.
| 분산 | 편향 | |
|---|---|---|
| 작음 | 큽니다 | 작습니다 |
| 큼 | 작습니다 | 큽니다 |
편향-분산 절충이며, 168강 이후 통계와 233강의 가중치 감쇠에서 다시 다룹니다.
를 고르는 법도 있습니다. 교차검증으로 예측 오차가 최소가 되는 값을 찾습니다.
다른 정칙화도 봅니다.
| 벌점 | 이름 | 효과 |
|---|---|---|
| \lambda\lVert\mathbf{x}\rVert^ | 능형 | 계수를 줄입니다 |
| \lambda\lVert\mathbf{x}\rVert_ | 라소 | 계수를 으로 만듭니다 |
| 둘 다 | 일래스틱넷 | 절충 |
둘째 줄이 변수 선택을 겸합니다. 다만 미분 가능하지 않아 선형대수로 풀리지 않고 반복법이 필요합니다.
정칙화의 본질은 이렇습니다. 데이터가 결정하지 못하는 방향을 사람이 정해 줍니다. 능형은 "작은 계수를 선호한다"는 가정이며, 그것이 없으면 답이 정해지지 않습니다. 67강 심화 6과 69강 심화 5에서 반복한 이야기입니다.
심화 3. 가중 최소제곱과 일반화 최소제곱을 다루세요.
풀이. 모든 관측을 똑같이 신뢰할 이유는 없습니다. 정밀한 관측에 더 큰 비중을 주고 싶습니다.
가중 최소제곱. 가중치 에 대해
이고 입니다. 와 를 로 미리 곱하면 보통의 최소제곱이 됩니다.
언제 쓰는가. 관측 오차의 분산이 다를 때입니다. 이면 이 가중치가 최적입니다.
일반화 최소제곱. 오차들이 상관되어 있으면 대각이 아닌 행렬이 들어옵니다. 공분산 에 대해
계산은 콜레스키로 합니다. 이면 을 양쪽에 곱해 백색화한 뒤 보통 최소제곱을 풉니다.
70강의 콜레스키가 여기서 쓰입니다. 75강 심화 5의 백색화와 같은 조작입니다.
기하적으로 읽으면 내적을 바꾼 것입니다. 63강에서 내적의 정의를 봤는데, 도 내적입니다(가 양정치이면).
"가장 가깝다"의 뜻이 바뀌므로 답도 바뀝니다. 어떤 내적을 쓸지가 모형의 가정입니다.
| 상황 | 쓰는 것 |
|---|---|
| 등분산, 무상관 | 보통 최소제곱 |
| 이분산, 무상관 | 가중 최소제곱 |
| 상관 있음 | 일반화 최소제곱 |
| 공분산 모름 | 실현가능 GLS (추정 후 대입) |
심화 4. 최소제곱의 통계적 정당화를 논하세요.
풀이. 문제 1에서 제곱을 쓰는 이유 중 하나가 통계라고 했습니다. 정확히 무엇인지 봅니다.
가우스-마르코프 정리. 모형 에서 오차가
를 만족하면, 최소제곱 추정량이 선형 불편 추정량 중 분산이 최소입니다.
정규성 가정이 필요 없다는 점이 중요합니다. 평균이 이고 등분산이며 무상관이면 충분합니다.
최대가능도. 오차가 정규분포이면 로그가능도가
이므로 최대화가 곧 제곱합 최소화입니다. 정규분포 가정 아래서 최소제곱이 최대가능도 추정입니다.
분포가 다르면 답도 달라집니다.
| 오차 분포 | 최대가능도가 최소화하는 것 |
|---|---|
| 정규 | 제곱합 |
| 라플라스 | 절댓값의 합 |
| 균등 | 최댓값 |
문제 1의 세 기준이 세 분포에 대응합니다. 어떤 기준을 쓸지는 오차를 어떻게 가정하느냐의 문제입니다.
이상치에 민감한 이유도 여기서 설명됩니다. 정규분포는 꼬리가 얇아 큰 오차를 거의 배제하므로, 하나라도 나타나면 모형이 크게 끌려갑니다. 꼬리가 두꺼운 분포를 가정하면 강건한 방법이 나옵니다.
추정량의 분포도 얻습니다. 오차가 정규이면
의 대각이 계수의 분산이며, 표준오차와 신뢰구간이 여기서 나옵니다. 81강 심화 5에서 QR로 계산하는 법을 봤습니다.
다중공선성이 왜 문제인지도 이 식이 말합니다. 가 거의 특이하면 역행렬이 커지고 분산이 폭발합니다. 심화 2의 검산에서 계수가 이었던 것이 그 현상입니다.
심화 5. 비선형 모형을 최소제곱으로 다루는 방법을 논하세요.
풀이. 최소제곱은 모수에 대해 선형이면 쓸 수 있습니다. 변수에 대해서는 비선형이어도 됩니다.
다항 회귀.
설계행렬의 열을 로 두면 보통의 최소제곱입니다. 에 대해 비선형이지만 에 대해 선형이기 때문입니다.
다만 조건수가 나빠집니다. 75강 심화 4에서 본 대로 가 거의 평행해지므로, 80강 심화 3의 직교 다항식을 쓰는 편이 낫습니다.
기저함수 회귀. 임의의 함수 에 대해
이면 여전히 선형입니다. 스플라인, 방사기저함수, 푸리에 기저가 모두 이 형태입니다.
변환으로 선형화. 어떤 비선형 모형은 변환하면 선형이 됩니다.
| 모형 | 변환 |
|---|---|
| y=ae^ | |
| y=at^ |
주의할 점이 있습니다. 변환하면 오차 구조도 바뀝니다. 원래 이었다면 로그를 취한 뒤의 오차는 등분산이 아닙니다. 심화 3의 가중 최소제곱이 필요하거나, 아예 비선형 최소제곱을 써야 합니다.
진짜 비선형. 모수에 대해 비선형이면 닫힌 형태가 없습니다.
반복법으로 풉니다. 각 단계에서 를 선형근사하고 선형 최소제곱을 푸는 것이 가우스-뉴턴법입니다.
47강의 뉴턴법과 같은 구조이며, 가 야코비 행렬입니다. 발산을 막으려고 감쇠를 넣은 것이 레벤버그-마쿼트법이고, 그 감쇠가 심화 2의 능형과 같은 형태입니다.
정칙화와 신뢰영역이 같은 식으로 만납니다. 209강에서 다시 봅니다.
심화 6. 최소제곱이 나타나는 자리를 정리하세요.
풀이. 이 방법이 얼마나 널리 쓰이는지 봅니다.
회귀분석. 가장 직접적인 응용이며 통계의 기초입니다.
칼만 필터. 관측과 예측을 결합해 상태를 추정하는데, 각 단계가 가중 최소제곱입니다. 69강 심화 4의 셔먼-모리슨으로 갱신합니다.
측지와 GPS. 여러 위성의 거리 측정에서 위치를 구합니다. 방정식이 미지수보다 많으므로 최소제곱이며, 비선형이라 가우스-뉴턴을 씁니다.
컴퓨터 비전. 여러 사진에서 삼차원 구조와 카메라 자세를 동시에 추정하는 번들 조정이 대규모 비선형 최소제곱입니다. 야코비가 희소해 67강 심화 5의 기법이 필요합니다.
신호 처리. 잡음 섞인 신호에서 파라미터를 추정합니다. 60강의 푸리에와 결합하면 스펙트럼 추정이 됩니다.
기계학습. 선형회귀가 가장 단순한 지도학습이며, 신경망의 회귀 손실도 제곱오차입니다. 다만 모형이 비선형이라 경사하강법을 씁니다.
보정과 캘리브레이션. 센서의 출력을 참값에 맞추는 일이 최소제곱입니다.
정리합니다.
| 분야 | 무엇을 맞추는가 |
|---|---|
| 통계 | 모형과 데이터 |
| 항법 | 위치와 측정 |
| 비전 | 삼차원 구조와 사진 |
| 신호 | 파라미터와 관측 |
| 학습 | 예측과 정답 |
**공통 구조는 "관측이 미지수보다 많고 완벽히 맞출 수 없다"**입니다. 그 상황에서 무엇을 최선이라 부를지 정한 것이 최소제곱이며, 이 강의의 기하가 그 답의 근거입니다.
한 문장으로 요약하면 이렇습니다.
이 강의에서는 numpy만 씁니다. 정규방정식을 직접 풀어 잔차의 직교성을 확인하고, 최소임을 다른 점과 비교하며, 회귀의 분산분해와 정칙화의 효과를 봅니다.
import numpy as np
# --- 문제 1: 해가 없습니다 -----------------------------------------------
A = np.array([[1.,0.],[1.,1.],[1.,2.]])
b = np.array([1., 3., 2.])
print(int(np.linalg.matrix_rank(A)),
int(np.linalg.matrix_rank(np.column_stack([A,b])))) # 2 3
# --- 문제 2: 정규방정식 --------------------------------------------------
G = A.T@A; c = A.T@b
print(G.tolist(), c.tolist()) # [[3.0, 3.0], [3.0, 5.0]] [6.0, 7.0]
xh = np.linalg.solve(G, c)
print(np.round(xh,10).tolist()) # [1.5, 0.5]
r = b - A@xh
print((np.round(A.T@r,12)+0.0).tolist()) # [0.0, 0.0] (잔차가 수직)
print("%.8f" % float(np.linalg.norm(r))) # 1.22474487
# --- 문제 3: 다른 점은 모두 더 나쁩니다 ---------------------------------
for d in [np.array([0.1,0.]), np.array([0.,-0.2]), np.array([0.05,0.05])]:
print(np.round(d,3).tolist(), "%.8f" % float(np.linalg.norm(A@(xh+d)-b)))
# [0.1, 0.0] 1.23693169
# [0.0, -0.2] 1.30384048
# [0.05, 0.05] 1.23895117
print("%.8f" % float(np.linalg.norm(A@xh-b))) # 1.22474487
for d in [np.array([0.1,0.]), np.array([0.,-0.2])]: # 피타고라스
print("%.10f %.10f" % (np.linalg.norm(A@(xh+d)-b)**2,
np.linalg.norm(r)**2 + np.linalg.norm(A@d)**2))
# 1.5300000000 1.5300000000
# 1.7000000000 1.7000000000
# --- 문제 4: 예측값은 정사영입니다 --------------------------------------
P = A @ np.linalg.solve(A.T@A, A.T)
print(np.round(P@b,8).tolist(), np.round(A@xh,8).tolist())
# [1.5, 2.0, 2.5] [1.5, 2.0, 2.5]
print(bool(np.allclose(P@b, A@xh))) # True
print("%.8f %.8f" % (np.linalg.norm(b)**2,
np.linalg.norm(P@b)**2 + np.linalg.norm(r)**2))
# 14.00000000 14.00000000
# --- 문제 5: 직선 적합과 분산분해 ---------------------------------------
t = np.array([0.,1.,2.,3.,4.])
y = np.array([1., 1.8, 3.3, 3.9, 5.2])
X = np.column_stack([np.ones(5), t])
beta = np.linalg.solve(X.T@X, X.T@y)
print(np.round(beta,8).tolist()) # [0.94, 1.05]
res = y - X@beta
print(np.round(res,8).tolist()) # [0.06, -0.19, 0.26, -0.19, 0.06]
print(abs(res.sum()) < 1e-12, abs(res@t) < 1e-12) # True True
ybar = y.mean()
sst = ((y-ybar)**2).sum(); sse = (res**2).sum()
ssr = ((X@beta - ybar)**2).sum()
print("%.8f %.8f %.8f %.8f" % (sst, ssr, sse, ssr+sse))
# 11.17200000 11.02500000 0.14700000 11.17200000
print("%.8f" % (ssr/sst)) # 0.98684211 (R^2)
# --- 심화 1: 열이 종속이면 계수가 유일하지 않습니다 ----------------------
Ad = np.array([[1.,2.],[2.,4.],[3.,6.]])
bd = np.array([1.,2.,4.])
print(int(np.linalg.matrix_rank(Ad)), int(np.linalg.matrix_rank(Ad.T@Ad))) # 1 1
xp = np.linalg.pinv(Ad) @ bd
print(np.round(xp,8).tolist(), "%.8f" % float(np.linalg.norm(xp)))
# [0.24285714, 0.48571429] 0.54304508
n0 = np.array([2.,-1.])/np.sqrt(5) # 영공간 방향
for s in [0.5, -1.0]:
cand = xp + s*n0
print("%.8f %.8f" % (np.linalg.norm(Ad@cand-bd), np.linalg.norm(cand)))
# 0.59761430 0.73817204
# 0.59761430 1.13793583
print("%.8f" % float(np.linalg.norm(Ad@xp-bd))) # 0.59761430 (잔차는 모두 같습니다)
# --- 심화 2: 능형회귀가 계수를 안정시킵니다 -----------------------------
Xr = np.array([[1.,1.],[1.,1.0001],[1.,0.9999]])
yr = np.array([1., 2., 0.])
for lam in [0.0, 1e-6, 1e-3, 1.0]:
bb = np.linalg.solve(Xr.T@Xr + lam*np.eye(2), Xr.T@yr)
print("%.0e" % lam, np.round(bb,4).tolist(), "%.4f" % np.linalg.norm(bb))
# 0e+00 [-9999.0001, 10000.0001] 14141.4286
# 1e-06 [-98.5049, 99.505] 140.0159
# 1e-03 [0.3999, 0.5999] 0.7210
# 1e+00 [0.4285, 0.4287] 0.6061
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 계수가 와 으로 달라 해가 없음이 확인되고, 정규방정식을 풀면 가 나오며 **잔차와 열의 내적이 정확히 **입니다.
둘째, 세 방향으로 움직여도 오차가 모두 커집니다. 그리고 피타고라스 등식의 좌변과 우변이 소수 열째 자리까지 일치합니다. 문제 3의 증명이 수치로 확인됩니다.
셋째, 예측값이 정사영과 같고 가 두 조각으로 정확히 갈립니다.
넷째, 회귀에서 잔차의 합과 와의 내적이 둘 다 입니다. 을 성분으로 본 것이며, 분산분해가 로 맞아 입니다.
다섯째가 이 강의의 실무적 경고 둘입니다. 열이 종속이면 잔차는 모두 으로 같은데 해의 노름이 , , 로 다릅니다. 계수가 정해지지 않습니다. 그리고 능형회귀에서 일 때 계수가 인데 만 넣어도 으로 안정됩니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 세 점에서 오차가 컸다고 최소가 증명되지는 않습니다. 문제 3의 피타고라스 논증이 그 자리를 맡습니다. 또 이 검산은 정규방정식을 직접 풀었는데, 예제가 작고 조건이 좋아 문제가 없었을 뿐입니다. 81강 문제 5에서 본 대로 실제 계산은 QR로 해야 하며, 여기서 정규방정식을 쓴 것은 식이 무엇인지 보이기 위해서입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 최소제곱 해 | 오차를 최소로 합니다 | |
| \mathbf | 잔차 | 입니다 |
| A^{\top}A\hat{\mathbf{x}}=A^{\top}\mathbf | 정규방정식 | 직교 조건입니다 |
| 모자행렬 | 예측값을 만듭니다 | |
| SST, SSR, SSE | 제곱합 | 총, 회귀, 잔차입니다 |
| R^ | 결정계수 | SSR/SST입니다 |
| 정칙화 계수 | 능형회귀의 강도입니다 | |
| BLUE | 최량선형불편추정량 | 가우스-마르코프 |
다음 83강에서는 정사영 행렬을 정면으로 다룹니다. 이 강의에서 을 유도했는데, 그 성질과 통계적 의미를 정리하고 의사역행렬로 확장합니다. 심화 1에서 계수가 부족할 때 최소 노름 해가 필요했는데, 그것을 주는 것이 이며 74강 문제 5에서 이미 만난 적이 있습니다.