88강 심화 2에서 저계수 근사를 다뤘습니다. 상위 개 특이값만 남기면 최선의 근사가 되고, 오차가 나머지 특이값의 제곱합의 제곱근입니다.
그런데 검산에서 무작위 행렬을 썼더니 에서도 뿐이었습니다. 특이값이 고르게 퍼져 있어 자를 곳이 없었기 때문입니다.
실제 데이터는 다릅니다. 변수들이 서로 관련되어 있으면 몇 개의 방향에 정보가 몰립니다. 검산에서 확인하겠지만, 구조가 있는 데이터는 **상위 세 개로 **를 설명합니다.
이 강의는 그 사실을 이용합니다. 데이터를 중심화하고 특이값 분해하면 분산이 큰 방향들이 나오고, 그것이 주성분입니다.
86강 심화 1의 최대최소 원리가 여기서 실무의 언어를 얻습니다.
**"분산을 최대로 하는 방향 찾기"**가 고유값 문제입니다. 그리고 마지막에 중요한 경고를 답니다. 주성분은 척도에 민감합니다.
문제. 세 변수를 관측한 데이터 가 있습니다.
(1) 각 열의 평균을 구하세요.
(2) 중심화하세요.
(3) 왜 필요한지 설명하세요.
생각의 실마리. 64강 심화 3에서 평균 빼기가 방향 정사영이라 했습니다. 그 방향을 제거해야 분산 구조가 드러납니다.
풀이. (1) 검산에서 평균이 입니다.
(2) 각 열에서 그 열의 평균을 뺍니다. 중심화 후 평균이 정확히 입니다.
(3) 중심화하지 않으면 첫 주성분이 평균 방향을 가리킵니다.
평균이 크면 둘째 항이 지배해, 데이터가 어떻게 퍼져 있는지가 아니라 어디에 있는지를 잡아냅니다.
이 문제에서 배우는 것: 중심화.
중심화. 이며, 83강의 언어로
입니다.
방향으로의 정사영을 제거하는 것이며, 83강 문제 5에서 결정계수를 다룰 때 같은 조작을 했습니다.
공분산 행렬이 여기서 나옵니다.
87강 심화 2에서 가 양반정치였으므로 도 그렇습니다. 그래서 고유값이 음이 아니고, 분산이 음수가 아니라는 사실과 일관됩니다.
로 나누는 이유는 83강 문제 1에서 다뤘습니다. 평균을 추정하느라 자유도 하나를 썼기 때문입니다.
바로 확인 1.
확인 1-1. 중심화를 정사영으로 쓰세요.
답. 입니다.
확인 1-2. 중심화하지 않으면 무엇이 문제입니까?
답. 첫 주성분이 평균 방향을 가리킵니다.
확인 1-3. 공분산이 양반정치인 이유를 쓰세요.
답. 꼴이라 이차형식이 분산이기 때문입니다.
문제. 문제 1의 에 대해
(1) 고유값과 고유벡터를 구하세요.
(2) 설명 분산 비율을 계산하세요.
(3) 대각합과 고유값의 합을 비교하세요.
생각의 실마리. 86강 심화 1에서 레일리 몫의 최댓값이 였습니다. 분산을 최대로 하는 방향이 최대 고유벡터입니다.
풀이. (1) 검산에서 고유값이
이고 첫 고유벡터가 입니다.
(2) 비율이
**첫 성분 하나로 **입니다.
(3) 합이 이고 와 같습니다.
이 문제에서 배우는 것: 주성분.
주성분. 공분산 행렬 의 고유벡터를 고유값 내림차순으로 정렬한 것을 주성분이라 하고, 고유값이 그 방향의 분산입니다.
86강 심화 1의 변분 특성이 근거입니다.
둘째 주성분은 첫째와 직교한다는 제약 아래 최대입니다.
87강 심화 4에서 제약 최적화로 다룬 것입니다.
대각합이 총분산입니다.
84강 문제 4에서 대각합이 고유값의 합이었으므로, 총분산이 주성분들의 분산으로 나뉩니다.
이 예에서 첫 성분이 인 것은 데이터가 거의 한 직선 위에 있다는 뜻입니다. 실제로 검산의 자료는 첫 두 변수가 공통 인자 에서 만들어졌습니다.
첫 주성분의 부호를 보면 입니다. 첫 변수가 이고 둘째가 였으므로, 두 변수가 반대로 움직이는 방향을 잡았습니다. 부호가 통째로 뒤집혀도 같은 방향이므로 상관없습니다.
바로 확인 2.
확인 2-1. 첫 주성분이 무엇을 최대화합니까?
답. 그 방향으로 사영한 데이터의 분산입니다.
확인 2-2. 설명 분산 비율을 쓰세요.
답. 입니다.
확인 2-3. 총분산이 무엇입니까?
답. 이며 고유값의 합입니다.
문제. 같은 데이터에 SVD를 적용합니다.
(1) 에서 을 계산하세요.
(2) 의 열과 고유벡터를 비교하세요.
(3) 주성분 점수의 성질을 확인하세요.
생각의 실마리. 88강 문제 1에서 의 고유값이 였습니다. 공분산이 그것을 로 나눈 것입니다.
풀이. (1) 검산에서 로 고유값과 정확히 같습니다.
(2) 의 첫 행과 첫 고유벡터가 부호를 빼면 같습니다.
(3) 주성분 점수 의 분산이 고유값과 같고, **성분끼리 상관이 **입니다.
이 문제에서 배우는 것: SVD로 하는 주성분분석.
관계. 이면
이므로 의 열이 주성분이고 이 분산입니다.
실무에서는 이 방법을 씁니다. 88강 심화 5에서 본 이유입니다.
공분산을 만들면 조건수가 제곱되어 작은 성분을 잃습니다. 81강 문제 5, 82강 문제 5에 이어 같은 교훈입니다.
주성분 점수의 뜻도 봅니다.
각 데이터점을 주성분 좌표로 표현한 것이며, 75강의 좌표 변환입니다. 그 좌표에서
| 성질 | 값 |
|---|---|
| 분산 | \lambda_ |
| 상관 | |
| 총분산 | 보존됩니다 |
둘째 줄이 주성분분석의 핵심 성과입니다. 원래 변수들은 상관되어 있었는데, 주성분 좌표에서는 완전히 상관이 없습니다.
75강 심화 5에서 백색화를 언급했는데, 그것은 여기서 한 걸음 더 나아가 분산까지 로 맞추는 것입니다. 심화 3에서 다룹니다.
바로 확인 3.
확인 3-1. SVD의 특이값과 주성분 분산의 관계를 쓰세요.
답. 입니다.
확인 3-2. 왜 공분산을 만들지 않습니까?
답. 조건수가 제곱되기 때문입니다.
확인 3-3. 주성분 점수의 상관이 얼마입니까?
답. 입니다.
문제. 개의 주성분만 남깁니다.
(1) 재구성 오차를 계산하세요.
(2) 버린 고유값의 합과 비교하세요.
(3) 몇 개를 남길지 정하는 기준을 정리하세요.
생각의 실마리. 88강 심화 2의 에카르트-영 정리를 데이터에 적용합니다.
풀이. (1)과 (2)를 검산에서 확인합니다.
| 재구성 오차 제곱 | \sum_{i>k}\sigma_{i}^ | 누적 비율 | |
|---|---|---|---|
정확히 일치합니다.
(3) 기준을 정리합니다.
이 문제에서 배우는 것: 차원 선택.
재구성 오차.
버린 방향의 분산이 곧 오차입니다. 88강의 에카르트-영이 여기서 실무적 뜻을 얻습니다.
두 관점이 같습니다.
| 관점 | 목표 |
|---|---|
| 분산 최대 | 사영한 데이터가 최대한 퍼지게 |
| 오차 최소 | 원래 데이터를 최대한 잘 복원 |
피타고라스 정리로 이어집니다. 총분산이 보존되므로
82강 문제 3, 83강 문제 5에 이어 같은 정리가 세 번째로 나타납니다.
를 고르는 기준을 정리합니다.
| 기준 | 내용 | 주의 |
|---|---|---|
| 누적 비율 | 또는 까지 | 임의적입니다 |
| 스크리 그림 | 꺾이는 지점 | 눈으로 판단합니다 |
| 카이저 규칙 | 상관행렬에서 | 표준화했을 때만 |
| 교차검증 | 예측 성능이 최선인 곳 | 가장 원칙적입니다 |
셋째 줄의 근거는 심화 1에서 봅니다. 상관행렬의 대각합이 이므로 평균 고유값이 이고, 평균보다 못한 성분은 버린다는 발상입니다.
넷째 줄이 가장 낫지만 비쌉니다. 주성분을 목적 자체로 쓸 때는 첫 세 줄로 충분한 경우가 많습니다.
이 예에서는 **첫 성분 하나로 **이므로 이 자연스럽습니다. 실제로 자료가 하나의 잠재 인자에서 만들어졌으므로 옳은 판단입니다.
바로 확인 4.
확인 4-1. 재구성 오차를 고유값으로 쓰세요.
답. 입니다.
확인 4-2. 주성분분석의 두 관점을 쓰세요.
답. 분산 최대화와 재구성 오차 최소화입니다.
확인 4-3. 를 고르는 기준을 두 개 쓰세요.
답. 누적 설명 비율과 교차검증입니다.
문제. 셋째 변수의 단위를 바꿔 배로 만듭니다.
(1) 설명 분산 비율이 어떻게 됩니까?
(2) 표준화하면 어떻습니까?
(3) 어느 쪽을 써야 합니까?
생각의 실마리. 공분산은 단위에 따라 값이 달라집니다. 미터로 재느냐 센티미터로 재느냐가 분산을 배 바꿉니다.
풀이. (1) 검산에서 비율이
**첫 성분이 **가 되었는데, 실은 셋째 변수 하나가 지배하는 것입니다. 원래 그 변수는 잡음이었는데 단위 때문에 주인공이 되었습니다.
(2) 각 변수를 표준편차로 나누면
이고 고유값의 합이 정확히 입니다.
(3) 상황에 따라 다릅니다.
이 문제에서 배우는 것: 척도 민감성.
경고. 주성분분석은 척도에 민감합니다. 단위를 바꾸면 결과가 완전히 달라집니다.
왜 그런가. 공분산 행렬이 로 척도 조정되면
이고, 87강 심화 1의 합동변환입니다. 고유값이 보존되지 않습니다.
77강과 87강의 구별이 여기서 실무적 결과를 냅니다.
두 선택을 정리합니다.
| 공분산 기반 | 상관 기반 (표준화) | |
|---|---|---|
| 쓰는 때 | 단위가 같을 때 | 단위가 다를 때 |
| 예 | 같은 센서의 시계열 | 키, 몸무게, 소득 |
| 대각합 | 총분산 | (변수 개수) |
| 장점 | 원래 분산 구조 유지 | 단위 무관 |
| 단점 | 큰 변수가 지배 | 정보량 차이를 무시 |
둘째 줄이 판단 기준입니다. 단위가 다르면 표준화가 사실상 필수이고, 같으면 공분산이 낫습니다.
단점도 실재합니다. 표준화하면 잡음 변수도 분산 이 되어 신호와 같은 비중을 갖습니다. 이 예에서 셋째 변수는 잡음뿐인데 표준화 후 의 둘째 성분에 기여합니다.
가정이지 중립적 선택이 아닙니다. 69강 심화 5와 82강 심화 2에서 반복한 이야기입니다. 데이터가 결정하지 못하는 것을 사람이 정합니다.
바로 확인 5.
확인 5-1. 척도를 바꾸면 공분산이 어떻게 변합니까?
답. 로 합동변환되며 고유값이 보존되지 않습니다.
확인 5-2. 상관행렬의 대각합을 쓰세요.
답. 변수의 개수 입니다.
확인 5-3. 표준화가 중립적 선택입니까?
답. 아닙니다. 모든 변수가 똑같이 중요하다는 가정입니다.
| 단계 | 내용 |
|---|---|
| 1 | 중심화 |
| 2 | 필요하면 표준화 |
| 3 | SVD X_{c}=U\Sigma V^ |
| 4 | 주성분은 의 열, 분산은 |
| 5 | 점수 |
| 양 | 식 |
|---|---|
| 공분산 | |
| 설명 비율 | \lambda_{i}/\sum\lambda_ |
| 총분산 | \operatorname{tr}C=\sum\lambda_ |
| 재구성 오차 | (n-1)\sum_{i>k}\lambda_ |
| 두 관점 | |
|---|---|
| 분산 최대 | 사영이 최대한 퍼지게 |
| 오차 최소 | 원래를 최대한 복원 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 중심화를 건너뜁니다 | 첫 성분이 평균을 가리킵니다 |
| 공분산을 만들어 고유분해합니다 | 데이터에 SVD를 씁니다 |
| 단위가 다른데 표준화 안 합니다 | 큰 변수가 지배합니다 |
| 표준화를 중립이라 봅니다 | 가정입니다 |
문제 6. 중심화를 정사영으로 쓰세요.
답. 입니다.
문제 7. 중심화하지 않으면 무엇이 문제입니까?
답. 첫 주성분이 평균 방향을 가리킵니다.
문제 8. 공분산 행렬의 정의를 쓰세요.
답. 입니다.
문제 9. 첫 주성분이 무엇을 최대화합니까?
답. 그 방향으로 사영한 데이터의 분산입니다.
문제 10. 총분산을 두 가지로 쓰세요.
답. 이고 입니다.
문제 11. SVD의 특이값과 주성분 분산의 관계를 쓰세요.
답. 입니다.
문제 12. 공분산을 만들지 않는 이유를 쓰세요.
답. 조건수가 제곱되기 때문입니다.
문제 13. 주성분 점수의 상관을 쓰세요.
답. 입니다.
문제 14. 재구성 오차를 고유값으로 쓰세요.
답. 입니다.
문제 15. 주성분분석의 두 관점을 쓰세요.
답. 분산 최대화와 재구성 오차 최소화입니다.
문제 16. 척도를 바꾸면 공분산이 어떻게 변합니까?
답. 로 합동변환됩니다.
문제 17. 상관행렬의 대각합을 쓰세요.
답. 변수의 개수입니다.
문제 18. 카이저 규칙을 쓰고 조건을 쓰세요.
답. 고유값이 보다 큰 성분만 남기며 상관행렬일 때만 씁니다.
심화 1. 상관행렬의 성질을 정리하고 카이저 규칙을 설명하세요.
풀이. 표준화한 데이터의 공분산이 상관행렬입니다.
검산에서 대각이 모두 이고 대각합이 정확히 입니다.
대각이 인 이유는 자기와의 상관이 이기 때문이며, 63강 문제 5에서 상관계수가 코사인이라 했으니 각도가 입니다.
따라서 **평균 고유값이 **입니다.
카이저 규칙이 여기서 나옵니다.
카이저 규칙. 상관행렬의 고유값이 보다 큰 성분만 남깁니다.
**"평균보다 많이 설명하는 것만 쓴다"**는 뜻입니다. 원래 변수 하나가 분산 을 갖는데, 주성분이 그보다 못하면 굳이 쓸 이유가 없다는 발상입니다.
공분산 행렬에는 쓸 수 없습니다. 대각합이 총분산이라 이 기준이 될 이유가 없습니다.
한계도 있습니다.
| 문제 | 내용 |
|---|---|
| 임의성 | 이라는 문턱에 이론적 근거가 약합니다 |
| 과다 추출 | 변수가 많으면 성분을 너무 많이 남깁니다 |
| 표본 변동 | 고유값이 근처면 판정이 흔들립니다 |
평행분석이 더 나은 대안입니다. 같은 크기의 무작위 데이터에서 고유값 분포를 구하고, 그보다 큰 것만 남깁니다. 검산의 마지막 블록이 그 발상의 배경입니다.
무작위여도 첫 성분이 는 됩니다. 아무 구조가 없어도 우연히 큰 방향이 생기기 때문이며, 그 수준을 넘어야 의미가 있습니다.
심화 2. 주성분분석의 통계적 해석과 한계를 논하세요.
풀이. 주성분이 무엇을 가정하는지 봅니다.
가정하는 것.
| 가정 | 내용 |
|---|---|
| 선형성 | 구조가 선형 부분공간입니다 |
| 분산이 정보 | 많이 변하는 방향이 중요합니다 |
| 직교성 | 성분들이 서로 수직입니다 |
둘째 줄이 가장 강한 가정입니다. 분산이 크다고 유용한 것은 아닙니다.
반례를 봅니다. 분류 문제에서 두 집단을 가르는 방향의 분산이 작을 수 있습니다. 그러면 주성분분석이 그 방향을 버립니다.
선형판별분석이 그 대안이며, 87강 심화 3에서 본 일반화 고유값 문제입니다.
셋째 줄도 제약입니다. 실제 요인이 직교하지 않을 수 있는데 주성분은 강제로 직교입니다. 인자분석은 그 제약을 풀고 회전을 허용합니다.
해석의 어려움도 큽니다. 주성분은 원래 변수들의 결합이라 뜻이 불분명합니다.
"이것이 무엇인가"에 답하기 어렵습니다. 75강 심화 5에서 언급한 계산 편의와 해석 편의의 대립입니다.
부호와 순서의 임의성도 있습니다.
| 사항 | 내용 |
|---|---|
| 부호 | 와 가 같습니다 |
| 중복 고유값 | 그 부분공간 안에서 자유롭습니다 |
85강 심화 5의 경고가 여기서 실무 문제가 됩니다. 두 고유값이 비슷하면 개별 성분을 해석하면 안 되고 그 둘이 만드는 평면만 의미가 있습니다.
비선형 확장도 있습니다.
| 방법 | 내용 |
|---|---|
| 커널 주성분 | 특징 공간에서 주성분 |
| 오토인코더 | 신경망으로 비선형 압축 |
| 다양체 학습 | 곡면 구조를 찾습니다 |
둘째 줄이 주성분의 일반화입니다. 은닉층이 선형이고 손실이 제곱오차이면 오토인코더가 주성분과 같은 부분공간을 찾습니다. 비선형을 넣어야 더 나아갑니다.
심화 3. 백색화와 그 응용을 다루세요.
풀이. 75강 심화 5와 82강 심화 3에서 언급했습니다. 정확히 정의합니다.
백색화. 데이터를 변환해 공분산이 가 되게 하는 것입니다.
일 때
86강 문제 5의 대칭 제곱근이며 입니다.
검산에서 변환 후 공분산이 정확히 단위행렬입니다.
주성분분석과의 차이를 봅니다.
| 변환 | 결과 |
|---|---|
| 주성분 () | 상관 , 분산은 \lambda_ |
| 백색화 () | 상관 , 분산 모두 |
백색화가 한 걸음 더 갑니다. 분산까지 맞추므로 모든 방향이 대등해집니다.
유일하지 않습니다. 뒤에 아무 직교행렬을 곱해도 여전히 백색화입니다.
| 선택 | 이름 |
|---|---|
| Q\Lambda^ | 주성분 백색화 |
| Q\Lambda^{-1/2}Q^ | 대칭 백색화 (ZCA) |
| 콜레스키 | 콜레스키 백색화 |
둘째 줄이 원래 좌표에 가장 가깝습니다. 대칭이라 회전을 최소로 하며, 이미지 처리에서 선호됩니다.
응용을 봅니다.
| 분야 | 왜 백색화 |
|---|---|
| 독립성분분석 | 전처리로 필수 |
| 신경망 입력 | 학습이 빨라집니다 |
| 배치 정규화 | 대각만 하는 간이판 |
| 마할라노비스 거리 | 백색화 후의 유클리드 거리 |
둘째 줄의 이유는 87강 심화 6에서 봤습니다. 조건수가 크면 경사하강법이 느린데, 백색화하면 이 됩니다.
셋째 줄이 실용적 타협입니다. 전체 공분산의 역제곱근은 비싸므로, 각 차원을 따로 정규화합니다. 상관은 남지만 척도는 맞춰집니다.
주의도 있습니다. 작은 고유값이 있으면 이 폭발합니다. 잡음 방향을 증폭하므로 실무에서는 으로 정칙화합니다.
82강 심화 2의 능형과 같은 조작입니다.
심화 4. 특이값의 감쇠가 무엇을 뜻하는지 논하세요.
풀이. 88강 심화 2에서 무작위 행렬은 자를 곳이 없었습니다. 실제 데이터와 비교합니다.
검산에서 두 행렬을 만듭니다.
| 데이터 | 누적 개 | 누적 개 | 누적 개 |
|---|---|---|---|
| 무작위 | |||
| 구조적 (계수 + 잡음) |
**둘째 줄에서 세 개로 **입니다. 계수 인 신호에 잡음을 더했으므로 정확히 예상대로입니다.
감쇠 속도가 구조를 말합니다.
| 감쇠 | 뜻 |
|---|---|
| 급격 | 저차원 구조가 있습니다 |
| 완만 | 구조가 없거나 고차원입니다 |
| 계단 | 유효 차원이 뚜렷합니다 |
| 지수적 | 매끄러운 함수 데이터 |
넷째 줄이 흥미롭습니다. 매끄러운 함수를 격자에서 표본한 행렬은 특이값이 지수적으로 떨어집니다. 그래서 적은 항으로 잘 근사되며, 이것이 저계수 근사가 물리 시뮬레이션에서 잘 통하는 이유입니다.
무작위 행렬의 특이값 분포도 이론이 있습니다. 이고 비가 고정되면 마르첸코-파스투르 분포를 따릅니다. 그 분포의 상한을 넘는 특이값만 신호로 봅니다.
심화 1의 평행분석이 이 사실을 표본으로 구현한 것입니다.
실무의 절차를 정리합니다.
| 단계 | 하는 일 |
|---|---|
| 1 | 특이값을 정렬해 그립니다 (스크리) |
| 2 | 급감하는 지점을 찾습니다 |
| 3 | 잡음 수준과 비교합니다 |
| 4 | 교차검증으로 확인합니다 |
둘째 줄이 눈에 의존하므로 셋째와 넷째로 보완합니다.
심화 5. 주성분분석과 다른 차원 축소를 비교하세요.
풀이. 주성분이 유일한 방법은 아닙니다.
선형 방법.
| 방법 | 목표 |
|---|---|
| 주성분 | 분산 최대 (비지도) |
| 선형판별 | 집단 분리 최대 (지도) |
| 정준상관 | 두 집합의 상관 최대 |
| 독립성분 | 통계적 독립 |
| 무작위 사영 | 거리 보존 |
둘째 줄이 주성분의 지도학습 대응입니다. 87강 심화 3의 일반화 고유값 문제이며, 클래스 정보를 씁니다.
넷째 줄은 직교성 대신 독립을 요구합니다. 백색화가 전처리이고, 그 뒤 회전으로 비가우스성을 최대화합니다. 소리 분리 같은 문제에 쓰입니다.
다섯째 줄이 73강 심화 4의 결과입니다. 존슨-린덴슈트라우스에 의해 무작위 사영이 거리를 거의 보존하며, 계산이 극도로 쌉니다.
비선형 방법.
| 방법 | 특징 |
|---|---|
| 커널 주성분 | 특징 공간에서 선형 |
| 다차원척도법 | 거리 구조 보존 |
| t-SNE, UMAP | 국소 이웃 보존, 시각화용 |
| 오토인코더 | 학습으로 압축 |
셋째 줄이 시각화의 표준인데 주의가 필요합니다. 국소 구조는 잘 보존하지만 군집 사이의 거리와 크기는 믿으면 안 됩니다. 매개변수에 따라 그림이 크게 달라집니다.
선택 기준을 정리합니다.
| 상황 | 권장 |
|---|---|
| 선형 구조, 해석 필요 | 주성분 |
| 분류가 목적 | 선형판별 |
| 속도가 중요 | 무작위 사영 |
| 시각화 | UMAP (주의해서) |
| 복잡한 구조 | 오토인코더 |
주성분이 여전히 첫 선택인 이유는 결정적이고, 유일하며, 이론이 완비되어 있기 때문입니다. 다른 방법들은 초기값이나 매개변수에 의존합니다.
심화 6. 06단원을 정리하고 07단원을 예고하세요.
풀이. 84강부터 89강까지가 하나의 질문에 답한 과정임을 정리합니다.
어느 방향이 얼마나 늘어나는가.
84강. 방향이 안 바뀌는 벡터를 찾았습니다. 있으면 그 방향에서 문제가 일차원이 됩니다.
85강. 그런 방향들로 기저를 만들면 대각화됩니다. 되면 거듭제곱과 함수가 쉬워지고, 안 되거나 조건수가 나쁘면 쓸 수 없습니다.
86강. 대칭이면 두 문제가 모두 사라집니다. 스펙트럼 정리가 06단원의 중심입니다.
87강. 이차형식의 부호가 고유값으로 결정됩니다. 볼록성과 최적화의 판정이 여기서 나옵니다.
88강. 정사각도 대칭도 아닌 경우까지 확장합니다. 기저를 둘 쓰면 언제나 됩니다.
89강. 그것을 데이터에 적용해 차원을 줄입니다.
04단원의 행렬식이 전체 요약이었고, 05단원의 직교성이 도구였으며, 06단원이 세부를 채웠습니다.
핵심 등식을 모읍니다.
| 등식 | 강의 |
|---|---|
| A\mathbf{v}=\lambda\mathbf | 84 |
| A=V\Lambda V^ | 85 |
| A=Q\Lambda Q^ | 86 |
| q=\sum\lambda_{i}c_{i}^ | 87 |
| A=U\Sigma V^ | 88 |
| 89 |
07단원(90~92강)이 남았습니다. 지금까지 계속 나온 경고들을 정리하는 단원입니다.
| 지금까지의 경고 | 07단원에서 |
|---|---|
| 조건수가 크면 위험 | 91강에서 정의와 정리 |
| \kappa(A^{\top}A)=\kappa(A)^ | 91강 |
| 파국적 상쇄 | 92강 |
| 넘침과 로그 계산 | 92강 |
| 노름이 여러 가지 | 90강 |
88강 문제 5에서 노름과 조건수를 특이값으로 썼는데, 그 정의를 90강에서 정식으로 세웁니다. 그리고 91강에서 "왜 조건수가 오차를 증폭하는지"를 증명하며, 92강에서 부동소수점의 실제 규칙을 다룹니다.
이 강의에서는 numpy만 씁니다. 중심화부터 주성분까지 직접 계산하고, 고유분해와 SVD가 같은 결과를 줌을 확인하며, 재구성 오차와 척도 민감성을 봅니다.
import numpy as np
rng = np.random.default_rng(71)
# --- 문제 1: 중심화 ------------------------------------------------------
n = 300
t = rng.standard_normal(n)
X = np.column_stack([2*t + 0.3*rng.standard_normal(n) + 5.0,
-1.5*t + 0.3*rng.standard_normal(n) - 2.0,
0.4*rng.standard_normal(n) + 1.0])
mu = X.mean(axis=0); Xc = X - mu
print(np.round(mu,4).tolist()) # [4.8974, -1.9327, 1.0006]
print((np.round(Xc.mean(axis=0),12)+0.0).tolist()) # [0.0, 0.0, 0.0]
# --- 문제 2: 공분산의 고유분해 ------------------------------------------
C = Xc.T@Xc/(n-1)
w, Q = np.linalg.eigh(C)
idx = np.argsort(w)[::-1]; w = w[idx]; Q = Q[:,idx]
print(np.round(w,6).tolist()) # [5.056758, 0.159171, 0.08487]
print(np.round(w/w.sum(),6).tolist(), "%.6f" % float(np.cumsum(w/w.sum())[0]))
# [0.953961, 0.030028, 0.016011] 0.953961
print(np.round(Q[:,0],6).tolist()) # [-0.798573, 0.601798, 0.010987]
print("%.8f %.8f" % (w.sum(), np.trace(C))) # 5.30079905 5.30079905
# --- 문제 3: SVD 가 같은 답을 줍니다 ------------------------------------
U, s, Vt = np.linalg.svd(Xc, full_matrices=False)
print(np.round(s**2/(n-1), 6).tolist()) # [5.056758, 0.159171, 0.08487]
print(bool(np.allclose(np.abs(Vt[0]), np.abs(Q[:,0])))) # True
Z = Xc@Q # 주성분 점수
print(np.round(Z.var(axis=0, ddof=1),6).tolist()) # 분산이 고유값과 같습니다
print((np.round(np.corrcoef(Z.T),8)+0.0).tolist())
# [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]] (상관이 0)
# --- 문제 4: 재구성 오차 = 버린 특이값의 제곱합 -------------------------
tot = np.sum(s**2)
for k in [1,2,3]:
Xk = (U[:,:k]*s[:k]) @ Vt[:k]
print(k, "%.6f %.6f" % (np.linalg.norm(Xc-Xk,'fro')**2, np.sum(s[k:]**2)),
"%.6f" % (np.sum(s[:k]**2)/tot))
# 1 72.968396 72.968396 0.953961
# 2 25.376135 25.376135 0.983989
# 3 0.000000 0.000000 1.000000
# --- 문제 5: 척도에 민감합니다 ------------------------------------------
Xs = Xc.copy(); Xs[:,2] = Xs[:,2]*100 # 셋째 변수만 단위를 바꿉니다
ws = np.sort(np.linalg.eigvalsh(Xs.T@Xs/(n-1)))[::-1]
print(np.round(ws/ws.sum(),6).tolist())
# [0.996793, 0.003153, 5.3e-05] <- 잡음 변수가 주인공이 되었습니다
Xz = Xc/Xc.std(axis=0, ddof=1) # 표준화
wz = np.sort(np.linalg.eigvalsh(Xz.T@Xz/(n-1)))[::-1]
print(np.round(wz/wz.sum(),6).tolist(), "%.6f" % float(wz.sum()))
# [0.657312, 0.330787, 0.011901] 3.000000
# --- 심화 1: 상관행렬의 대각합은 p 입니다 --------------------------------
R = np.corrcoef(Xc.T)
print(np.round(np.diag(R),8).tolist(), "%.8f" % float(np.trace(R)))
# [1.0, 1.0, 1.0] 3.00000000
# --- 심화 3: 백색화하면 공분산이 I 가 됩니다 ----------------------------
W = Q@np.diag(1/np.sqrt(w))@Q.T # C^{-1/2}
print((np.round(np.cov((Xc@W).T, ddof=1), 8)+0.0).tolist())
# [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]
# --- 심화 4: 특이값 감쇠가 구조를 말합니다 ------------------------------
Rand = rng.standard_normal((300,20))
Struct = (rng.standard_normal((300,3)) @ rng.standard_normal((3,20))
+ 0.1*rng.standard_normal((300,20)))
for name, M in [("무작위", Rand), ("구조적", Struct)]:
sv = np.linalg.svd(M - M.mean(axis=0), compute_uv=False)
cum = np.cumsum(sv**2)/np.sum(sv**2)
print(name, "%.4f %.4f %.4f" % (cum[0], cum[2], cum[4]))
# 무작위 0.0747 0.2123 0.3370
# 구조적 0.4986 0.9964 0.9970
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 중심화 후 평균이 정확히 입니다. 원래 평균이 으로 컸으므로, 중심화하지 않으면 그 방향이 첫 성분을 차지했을 것입니다.
둘째, 고유값이 이고 **첫 성분이 **입니다. 자료가 하나의 잠재 인자 에서 만들어졌으므로 맞습니다. 대각합과 고유값의 합이 소수 여덟 자리까지 일치합니다.
셋째, SVD의 이 고유값과 완전히 같습니다. 그리고 주성분 점수의 상관행렬이 정확히 단위행렬입니다. 원래 변수들은 상관되어 있었는데 주성분 좌표에서는 사라졌습니다.
넷째, 재구성 오차가 와 소수 여섯 자리까지 일치합니다. 88강 심화 2의 에카르트-영이 데이터에서도 그대로입니다.
다섯째가 이 강의의 경고입니다. 셋째 변수만 배 했더니 설명 비율이 에서 로 올랐는데, 그 성분은 이제 잡음 변수를 가리킵니다. 표준화하면 로 완전히 다른 그림이 나오고 고유값의 합이 정확히 입니다.
심화 4의 대비도 인상적입니다. **무작위 데이터는 세 개로 인데 구조적 데이터는 **입니다. 자를 곳이 있는지 없는지가 특이값 감쇠에서 보입니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 주성분이 최적임은 예로 증명되지 않습니다. 86강 심화 1의 최대최소 원리와 88강 심화 2의 에카르트-영이 그 자리를 맡습니다. 그리고 이 검산은 공분산을 만들어 고유분해했는데, 문제 3에서 말한 대로 실무에서는 SVD를 씁니다. 여기서 둘을 비교하려고 일부러 양쪽을 계산했으며, 조건이 좋은 예라 차이가 나지 않았을 뿐입니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| X_ | 중심화 데이터 | 열마다 평균을 뺍니다 |
| 공분산 행렬 | 입니다 | |
| 상관행렬 | 대각이 이고 대각합이 입니다 | |
| 주성분 | principal component | 공분산의 고유벡터입니다 |
| 주성분 점수 | 입니다 | |
| 설명 분산 비율 | explained variance | 입니다 |
| 스크리 그림 | scree plot | 고유값을 크기순으로 그립니다 |
| 백색화 | whitening | 공분산을 로 만듭니다 |
| 카이저 규칙 | Kaiser | 상관행렬에서 |
이것으로 06단원을 마칩니다. 84강에서 방향을 찾고, 85강에서 기저로 삼고, 86강에서 대칭의 특권을 확인하고, 87강에서 부호를 판정하고, 88강에서 모든 행렬로 확장하고, 89강에서 데이터에 적용했습니다.
다음 90강부터 시작하는 07단원은 한계를 잽니다. 이 과목 내내 "조건수가 크면 위험하다"고 경고했는데, 그 조건수를 정식으로 정의하고 왜 오차가 증폭되는지 증명합니다. 88강 문제 5에서 특이값으로 쓴 이 그 답이며, 90강의 노름이 먼저 필요합니다.