82강에서 최소제곱을 풀었고, 예측값이 정사영임을 확인했습니다.
이 강의는 그 를 정면으로 다룹니다. 이유가 셋입니다.
첫째, 하나에 회귀의 거의 모든 것이 들어 있습니다. 예측값, 잔차, 자유도, 결정계수, 각 관측의 영향력이 전부 에서 읽힙니다.
둘째, 69강 심화 5에서 미룬 의사역행렬을 여기서 정리합니다. 82강 심화 1에서 열이 종속이면 계수가 유일하지 않았는데, 그때 하나를 고르는 규칙이 입니다.
셋째, 05단원을 닫습니다. 80강의 직교기저, 81강의 QR, 82강의 최소제곱이 모두 이 정사영 하나로 모입니다.
문제. 82강 문제 5의 자료()에 대한 를 봅니다.
(1) 를 계산하고 두 성질을 확인하세요.
(2) 와 를 구하세요.
(3) 대각 성분을 읽으세요.
생각의 실마리. 80강 문제 3에서 정사영 행렬의 성질을 정리했습니다. 대각합이 차원이라는 점이 여기서 통계적 의미를 얻습니다.
풀이. (1) 검산에서
이고 , 입니다.
(2) 이고 입니다.
(3) 대각이 이고 합이 입니다. 최소가 , 최대가 입니다.
이 문제에서 배우는 것: 모자행렬.
모자행렬. 을 회귀에서 모자행렬이라 합니다. 에 모자를 씌워 를 만들기 때문입니다.
담고 있는 정보를 정리합니다.
| 양 | 로 |
|---|---|
| 예측값 | \hat{\mathbf{y}}=P\mathbf |
| 잔차 | \mathbf{r}=(I-P)\mathbf |
| 모형 자유도 | |
| 잔차 자유도 | |
| 레버리지 | h_{i}=P_ |
셋째와 넷째 줄이 통계의 자유도입니다. 73강 심화 3과 81강 심화 5에서 언급했는데, 여기서 계산으로 확인됩니다.
이 아니라 로 나누는 이유가 여기 있습니다. 잔차가 차원이 아니라 차원 공간에 갇혀 있기 때문입니다. 74강의 직교여공간 분해가 그 근거입니다.
다섯째 줄의 레버리지를 봅니다.
는 관측 가 자기 예측값에 미치는 영향입니다.
이 예에서 양 끝점이 으로 가장 크고 가운데가 로 가장 작습니다. 끝점이 직선을 더 크게 좌우합니다. 지렛대의 끝을 잡으면 힘이 더 잘 전달되는 것과 같아 이름이 레버리지입니다.
**평균이 **이므로, 그보다 훨씬 크면 영향력이 큰 관측입니다. 실무에서 을 경고 기준으로 씁니다.
바로 확인 1.
확인 1-1. 모자행렬의 두 성질을 쓰세요.
답. 멱등 와 대칭 입니다.
확인 1-2. 와 가 각각 무엇입니까?
답. 모형 자유도 와 잔차 자유도 입니다.
확인 1-3. 레버리지가 무엇을 뜻합니까?
답. 관측이 자기 예측값에 미치는 영향입니다.
문제. 같은 자료에서
(1) 와 을 구하세요.
(2) 두 벡터의 내적을 확인하세요.
(3) 을 계산하세요. 여기서 입니다.
생각의 실마리. 74강의 직합 분해를 회귀의 언어로 다시 보는 문제입니다. **두 성분이 직교하므로 곱이 **일 것입니다.
풀이. (1) 검산에서
(2) 내적이 입니다.
(3) 입니다.
이 문제에서 배우는 것: 두 정사영이 서로를 지웁니다.
관계. 일 때
입니다.
공간이 완전히 갈렸다는 뜻입니다. 한쪽으로 사영한 것을 다른 쪽으로 사영하면 아무것도 남지 않습니다.
이 구조가 회귀 진단의 기초입니다.
| 대상 | 사는 곳 | 차원 |
|---|---|---|
| \mathbf | \mathcal{C}(X)^ |
잔차가 차원에 갇혀 있으므로 완전히 자유롭지 않습니다. 잔차들 사이에 개의 선형 관계가 있으며, 82강 문제 5에서 본 과 이 그 관계입니다.
잔차의 공분산도 여기서 나옵니다. 이면
이고 대각이 입니다. 레버리지가 큰 점은 잔차의 분산이 작습니다.
이상치를 놓치기 쉬운 이유입니다. 영향력이 큰 점은 직선을 자기 쪽으로 끌어당겨 잔차가 작아 보입니다. 그래서 잔차를 그대로 보지 않고 표준화합니다.
이 예에서 첫 점과 마지막 점은 이라 이므로, 같은 잔차라도 표준화하면 배로 커집니다.
바로 확인 2.
확인 2-1. 이 무엇입니까?
답. 영행렬입니다.
확인 2-2. 잔차가 몇 차원 공간에 있습니까?
답. 차원입니다.
확인 2-3. 레버리지가 큰 점의 잔차 분산이 어떻습니까?
답. 로 작습니다.
문제. 은 계수가 입니다.
(1) 를 계산하세요.
(2) 와 를 확인하세요.
(3) 와 의 대칭성을 확인하세요.
생각의 실마리. 69강 심화 5에서 의사역행렬을 "최소제곱 중 최소 노름"으로 소개했습니다. 여기서는 대수적 조건으로 정의합니다.
풀이. (1) 검산에서
(2) 이고 입니다.
(3) 둘 다 대칭입니다.
이 문제에서 배우는 것: 무어-펜로즈 의사역행렬.
정의. 다음 네 조건을 만족하는 가 유일하게 존재합니다.
조건 식 1 2 A^{+}AA^{+}=A^ 3 (AA^{+})^{\top}=AA^ 4
첫 조건만으로는 유일하지 않습니다. 네 개가 다 필요합니다.
세 번째와 네 번째가 무엇을 뜻하는지 봅니다. 80강 심화 2에서 멱등이고 대칭이면 직교 정사영이라 했는데, 조건 1과 3에서 가 멱등입니다.
따라서 가 직교 정사영이며, 상이 입니다.
두 정사영이 74강의 두 부분공간으로 갑니다.
의 열이 독립이면 간단한 공식이 있습니다.
그러면 로 82강의 모자행렬입니다.
가 가역이면 입니다. 의사역행렬이 역행렬의 확장입니다.
| 상황 | A^ |
|---|---|
| 가역 | A^ |
| 열 독립 | (A^{\top}A)^{-1}A^ |
| 행 독립 | A^{\top}(AA^{\top})^ |
| 일반 | SVD로 계산 (88강) |
넷째 줄이 실제 계산법입니다. 88강에서 을 배우면
이고 은 이 아닌 특이값을 역수로 바꾼 것입니다.
바로 확인 3.
확인 3-1. 의사역행렬의 네 조건 중 두 개를 쓰세요.
답. 와 입니다.
확인 3-2. 가 무엇입니까?
답. 열공간으로의 직교 정사영입니다.
확인 3-3. 열이 독립일 때의 공식을 쓰세요.
답. 입니다.
문제. 세 경우에 를 계산하세요.
(1) ,
(2) ,
(3) ,
생각의 실마리. 세 경우가 각각 가역, 과결정, 부족결정입니다. 잔차와 해의 노름을 함께 보면 무엇이 최적화되는지 드러납니다.
풀이. 검산에서 계산합니다.
| 경우 | A^{+}\mathbf | 잔차 | 해의 노름 |
|---|---|---|---|
| 가역 | |||
| 과결정 | |||
| 부족결정 |
둘째 줄이 82강 문제 2의 답과 같습니다.
셋째 줄은 의 해 중 하나입니다. 해가 무수히 많은데 는 을 고릅니다. 다른 해 의 노름은 이므로 더 깁니다.
이 문제에서 배우는 것: 가 고르는 것.
정리. 는
- 를 최소로 하고
- 그런 것들 중 가 최소입니다.
두 조건이 겹쳐 답이 언제나 유일합니다.
| 상황 | 무엇이 문제인가 | 의 답 |
|---|---|---|
| 가역 | 없습니다 | 정확한 해 |
| 과결정 | 존재하지 않습니다 | 최소제곱 해 |
| 부족결정 | 유일하지 않습니다 | 최소 노름 해 |
| 둘 다 | 둘 다 | 최소제곱 중 최소 노름 |
68강에서 존재와 유일성을 따로 다뤘는데, 가 두 실패를 한꺼번에 처리합니다.
74강 심화 4의 표가 여기서 완성됩니다.
최소 노름 해가 행공간에 있다는 것도 확인됩니다. 이므로
74강 문제 5에서 수치로 본 것이 이제 대수적으로 나옵니다.
부족결정 예에서 확인합니다. 의 행공간이 방향이고, 답 이 정확히 그 방향입니다.
주의할 점이 있습니다. 는 불연속입니다. 계수가 바뀌는 지점에서 급격히 변합니다.
이면 발산하는데, 에서는 으로 유한합니다. 수치적으로 위험하며, 실무에서는 작은 특이값을 잘라 냅니다. 88강과 91강에서 다룹니다.
바로 확인 4.
확인 4-1. 가 만족하는 두 조건을 쓰세요.
답. 잔차가 최소이고 그중 노름이 최소입니다.
확인 4-2. 최소 노름 해가 어디에 있습니까?
답. 행공간입니다.
확인 4-3. 의 수치적 위험을 쓰세요.
답. 계수가 바뀌는 지점에서 불연속이라 작은 특이값에서 발산합니다.
문제. 82강 문제 5의 자료를 다시 봅니다.
(1) 방향 정사영으로 중심화하세요.
(2) 을 계산하세요.
(3) 중심화된 벡터로 제곱합을 분해하세요.
생각의 실마리. 64강 심화 3에서 평균 빼기가 방향 정사영이라 했습니다. **절편이 있으면 **이므로 두 정사영이 잘 맞물립니다.
풀이. (1) 으로 두면
이고 합이 입니다.
(2) 입니다. 이 열공간에 있으므로 제자리입니다.
(3) 검산에서
이고 입니다. 82강 문제 5와 같은 값입니다.
이 문제에서 배우는 것: 세 정사영의 겹.
구조. 절편이 있는 회귀에서
이고 세 정사영이 차례로 놓입니다.
이 겹침 덕분에 분산분해가 깔끔합니다.
세 정사영이 중첩되어야 성립합니다. 이므로 과 가 직교합니다.
**절편이 없으면 **이라 이 계산이 무너집니다. 그러면 이 음수가 되거나 뜻이 달라집니다.
이 코사인의 제곱입니다. 중심화된 와 그 예측값 사이의 각도이며, 63강 문제 5에서 상관계수가 코사인이었던 것과 이어집니다.
단순회귀에서는 이 상관계수의 제곱입니다. 63강 심화 4에서 상관계수를 다루며 남긴 이야기가 여기서 닫힙니다.
자유도도 세 겹에서 나옵니다.
| 항 | 차원 |
|---|---|
| SST | |
| SSR | |
| SSE |
분산분석표의 자유도 열이 정확히 이 분해입니다.
바로 확인 5.
확인 5-1. 절편이 있으면 이 무엇입니까?
답. 입니다. 열공간에 있으므로 제자리입니다.
확인 5-2. 을 기하로 설명하세요.
답. 중심화된 와 예측값 사이 각도의 코사인 제곱입니다.
확인 5-3. 세 자유도의 관계를 쓰세요.
답. 입니다.
| 개념 | 식 |
|---|---|
| 모자행렬 | P=X(X^{\top}X)^{-1}X^ |
| 잔차 사영 | |
| 관계 | , |
| 자유도 | , |
| 레버리지 | , |
| 잔차 분산 | |
| 표준화 잔차 |
| 의사역행렬 | 네 조건 |
|---|---|
| 1 | |
| 2 | A^{+}AA^{+}=A^ |
| 3 | (AA^{+})^{\top}=AA^ |
| 4 |
| 상황 | A^{+}\mathbf |
|---|---|
| 가역 | 정확한 해 |
| 과결정 | 최소제곱 해 |
| 부족결정 | 최소 노름 해 |
| 둘 다 | 최소제곱 중 최소 노름 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 잔차를 그대로 비교합니다 | 레버리지로 표준화합니다 |
| 으로 나눠 분산을 추정합니다 | 입니다 |
| 절편 없이 을 씁니다 | 분산분해가 깨집니다 |
| 를 공식으로 만듭니다 | SVD로 계산합니다 |
문제 6. 모자행렬의 정의와 이름의 유래를 쓰세요.
답. 이며 에 모자를 씌워 를 만듭니다.
문제 7. 와 를 쓰세요.
답. 와 입니다.
문제 8. 분산 추정에서 로 나누는 이유를 쓰세요.
답. 잔차가 차원 공간에 갇혀 있기 때문입니다.
문제 9. 레버리지의 정의와 합을 쓰세요.
답. 이며 합이 입니다.
문제 10. 레버리지가 큰 점의 잔차 분산이 어떻습니까?
답. 로 작습니다.
문제 11. 표준화 잔차의 식을 쓰세요.
답. 입니다.
문제 12. 이 무엇입니까?
답. 영행렬입니다.
문제 13. 의사역행렬의 네 조건 중 셋을 쓰세요.
답. , , 입니다.
문제 14. 와 가 각각 무엇입니까?
답. 열공간과 행공간으로의 직교 정사영입니다.
문제 15. 열이 독립일 때 를 쓰세요.
답. 입니다.
문제 16. 가 만족하는 두 조건을 쓰세요.
답. 잔차가 최소이고 그중 노름이 최소입니다.
문제 17. 최소 노름 해가 어느 공간에 있습니까?
답. 행공간입니다.
문제 18. 을 기하로 설명하세요.
답. 중심화된 와 예측값 사이 각도의 코사인 제곱입니다.
심화 1. 프리시-워-로벨 정리를 진술하고 확인하세요.
풀이. 변수를 나눠 회귀할 때의 관계입니다.
FWL 정리. 를 에 회귀할 때 의 계수는, 와 를 각각 에 회귀한 잔차끼리 회귀한 계수와 같습니다.
여기서 이고 은 으로의 정사영입니다.
검산에서 확인합니다. 이고 일 때
| 방법 | \hat\beta_ |
|---|---|
| 전체 회귀의 셋째 계수 | |
| 잔차끼리 회귀 |
정확히 같습니다.
뜻이 중요합니다. 는 이 설명하지 못한 부분에서 가 설명하는 몫입니다.
회귀계수를 해석할 때 늘 쓰는 문구인데, 그 정확한 수학적 내용이 이것입니다.
증명의 착상은 정사영의 겹침입니다. 을 양변에 적용하면 부분이 사라지고 의 잔차만 남습니다.
따라오는 결과들이 있습니다.
첫째, 부분회귀 그림. 대 를 그리면 기울기가 입니다. 다변수 회귀를 이차원 그림으로 볼 수 있습니다.
둘째, 다중공선성의 해석. 가 으로 거의 완전히 설명되면 가 작아지고, 그러면 분모가 작아 계수가 불안정합니다.
82강 심화 2의 능형회귀가 이 분모를 키우는 조작입니다.
셋째, 계산의 분해. 변수를 단계적으로 넣을 때 전체를 다시 풀지 않고 갱신할 수 있습니다. 81강 심화 4의 QR 갱신과 이어집니다.
심화 2. 정사영 행렬의 고유값을 구하고 그 뜻을 밝히세요.
풀이. 가 대칭이므로 86강의 스펙트럼 정리가 적용되지만, 여기서는 직접 구합니다.
이면 에서
고유값이 또는 뿐입니다.
기하로 자명합니다. 안의 벡터는 제자리이므로 고유값 이고, 수직인 것은 으로 가므로 고유값 입니다.
| 고유값 | 고유공간 | 중복도 |
|---|---|---|
| \mathcal{C}(X)^ |
검산에서 모자행렬의 고유값이 이고 이 두 개입니다. 와 일치합니다.
대각합이 인 이유도 여기서 나옵니다. 77강에서 대각합이 고유값의 합이라 했으므로
79강 심화 6에서 예고한 관계입니다.
행렬식도 나옵니다.
정사영은 특이하며, 79강 문제 2에서 이 차원을 뭉갠다고 한 것과 일치합니다.
멱등행렬 일반으로 확장됩니다. 이면 대칭이 아니어도 고유값이 또는 입니다. 다만 대칭이 아니면 고유공간이 직교하지 않아 비스듬한 사영이 됩니다. 80강 심화 2의 예가 그렇습니다.
고유값이 이고 고유벡터가 과 인데 직교하지 않습니다.
심화 3. 영향력 진단의 도구들을 정사영으로 설명하세요.
풀이. 문제 1과 2에서 레버리지를 다뤘습니다. 실무의 진단 도구들을 정리합니다.
레버리지 . 설명변수 공간에서 그 관측이 얼마나 극단에 있는지 잽니다. 와 무관합니다.
마할라노비스 거리와 관련되며, 중심에서 멀수록 큽니다.
표준화 잔차. 문제 2에서 세웠습니다.
스튜던트화 잔차. 번째를 뺀 채 추정한 를 씁니다. 이상치가 자기 분산 추정을 오염시키는 것을 막습니다.
쿡 거리. 관측 하나를 뺐을 때 예측값 전체가 얼마나 움직이는지 잽니다.
두 요인의 곱입니다.
| 요인 | 뜻 |
|---|---|
| (r_{i}^{\text{std}})^ | 잘 안 맞는가 |
| 영향력이 큰가 |
둘 다 커야 위험합니다. 극단에 있어도 잘 맞으면 문제가 없고, 잘 안 맞아도 중앙에 있으면 영향이 작습니다.
하나 빼기 공식도 있습니다. 다시 계산하지 않고 갱신으로 얻습니다.
69강 심화 4의 셔먼-모리슨입니다. 관측 하나를 빼는 것이 에서 을 빼는 계수 갱신이기 때문입니다.
한 번의 적합으로 교차검증 오차를 얻습니다. 레버리지가 그 계산을 가능하게 합니다.
심화 4. 의사역행렬의 성질과 함정을 정리하세요.
풀이. 문제 3과 4에서 정의와 용도를 봤습니다. 성질을 정리하고 주의점을 짚습니다.
성립하는 성질입니다.
| 성질 | 식 |
|---|---|
| 두 번 | |
| 전치 | (A^{\top})^{+}=(A^{+})^ |
| 스칼라 | () |
| 가역 | A^{+}=A^ |
| 대칭곱 | (A^{\top}A)^{+}A^{\top}=A^ |
성립하지 않는 것이 중요합니다.
69강 문제 4에서 역행렬은 이었는데, 의사역행렬은 그렇지 않습니다.
반례를 봅니다.
이므로 입니다. 그런데 이고 이므로
성립하려면 조건이 필요합니다. 가 행 독립이고 가 열 독립이면 됩니다.
둘째 함정은 불연속성입니다. 문제 4에서 언급했습니다. 계수가 바뀌는 지점에서 가 튑니다.
수치적으로 이것이 문제입니다. 실제 데이터에서 특이값이 정확히 이 되는 일은 없고 아주 작은 값이 나오는데, 그것을 역수로 만들면 폭발합니다.
대응은 절단입니다.
문턱 를 정하는 것이 사람의 판단이며, np.linalg.pinv의 rcond 인자가 그것입니다. 기본값은 정도입니다.
82강 심화 2의 능형회귀와 비교합니다.
| 방법 | 작은 처리 |
|---|---|
| 절단 | 으로 버립니다 |
| 능형 | 로 줄입니다 |
능형이 부드럽고 절단이 급격합니다. 88강과 91강에서 다시 봅니다.
심화 5. 05단원을 정사영 하나로 정리하세요.
풀이. 80강부터 83강까지가 하나의 개념을 네 각도로 본 것임을 정리합니다.
80강: 정사영을 만드는 재료. 직교기저가 있으면 정사영이 으로 간단해집니다. 그래서 직교화 절차를 세웠습니다.
81강: 그 절차를 분해로 저장. 이며 이 정사영입니다. 한 번 분해하고 여러 번 씁니다.
82강: 정사영이 답인 문제. 최소제곱의 예측값이 정사영이고, 잔차의 직교 조건이 정규방정식입니다.
83강: 정사영 자체의 해부. 하나에 자유도, 레버리지, 결정계수가 모두 들어 있습니다.
핵심 등식을 모읍니다.
| 등식 | 강의 |
|---|---|
| P=QQ^ | 80 |
| , P=QQ^ | 81 |
| A^{\top}A\hat{\mathbf{x}}=A^{\top}\mathbf | 82 |
| , | 83 |
| 83 |
모두 같은 입니다.
앞 단원들과의 연결도 정리합니다.
| 앞 강의 | 여기서 |
|---|---|
| 63강 내적과 직교 | 정사영의 정의 |
| 64강 한 방향 정사영 | 부분공간으로 확장 |
| 73강 계수-퇴화차수 | 자유도 |
| 74강 네 부분공간 | 잔차가 좌영공간 |
| 75강 정규직교기저 | P=QQ^ |
64강에서 한 방향으로 시작한 것이 여기서 부분공간으로 완성되었습니다.
심화 6. 정사영이 다른 분야에서 어떻게 나타나는지 정리하세요.
풀이. 이 개념이 얼마나 널리 쓰이는지 봅니다.
조건부 기댓값. 확률에서 는 로 만들 수 있는 함수들 중 에 가장 가까운 것입니다. 제곱오차 의미의 정사영이며, 회귀가 그 유한차원 판입니다.
150강대의 확률에서 이 관점을 다룹니다.
푸리에 부분합. 64강 심화 6에서 다뤘습니다. 유한 개의 삼각함수로 만드는 공간으로의 정사영이며, 그래서 최선의 근사입니다.
칼만 필터. 관측을 바탕으로 상태를 추정하는데, 각 단계가 조건부 기댓값이므로 정사영입니다. 갱신 공식이 심화 3의 하나 빼기 공식과 같은 구조입니다.
주성분분석. 데이터를 낮은 차원 부분공간에 정사영하되, 재구성 오차가 최소가 되는 부분공간을 고릅니다. 89강의 주제이며, 여기서는 부분공간이 주어졌지만 거기서는 부분공간 자체가 미지수입니다.
교대 정사영. 두 집합에 번갈아 정사영하면 교집합에 수렴합니다. 볼록집합에 대한 이 알고리즘이 신호 복원과 위상 검색에 쓰입니다.
최적 제어. 도달 가능한 상태 집합으로 목표를 정사영하는 것이 최소 에너지 제어입니다.
정리합니다.
| 분야 | 무엇으로 정사영 |
|---|---|
| 회귀 | 설명변수의 열공간 |
| 확률 | 로 만드는 함수 공간 |
| 신호 | 대역이 제한된 신호 공간 |
| 차원 축소 | 주성분 부분공간 |
| 제어 | 도달 가능 집합 |
**공통 구조는 "할 수 있는 것 중 가장 가까운 것"**입니다. 제약이 부분공간으로 표현되고 거리가 내적에서 오면, 답은 언제나 정사영입니다.
이 강의에서는 numpy만 씁니다. 모자행렬의 성질과 레버리지를 계산하고, 의사역행렬의 네 조건을 확인하며, 세 상황에서 무엇을 주는지 비교합니다.
import numpy as np
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])
P = X @ np.linalg.solve(X.T@X, X.T)
M = np.eye(5) - P
# --- 문제 1: 모자행렬과 레버리지 ----------------------------------------
print(np.round(P,6).tolist())
# [[0.6, 0.4, 0.2, 0.0, -0.2], [0.4, 0.3, 0.2, 0.1, 0.0], [0.2, 0.2, 0.2, 0.2, 0.2],
# [0.0, 0.1, 0.2, 0.3, 0.4], [-0.2, 0.0, 0.2, 0.4, 0.6]]
print(bool(np.allclose(P@P,P)), bool(np.allclose(P,P.T))) # True True
print("%.8f %.8f" % (np.trace(P), np.trace(M))) # 2.00000000 3.00000000
h = np.diag(P); print(np.round(h,6).tolist(), "%.8f" % h.sum())
# [0.6, 0.3, 0.2, 0.3, 0.6] 2.00000000
print("%.6f %.6f" % (h.min(), h.max())) # 0.200000 0.600000
# --- 문제 2: 예측과 잔차는 직교합니다 ------------------------------------
yhat = P@y; res = M@y
print(np.round(yhat,6).tolist()) # [0.94, 1.99, 3.04, 4.09, 5.14]
print(np.round(res,6).tolist()) # [0.06, -0.19, 0.26, -0.19, 0.06]
print(abs(float(yhat@res)) < 1e-12) # True
print(bool(np.allclose(P@M, np.zeros((5,5))))) # True
# --- 문제 3: 의사역행렬의 네 조건 ---------------------------------------
A = np.array([[1.,2.],[2.,4.],[3.,6.]]) # 계수 1
Ap = np.linalg.pinv(A)
print(np.round(Ap,8).tolist())
# [[0.01428571, 0.02857143, 0.04285714], [0.02857143, 0.05714286, 0.08571429]]
print(np.round(A@Ap@A,8).tolist()) # A 와 같습니다
# [[1.0, 2.0], [2.0, 4.0], [3.0, 6.0]]
print(np.round(Ap@A@Ap,8).tolist()) # A^+ 와 같습니다
# [[0.01428571, 0.02857143, 0.04285714], [0.02857143, 0.05714286, 0.08571429]]
print(bool(np.allclose((A@Ap).T, A@Ap)), bool(np.allclose((Ap@A).T, Ap@A)))
# True True
b = np.array([1.,2.,4.]); xp = Ap@b
print(np.round(xp,8).tolist(), "%.8f" % np.linalg.norm(xp))
# [0.24285714, 0.48571429] 0.54304508
# --- 문제 4: 세 상황 -----------------------------------------------------
cases = {
"가역": (np.array([[2.,0.],[0.,3.]]), np.array([2.,3.])),
"과결정": (np.array([[1.,0.],[1.,1.],[1.,2.]]), np.array([1.,3.,2.])),
"부족결정": (np.array([[1.,1.,1.]]), np.array([3.])),
}
for name, (Am, bm) in cases.items():
xm = np.linalg.pinv(Am) @ bm
print(name, np.round(xm,6).tolist(),
"%.6f %.6f" % (np.linalg.norm(Am@xm-bm), np.linalg.norm(xm)))
# 가역 [1.0, 1.0] 0.000000 1.414214
# 과결정 [1.5, 0.5] 1.224745 1.581139
# 부족결정 [1.0, 1.0, 1.0] 0.000000 1.732051
# --- 문제 5: 중심화와 결정계수 ------------------------------------------
one = np.ones(5)
yc = (np.eye(5) - np.outer(one,one)/5) @ y
print(np.round(yc,6).tolist(), abs(yc.sum()) < 1e-12)
# [-2.04, -1.24, 0.26, 0.86, 2.16] True
print(bool(np.allclose(P@one, one))) # True (절편이 있으므로 1 은 제자리)
ssr = np.linalg.norm(P@yc)**2; sse = np.linalg.norm(M@yc)**2
print("%.8f %.8f %.8f" % (np.linalg.norm(yc)**2, ssr, sse))
# 11.17200000 11.02500000 0.14700000
print("%.8f" % (ssr/np.linalg.norm(yc)**2)) # 0.98684211
# --- 심화 1: 프리시-워-로벨 정리 ----------------------------------------
x2 = np.array([1.,0.,2.,1.,3.])
X1 = np.column_stack([one, t])
M1 = np.eye(5) - X1 @ np.linalg.solve(X1.T@X1, X1.T)
b2 = (M1@x2 @ (M1@y)) / (M1@x2 @ (M1@x2)) # 잔차끼리 회귀
bfull = np.linalg.solve(np.column_stack([one,t,x2]).T @ np.column_stack([one,t,x2]),
np.column_stack([one,t,x2]).T @ y)
print("%.8f %.8f" % (b2, bfull[2])) # 0.21111111 0.21111111
# --- 심화 2: 정사영의 고유값은 0 아니면 1 --------------------------------
w = np.linalg.eigvalsh(P)
print((np.round(w,8)+0.0).tolist(), int(np.sum(w > 0.5)))
# [0.0, 0.0, 0.0, 1.0, 1.0] 2
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 모자행렬이 멱등이고 대칭이며 대각합이 와 으로 갈립니다. 레버리지가 으로 양 끝점이 가장 크고 합이 입니다.
둘째, 예측과 잔차의 내적이 이고 입니다. 두 정사영이 서로를 완전히 지웁니다.
셋째, 의사역행렬의 네 조건이 모두 확인됩니다. 가 원래 행렬을 복원하고 가 자기를 복원하며, 두 곱이 대칭입니다.
넷째, 세 상황에서 가 각각 다른 일을 합니다. 가역이면 잔차 , 과결정이면 잔차가 남고, 부족결정이면 잔차 인데 노름이 최소인 답을 고릅니다.
다섯째, FWL 정리가 로 정확히 일치하고, 정사영의 고유값이 입니다. **의 개수가 **이며 대각합이 인 이유가 여기 있습니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 의사역행렬의 유일성은 예로 확인되지 않습니다. 네 조건을 만족하는 것이 하나뿐이라는 증명은 따로 필요하며, 이 강의에서는 정의로 받아들였습니다. 또 pinv는 SVD로 계산하는데 그 알고리즘은 88강의 내용이므로, 여기서는 결과가 네 조건을 만족한다는 사실만 확인했습니다. 그리고 심화 4에서 지적한 대로 pinv의 결과는 작은 특이값을 자르는 문턱에 의존하며, 이 예는 계수가 뚜렷해 문제가 되지 않았습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 모자행렬 | 예측값을 만듭니다 | |
| 잔차 사영 | 잔차를 만듭니다 | |
| h_ | 레버리지 | 의 대각 성분입니다 |
| A^ | 의사역행렬 | 무어-펜로즈 |
| PRESS | 예측 제곱합 | 하나 빼기 교차검증입니다 |
| 쿡 거리 | Cook's distance | 관측의 영향력입니다 |
| FWL | 프리시-워-로벨 | 통제한 뒤의 효과입니다 |
| R^ | 결정계수 | 코사인의 제곱입니다 |
이것으로 05단원을 마칩니다. 80강에서 직교기저를 만들고, 81강에서 분해로 저장하고, 82강에서 최소제곱을 풀고, 83강에서 정사영을 해부했습니다.
다음 84강부터 시작하는 06단원은 방향별로 들어갑니다. 04단원의 행렬식이 부피를 전체로 요약했고 05단원이 직교성을 도구로 삼았다면, 06단원은 어느 방향이 얼마나 늘어나는지를 묻습니다. 그 답이 고유값이며, 이 강의의 정사영도 고유값 과 만 갖는 특별한 경우였습니다.