169강이 한 변수를, 170강이 두 변수를 그렸습니다. 이제 셋 이상을 봅니다.
170강 심화 4에서 한계를 이미 보았습니다. 변수가 개면 두 변수 짝이 개라 다 그릴 수 없고, 둘씩 본 관계는 셋을 함께 본 관계와 다릅니다.
그런데 문제가 그것만이 아닙니다.
| 차원이 오르면 | 무슨 일이 일어나는가 |
|---|---|
| 거리 | 모든 점이 비슷하게 멀어집니다 |
| 부피 | 껍질과 모서리로 몰립니다 |
| 볼 것 | 짝의 수가 제곱으로 늡니다 |
| 우연 | 무관한 자료에서도 눈에 띄는 것이 생깁니다 |
그래서 차원을 줄여서 봅니다. 89강의 주성분분석이 그 도구인데, 줄이는 순간 무엇을 잃는지가 이 강의의 주제입니다.
결론은 이번에도 같습니다. 차원축소도 요약이고, 요약은 버리는 일입니다. 다만 무엇을 버릴지는 고를 수 있습니다.
문제. 차원을 올려 가며 재 봅니다.
(1) 거리가 어떻게 되는지 구하세요.
(2) 부피가 어디로 몰리는지 구하세요.
(3) 봐야 할 짝의 개수를 세세요.
생각의 실마리. 우리가 쓰는 방법의 대부분이 가깝다는 개념에 기대고 있습니다. 이웃, 군집, 밀도가 전부 그렇습니다. 그러면 차원이 높을 때도 가깝다는 말이 뜻이 있는지를 먼저 확인해야 합니다.
풀이. (1) 표준정규에서 점 개를 뽑고 기준점까지의 거리를 잽니다.
| 차원 | 가장 가까운 거리 | 가장 먼 거리 | (먼가까운)/가까운 | 표준편차/평균 |
|---|---|---|---|---|
이면 가장 가까운 점과 가장 먼 점의 차이가 퍼센트도 안 됩니다.
가깝다는 말이 뜻을 잃습니다. 개 점 중 어느 것을 골라도 거의 같은 거리이므로, 이웃을 쓰는 방법이 모두 흔들립니다.
(2) 부피는 껍질로 몰립니다.
| 차원 | 바깥 퍼센트 껍질의 몫 | 정육면체 대비 공의 부피 |
|---|---|---|
이면 부피의 퍼센트가 바깥 퍼센트 껍질에 있습니다. 가운데는 사실상 비어 있습니다.
정육면체 안에 든 공의 부피가 사실상 입니다. 에서 이미 이며, 공간의 거의 전부가 모서리입니다. 그래서 고차원에서 "가운데를 채운다"는 직관이 통하지 않습니다.
(3) 봐야 할 것도 폭발합니다.
| 변수 | 두 변수 짝 | 세 변수 짝 | 평행좌표 축 순서 |
|---|---|---|---|
| 3.000\times 10^ | |||
| 6.000\times 10^ | |||
| 1.814\times 10^ | |||
| 1.216\times 10^ |
이면 두 변수 짝만 개이고 세 변수 짝은 개입니다. 하나씩 보는 것이 불가능합니다.
이 문제에서 배우는 것. 고차원에서는 눈으로 보는 것뿐 아니라 계산하는 것도 어려워집니다. 거리가 무너지고 부피가 껍질로 가는 것은 그림의 문제가 아니라 공간의 성질이며, 이웃 기반 방법과 밀도 추정이 모두 여기서 막힙니다. 169강 심화에서 밀도 추정의 수렴 속도가 라고 한 것이 같은 이야기입니다. 그래서 차원을 줄이는 것이 편의가 아니라 필요입니다.
바로 확인 1.
확인 1-1. 차원이 오르면 거리가 어떻게 되는지 검산 값과 함께 쓰세요.
답. 서로 비슷해지며 에서 최대와 최소의 차이가 최소의 배뿐입니다.
확인 1-2. 껍질의 몫을 식으로 쓰세요.
답. 이며 , 에서 입니다.
확인 1-3. 변수 개일 때 두 변수 짝과 세 변수 짝의 개수를 쓰세요.
답. 개와 개입니다.
문제. 평행좌표를 봅니다.
(1) 이웃한 축의 짝이 전체의 몇 분의 몇인지 구하세요.
(2) 선이 겹치는 정도를 계산하세요.
(3) 다변량 그림을 목적별로 정리하세요.
생각의 실마리. 축을 나란히 세우고 한 관측을 꺾은선으로 이으면 변수가 아무리 많아도 한 판에 들어갑니다. 그런데 무엇이 보이는지를 따져 봐야 합니다.
풀이. (1) 이웃한 축끼리만 관계가 보입니다.
| 변수 | 전체 짝 | 이웃한 짝 | 보이는 비율 |
|---|---|---|---|
이면 개 짝 중 개만 이웃이라 만 보입니다.
축 순서를 바꾸면 다른 짝이 보입니다. 문제 1에서 본 대로 순서의 가짓수가 이므로, 순서를 고르는 것이 곧 무엇을 볼지 고르는 것입니다.
(2) 선이 겹치는 정도도 계산됩니다. 관측 개를 축 개에 그리면 선분이 개입니다.
| 한 축의 눈금 칸 | 칸당 평균 선 | 빈 칸 비율 |
|---|---|---|
168강 문제 5의 겹침이 선에서는 더 심합니다. 점은 한 자리만 차지하는데 선은 두 축 사이를 가로질러 훨씬 넓게 덮습니다.
(3) 다변량 그림을 목적별로 정리합니다.
| 그림 | 무엇을 잘 보이는가 |
|---|---|
| 산점도 행렬 | 모든 두 변수 짝, 가 작을 때만 |
| 평행좌표 | 이웃한 축의 관계와 집단의 흐름 |
| 히트맵 | 상관행렬의 덩어리 구조 |
| 차원축소 산점도 | 전체 배치와 군집 |
| 작은 배수 | 한 변수를 조건으로 나눈 관계 |
둘째 줄의 쓸모는 관계가 아니라 흐름입니다. 집단마다 선의 다발이 다른 모양으로 지나가면 그 집단의 특징이 한눈에 보입니다. 짝의 관계를 정확히 읽는 도구는 아닙니다.
이 문제에서 배우는 것. 한 판에 다 넣는 것과 다 보이는 것은 다릅니다. 평행좌표는 변수 개도 한 판에 넣지만 보이는 짝은 퍼센트뿐이며, 나머지는 넣었는데 안 보입니다. 168강 문제 5의 결론이 그대로입니다. 판의 크기가 담을 수 있는 정보의 상한을 정하며, 넣는 것과 보이는 것을 구별해야 합니다.
바로 확인 2.
확인 2-1. 평행좌표에서 보이는 짝의 비율을 식으로 쓰세요.
답. 이며 이면 입니다.
확인 2-2. 축 순서가 왜 중요한지 쓰세요.
답. 이웃한 축만 관계가 보이므로 순서가 무엇을 볼지 정하기 때문입니다.
확인 2-3. 평행좌표가 잘 보이는 것을 쓰세요.
답. 이웃한 축의 관계와 집단마다의 선 다발 흐름입니다.
문제. 주성분분석을 봅니다.
(1) 설명 비율을 구하세요.
(2) 단위를 바꾸면 어떻게 되는지 확인하세요.
(3) 몇 개를 남길지 정하는 기준을 비교하세요.
생각의 실마리. 차원을 줄이려면 무엇을 지킬지 정해야 합니다. 주성분은 분산을 지킵니다. 분산이 가장 큰 방향부터 차례로 골라 남기는 것입니다.
풀이. (1) 변수 개이고 앞의 개만 서로 얽혀 있습니다.
| 성분 | 고윳값 | 설명 비율 | 누적 |
|---|---|---|---|
앞의 두 성분이 를 설명합니다. 차원을 차원으로 줄여도 분산의 퍼센트가 남습니다.
뒤의 세 성분이 거의 같은 크기입니다. , , 인데, 얽히지 않은 잡음 변수들이라 방향이 정해지지 않기 때문입니다.
(2) 그런데 단위를 바꾸면 결과가 통째로 바뀝니다.
| 무엇을 했는가 | 첫 성분 설명 비율 | 가장 큰 가중치를 받은 변수 |
|---|---|---|
| 원자료 | ||
| 한 변수만 배 | ||
| 원자료를 표준화 | 해당 없음 | |
| 배 뒤 표준화 | 해당 없음 |
한 변수의 단위만 배로 바꿨더니 첫 성분이 그 변수로 넘어갔습니다. 설명 비율도 이 되는데, 그 변수의 분산이 나머지를 압도하기 때문입니다.
표준화하면 단위를 바꿔도 같은 답이 나옵니다. 으로 정확히 같습니다. 89강에서 본 그대로이며, 단위가 다른 변수를 섞을 때는 표준화가 사실상 필수입니다.
표준화가 언제나 옳은 것은 아닙니다. 모든 변수가 같은 단위이고 분산의 차이 자체가 뜻이 있으면 표준화가 그 정보를 지웁니다.
(3) 몇 개를 남길지 정하는 기준이 몇 가지 있습니다.
| 기준 | 이 자료에서 남기는 수 | 근거 |
|---|---|---|
| 고윳값이 보다 큼 | 표준화한 경우 | |
| 누적 퍼센트 | 설명 비율 | |
| 스크리의 팔꿈치 | 고윳값 차이 |
세 기준이 , , 로 전부 다릅니다.
목적이 정해지지 않으면 개수도 정해지지 않습니다. 그림을 그리려면 개이고, 뒤에 모형을 붙일 것이면 교차검증으로 정하는 것이 낫습니다.
이 문제에서 배우는 것. 주성분은 분산을 지키는 요약이며, 분산이 지킬 만한 것인지는 자료가 말해 주지 않습니다. 단위 하나로 결과가 뒤집히는 것이 그 증거입니다. 그리고 남길 개수를 정하는 기준이 여럿인데 답이 다른 것은, 165강 문제 1에서 사분위수 계산 방식이 여덟 가지였던 것과 같은 종류의 문제입니다. 규약이 필요한 자리이며, 무엇을 썼는지 적어야 합니다.
바로 확인 3.
확인 3-1. 주성분이 지키는 것을 쓰세요.
답. 분산이며 분산이 가장 큰 방향부터 차례로 남깁니다.
확인 3-2. 검산에서 한 변수만 배 했을 때의 변화를 쓰세요.
답. 첫 성분 설명 비율이 에서 이 되고 주도하는 변수가 번에서 번으로 바뀝니다.
확인 3-3. 남길 개수의 세 기준과 이 자료에서의 답을 쓰세요.
답. 고윳값 기준 개, 누적 퍼센트 개, 스크리 팔꿈치 개입니다.
문제. 줄이면서 잃는 것을 봅니다.
(1) 군집이 작은 분산 방향에 있으면 어떻게 되는지 구하세요.
(2) 이웃을 지키는 것과 전역 거리를 지키는 것을 비교하세요.
생각의 실마리. 주성분은 분산이 큰 방향을 남깁니다. 그런데 알고 싶은 구조가 분산이 작은 방향에 있으면 어떻게 될지 생각해 봅니다.
풀이. (1) 세 덩어리가 셋째 축에서만 갈라져 있고, 그 축의 분산이 가장 작습니다.
| 성분 | 설명 비율 | 셋째 축의 가중치 |
|---|---|---|
군집을 가르는 축이 셋째 성분에 통째로 들어갔습니다. 설명 비율이 이므로, "앞의 두 개만 남기면 퍼센트가 설명된다"고 판단하면 군집이 사라집니다.
| 무엇을 보는가 | 덩어리 사이 거리 |
|---|---|
| 앞의 두 성분만 남기면 | 표준편차의 배 |
| 원래 셋째 축에서는 | 표준편차의 배 |
갈라짐이 분의 로 줄어 사라집니다.
설명 비율이 높다는 것이 중요한 것을 남겼다는 뜻이 아닙니다. 분산이 큰 것과 관심 있는 것은 다릅니다.
(2) 나선 모양 자료를 두 가지 방법으로 차원에 놓습니다. 하나는 주성분이고, 하나는 나선을 펼친 좌표입니다.
| 무엇을 재는가 | 주성분 차원 | 펼친 좌표 |
|---|---|---|
| 차원 거리 순위와의 상관 | ||
| 차원 이웃 개 보존율 | ||
| 나선을 따라간 이웃 보존율 |
주성분은 차원 거리 순위를 거의 그대로 지킵니다. 입니다.
펼친 좌표는 나선을 따라간 이웃을 완벽히 지키지만 차원 거리 순위를 버립니다. 로 떨어집니다.
셋째 줄에서 주성분이 로 낮은 것은 이웃한 감김끼리를 붙여 놓기 때문입니다. 나선에서 한 바퀴 떨어진 두 점은 공간에서는 가깝지만 나선을 따라가면 멉니다.
둘 다 지킬 수는 없습니다. 무엇을 물을지가 방법을 정합니다.
이 문제에서 배우는 것. 차원축소 그림에서 가까운 두 점이 원래 가깝다는 보장이 없습니다. 그리고 방법마다 지키는 것이 다르므로, 같은 자료의 두 차원축소 그림이 완전히 다르게 보이는 것이 정상입니다. 그래서 차원축소 그림에서 읽을 수 있는 것과 없는 것을 구별해야 합니다. 덩어리가 있다는 것은 대개 믿을 만하고, 덩어리 사이의 거리와 크기는 믿으면 안 됩니다.
바로 확인 4.
확인 4-1. 검산에서 군집을 가르는 축이 몇 번째 성분에 들어갔는지 쓰세요.
답. 셋째 성분이며 설명 비율이 뿐입니다.
확인 4-2. 앞의 두 성분만 남겼을 때 덩어리 사이 거리를 쓰세요.
답. 표준편차의 배로 원래 배에서 사라집니다.
확인 4-3. 주성분과 펼친 좌표가 각각 지키는 것을 쓰세요.
답. 주성분은 전역 거리 순위를, 펼친 좌표는 자료를 따라간 이웃을 지킵니다.
문제. 변수가 많을 때의 탐색을 봅니다.
(1) 무관한 변수 개에서 몇 개가 유의하게 나오는지 구하세요.
(2) 가장 큰 상관이 얼마나 되는지 구하세요.
(3) 대책을 정리하세요.
생각의 실마리. 문제 1에서 짝의 개수가 폭발한다고 했습니다. 그 짝을 전부 보고 눈에 띄는 것을 고르면 무슨 일이 일어날지 생각해 봅니다.
풀이. (1)(2) 표본 개에 완전히 무관한 변수 개를 두고 와의 상관을 봅니다.
| 무엇을 재는가 | 값 |
|---|---|
| 유의하게 나온 변수의 평균 개수 | |
| 이론값 | |
| 가장 큰 상관의 평균 | |
| 가장 큰 상관의 최댓값 |
관계가 하나도 없는데 평균 개가 유의하게 나옵니다. 유의수준 의 정의가 그것이므로 당연한 결과입니다.
가장 큰 상관이 을 넘기도 합니다. 그 변수의 산점도를 그리면 진짜 관계처럼 보입니다. 그림으로 확인해도 소용이 없습니다.
그리고 눈으로 찾는 것도 같은 문제입니다. 산점도 행렬 개를 훑어보고 "이것이 눈에 띈다"고 고르는 것은 번의 검정을 한 뒤 가장 작은 값을 고른 것과 같습니다.
(3) 대책을 정리합니다.
| 나누는 방법 | 무엇을 얻는가 |
|---|---|
| 탐색용과 확인용 분할 | 찾은 것을 다른 자료로 검사합니다 |
| 사전 등록 | 볼 것을 미리 정합니다 |
| 다중비교 보정 | 기준을 변수 수만큼 엄격히 합니다 |
| 교차검증 | 고른 것까지 포함해 검증합니다 |
보정 방법의 기준값입니다.
| 보정 방법 | 개일 때 기준 | 성격 |
|---|---|---|
| 보정 없음 | 가장 느슨 | |
| 본페로니 | 가장 엄격 | |
| 첫 순위 FDR | 뒤로 갈수록 느슨 | |
| 마지막 순위 FDR | 보정 없음과 같음 |
본페로니는 로 모든 변수에 같은 기준을 씁니다. FDR은 순위에 따라 기준을 늘려, 첫 순위는 본페로니와 같고 마지막 순위는 보정이 없습니다.
넷째 줄이 중요합니다. 162강 문제 2에서 본 것처럼, 변수를 고르는 과정 자체가 학습이므로 교차검증 안에서 고르지 않으면 성능이 부풀어 오릅니다.
이 문제에서 배우는 것. 탐색은 가설을 만드는 일이지 확인하는 일이 아닙니다. 그런데 탐색과 확인을 같은 자료로 하면 찾은 것이 진짜인지 알 수 없습니다. 그리고 그림으로 찾은 것도 검정한 것과 다르지 않습니다. 눈이 이미 많은 비교를 했고, 그 횟수를 세지 않았을 뿐입니다. 152강 다중비교가 탐색적 분석에서 가장 크게 나타나는 자리이며, 자료를 나누는 것이 가장 확실한 대책입니다.
바로 확인 5.
확인 5-1. 검산에서 무관한 변수 개 중 유의하게 나온 평균 개수를 쓰세요.
답. 개이며 이론값 와 맞습니다.
확인 5-2. 그림으로 찾은 것이 왜 검정한 것과 같은지 쓰세요.
답. 눈이 이미 많은 비교를 했는데 그 횟수를 세지 않았기 때문입니다.
확인 5-3. 본페로니와 FDR의 기준을 검산 값으로 쓰세요.
답. 본페로니는 모두 이고 FDR은 첫 순위 에서 마지막 순위 까지 늘어납니다.
| 차원의 저주 | 식 | |
|---|---|---|
| 껍질의 몫 | 1-(1-\varepsilon)^ | |
| 거리의 상대 퍼짐 | 표준편차/평균 | |
| 정육면체 대비 공 | 사실상 |
| 다변량 그림 | 잘 보이는 것 | 한계 |
|---|---|---|
| 산점도 행렬 | 모든 두 변수 짝 | 가 크면 못 그립니다 |
| 평행좌표 | 이웃한 축, 집단의 흐름 | 보이는 짝이 |
| 히트맵 | 상관의 덩어리 | 색으로 값을 읽습니다 |
| 차원축소 산점도 | 전체 배치와 군집 | 거리를 믿으면 안 됩니다 |
| 주성분 | 성질 |
|---|---|
| 지키는 것 | 분산 |
| 단위에 | 딸려 갑니다. 표준화가 필요합니다 |
| 군집을 | 분산이 작으면 놓칩니다 |
| 전역 거리를 | 잘 지킵니다 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 고차원에서 이웃을 그대로 씁니다 | 거리가 서로 비슷해집니다 |
| 평행좌표에 변수를 다 넣습니다 | 보이는 짝이 뿐입니다 |
| 표준화 없이 주성분을 냅니다 | 단위 하나로 결과가 뒤집힙니다 |
| 설명 비율만 보고 개수를 정합니다 | 군집이 작은 성분에 있을 수 있습니다 |
| 차원축소 그림의 거리를 읽습니다 | 방법마다 지키는 것이 다릅니다 |
| 탐색과 확인을 같은 자료로 합니다 | 우연히 눈에 띈 것을 걸러낼 수 없습니다 |
| 그림으로 찾은 것은 검정이 아니라고 봅니다 | 눈이 이미 비교를 했습니다 |
문제 6. 차원이 오르면 거리가 어떻게 되는지 검산 값과 함께 쓰세요.
답. 서로 비슷해지며 에서 최대와 최소의 상대 차이가 입니다.
문제 7. 껍질의 몫을 식으로 쓰고 일 때를 계산하세요.
답. 입니다.
문제 8. 검산에서 일 때 정육면체 대비 공의 부피를 쓰세요.
답. 로 사실상 입니다.
문제 9. 변수 개일 때 두 변수 짝과 축 순서의 가짓수를 쓰세요.
답. 개와 가지입니다.
문제 10. 평행좌표에서 보이는 짝의 비율을 식으로 쓰세요.
답. 입니다.
문제 11. 검산에서 앞의 두 주성분의 누적 설명 비율을 쓰세요.
답. 입니다.
문제 12. 검산에서 한 변수만 배 했을 때의 변화를 쓰세요.
답. 첫 성분 설명 비율이 이 되고 주도 변수가 번으로 바뀝니다.
문제 13. 표준화가 왜 필요한지 쓰세요.
답. 주성분이 분산을 지키므로 단위가 큰 변수가 결과를 지배하기 때문입니다.
문제 14. 남길 성분 개수의 세 기준과 이 자료에서의 답을 쓰세요.
답. 고윳값 기준 개, 누적 퍼센트 개, 스크리 팔꿈치 개입니다.
문제 15. 검산에서 군집을 가르는 축의 설명 비율을 쓰세요.
답. 로 셋째 성분입니다.
문제 16. 검산에서 주성분과 펼친 좌표의 나선 이웃 보존율을 쓰세요.
답. 과 입니다.
문제 17. 검산에서 무관한 변수 개 중 유의하게 나온 평균 개수를 쓰세요.
답. 개입니다.
문제 18. 본페로니 기준을 개일 때 계산하세요.
답. 입니다.
심화 1. 주성분과 특잇값 분해의 관계를 정리하세요.
89강에서 본 것을 다시 씁니다. 중심을 맞춘 자료행렬 를 분해합니다.
| 대응 | 내용 |
|---|---|
| 의 열 | 주성분 방향입니다 |
| 번째 고윳값입니다 | |
| 의 열 | 주성분 점수입니다 |
공분산행렬을 만들지 않고 계산합니다. 가 아주 크면 행렬을 만드는 것 자체가 무겁고, 수치적으로도 특잇값 분해가 안정합니다. 공분산을 만들면 조건수가 제곱이 되기 때문입니다.
앞의 개만 남기는 것이 최선의 근사입니다.
이 최소값을 주는 가 앞의 개 특잇값만 남긴 것이며, 에카르트-영 정리입니다. 주성분이 "가장 좋은 저차원 근사"라는 말의 정확한 뜻이 이것입니다.
다만 프로베니우스 노름에서 최선입니다. 다른 것을 지키고 싶으면 다른 방법이 나옵니다. 문제 4에서 본 이웃 보존이 그 예입니다.
심화 2. 이웃을 지키는 차원축소를 정리하세요.
문제 4에서 이웃과 전역 거리를 둘 다 지킬 수 없다고 했습니다. 이웃 쪽을 택하는 방법들이 있습니다.
| 방법 | 지키려는 것 |
|---|---|
| 다차원 척도법 | 모든 쌍의 거리 |
| Isomap | 자료를 따라간 거리 |
| t-SNE | 가까운 이웃의 확률 |
| UMAP | 이웃 그래프의 구조 |
둘째 줄이 문제 4의 나선을 푸는 방법입니다. 이웃 그래프를 만들고 그 위의 최단경로로 거리를 재면 나선을 따라간 거리가 나옵니다.
셋째와 넷째 줄에는 함정이 있습니다.
| 읽어도 되는 것 | 읽으면 안 되는 것 |
|---|---|
| 덩어리가 있다는 것 | 덩어리의 크기 |
| 어떤 점이 어느 덩어리인지 | 덩어리 사이의 거리 |
| 대략의 이웃 관계 | 빈 공간의 뜻 |
설정값에 따라 그림이 크게 달라집니다. t-SNE의 혼란도를 바꾸면 덩어리의 개수까지 달라 보이며, 무작위 씨앗에 따라서도 배치가 바뀝니다.
그래서 여러 설정으로 그려 보고 공통으로 나타나는 것만 믿습니다. 162강 심화 5의 민감도 분석이 여기서도 필요합니다.
심화 3. 상관행렬을 그림으로 보는 법을 정리하세요.
문제 2에서 히트맵을 목록에 넣었습니다. 제대로 쓰는 법이 있습니다.
| 요소 | 규칙 |
|---|---|
| 색표 | 발산 색표를 쓰고 을 흰색으로 둡니다 |
| 범위 | 부터 로 고정합니다 |
| 순서 | 비슷한 변수끼리 모읍니다 |
| 값 | 칸이 적으면 숫자를 함께 적습니다 |
셋째 줄이 그림의 값어치를 정합니다. 변수를 알파벳 순으로 두면 아무 구조도 안 보이는데, 군집 순으로 다시 배열하면 덩어리가 대각선에 나타납니다.
순서를 정하는 것 자체가 분석입니다. 상관의 절댓값을 유사도로 보고 계층 군집을 돌린 뒤 그 순서를 쓰는 것이 표준적입니다.
168강 문제 4의 문제가 그대로 있습니다. 색으로 값을 읽으므로 정확도가 낮고, 과 을 구별할 수 없습니다. 그래서 히트맵은 구조를 찾는 데 쓰고 값을 읽는 데는 쓰지 않습니다.
심화 4. 군집을 그림으로 확인하는 법을 정리하세요.
차원축소 그림에서 덩어리가 보였다고 군집이 있는 것은 아닙니다.
| 확인 방법 | 내용 |
|---|---|
| 실루엣 | 자기 군집과 이웃 군집까지의 거리를 견줍니다 |
| 간격 통계량 | 무작위 자료에서의 값과 견줍니다 |
| 안정성 | 표본을 다시 뽑아 같은 군집이 나오는지 봅니다 |
둘째 줄이 중요합니다. 균등하게 흩어진 자료에도 군집 알고리즘은 언제나 군집을 내놓습니다. 그래서 군집이 없는 자료에서의 값과 견줘야 합니다.
셋째 줄이 가장 실용적입니다. 자료의 절반씩을 두 번 뽑아 각각 군집을 만들고 얼마나 일치하는지 봅니다. 문제 5의 탐색과 확인을 나누는 발상이 군집에 적용된 것입니다.
그리고 문제 1이 여기서도 걸립니다. 고차원에서 거리가 서로 비슷해지므로 거리 기반 군집이 무너집니다. 그래서 차원을 먼저 줄이는데, 문제 4에서 본 대로 줄이는 과정이 군집을 지운다는 위험이 있습니다.
심화 5. 결측이 있는 자료의 다변량 탐색을 정리하세요.
161강 문제 2에서 변수 개에 각 퍼센트 결측이면 완전한 행이 퍼센트라고 했습니다. 다변량 탐색에서 이것이 바로 걸립니다.
| 방법 | 문제 |
|---|---|
| 완전 제거 | 표본이 거의 남지 않습니다 |
| 쌍별 제거 | 상관행렬이 모순될 수 있습니다 |
| 대치 뒤 주성분 | 대치가 만든 구조가 성분에 들어갑니다 |
셋째 줄이 조용한 문제입니다. 평균으로 채우면 채운 점들이 한 자리에 모여 가짜 덩어리를 만들고, 회귀로 채우면 채운 점들이 직선 위에 놓여 가짜 방향을 만듭니다. 161강 문제 3에서 본 왜곡이 차원축소 그림에 그대로 나타납니다.
결측을 명시적으로 다루는 방법도 있습니다. 관측된 칸만 써서 주성분을 맞추는 것인데, 결측 패턴 자체가 구조를 가지면 그것까지 학습합니다.
그래서 결측 지표를 함께 그려 보는 것이 좋습니다. 차원축소 그림에서 결측이 많은 점들만 한쪽에 모여 있으면, 그 덩어리는 자료의 구조가 아니라 결측의 구조입니다.
심화 6. 이 강의가 어디에 쓰이는지 정리하세요.
| 분야 | 쓰임 | 이어지는 강의 |
|---|---|---|
| 진단 | 잘못된 그래프 가려내기 | 172강 |
| 조사 설계 | 여러 문항의 구조를 봅니다 | 176강 |
| 특징 만들기 | 주성분을 설명변수로 씁니다 | S8 |
| 표현 학습 | 임베딩을 차원축소로 봅니다 | S10 |
넷째 줄이 가장 멀리 갑니다. 신경망이 만든 임베딩을 차원에 그려 보는 것이 흔한데, 문제 4의 경고가 전부 그대로 적용됩니다. 덩어리가 보인다는 것까지는 말할 수 있고, 덩어리 사이 거리는 말할 수 없습니다.
셋째 줄에는 함정이 하나 더 있습니다. 주성분을 설명변수로 쓸 때 와의 관계는 전혀 보지 않고 고른 것이므로, 분산이 큰 성분이 예측에 쓸모없을 수 있습니다. 문제 4의 군집 이야기와 같은 구조이며, 를 보고 고르려면 162강 문제 2의 누출을 조심해야 합니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 차원의 저주 | curse of dimensionality | 차원이 오르면 자료가 성겨집니다 |
| 거리 집중 | distance concentration | 모든 거리가 서로 비슷해집니다 |
| 평행좌표 | parallel coordinates | 축을 나란히 세우고 꺾은선으로 잇습니다 |
| 주성분분석 | PCA | 분산이 큰 방향부터 남깁니다 |
| 설명 비율 | explained variance ratio | 고윳값을 합으로 나눈 값입니다 |
| 스크리 | scree plot | 고윳값을 순서대로 그린 그림입니다 |
| 특잇값 분해 | SVD | 입니다 |
| 에카르트-영 정리 | Eckart-Young | 저계수 최선 근사가 앞의 특잇값입니다 |
| 다차원 척도법 | MDS | 모든 쌍의 거리를 지키려 합니다 |
| Isomap | 아이소맵 | 자료를 따라간 거리를 씁니다 |
| t-SNE | 티스니 | 가까운 이웃의 확률을 지킵니다 |
| UMAP | 유맵 | 이웃 그래프의 구조를 지킵니다 |
| 실루엣 | silhouette | 군집의 뚜렷함을 잽니다 |
| 본페로니 | Bonferroni | 기준을 비교 수로 나눕니다 |
| FDR | 거짓 발견율 | 순위에 따라 기준을 늘립니다 |
다음은 172강 잘못된 그래프 진단하기입니다. 여기까지가 그림을 만드는 법이었고, 다음은 그림을 의심하는 법입니다.
168강 심화 6에서 예고한 그대로입니다. 이 단원에서 세운 규칙 하나하나가 어기는 방법의 목록이기도 합니다. 축을 자르고, 반지름을 값에 비례시키고, 무지개 색표를 쓰고, 좁은 대역폭으로 선을 얹고, 좁은 범위의 로그로그 직선을 보이는 것이 전부 여기서 계산한 값만큼 왜곡합니다.
그리고 이 강의의 문제 5가 가장 어려운 진단으로 이어집니다. 그림 자체는 아무것도 조작하지 않았는데 여러 개 중에서 가장 눈에 띄는 하나를 고른 것이라면, 그림만 봐서는 알 수 없습니다. 보여 주지 않은 그림이 몇 장인지를 물어야 합니다.
import math
import numpy as np
rng = np.random.default_rng(20260908)
def pw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return str(s) + " " * max(k, 0)
def rw(s, n):
k = n - sum(2 if ord(c) > 0x2FFF else 1 for c in str(s))
return " " * max(k, 0) + str(s)
# --- 문제 1: 변수가 많아지면 무엇이 깨지는가 ----------------------------
print(" 차원이 오르면 거리가 서로 비슷해집니다")
print(" %s %s %s %s %s" % (pw("차원 d", 8), rw("가장 가까운 거리", 18),
rw("가장 먼 거리", 16), rw("(먼-가까운)/가까운", 20),
rw("표준편차/평균", 16)))
for d in [1, 2, 5, 20, 100, 500]:
q = rng.normal(0, 1, (2000, d))
p0 = rng.normal(0, 1, d)
dist = np.sqrt(((q - p0) ** 2).sum(axis=1))
print(" %s %18.4f %16.4f %20.6f %16.6f"
% (pw(str(d), 8), float(dist.min()), float(dist.max()),
float((dist.max() - dist.min()) / dist.min()),
float(dist.std() / dist.mean())))
print(" d = 500 이면 가장 가까운 점과 가장 먼 점의 차이가 20 퍼센트도 안 됩니다")
print(" 가깝다는 말이 뜻을 잃으므로 이웃을 쓰는 방법이 모두 흔들립니다")
print(" 부피가 껍질로 몰립니다. 반지름 1 인 공에서 바깥 5 퍼센트가 차지하는 몫입니다")
print(" %s %s %s" % (pw("차원 d", 8), rw("바깥 5 퍼센트 껍질의 몫", 26),
rw("정육면체 대비 공의 부피", 26)))
for d in [1, 2, 5, 20, 100]:
shell = 1 - 0.95 ** d
vb = math.pi ** (d / 2) / math.gamma(d / 2 + 1) / (2.0 ** d)
print(" %s %26.6f %26.10f" % (pw(str(d), 8), shell, vb))
print(" d = 100 이면 부피의 99.4 퍼센트가 바깥 5 퍼센트 껍질에 있습니다")
print(" 정육면체 안에 든 공의 부피는 사실상 0 이라 모서리가 공간의 거의 전부입니다")
print(" 볼 것도 폭발합니다")
print(" %s %s %s %s" % (pw("변수 p", 8), rw("두 변수 짝", 12),
rw("세 변수 짝", 14), rw("평행좌표 축 순서", 22)))
for p in [3, 5, 10, 20]:
print(" %s %12d %14d %22s"
% (pw(str(p), 8), p * (p - 1) // 2, p * (p - 1) * (p - 2) // 6,
rw("%.3e" % (math.factorial(p) / 2), 22)))
print(" p = 20 이면 두 변수 짝만 190 개이고 세 변수 짝은 1140 개입니다")
print(" 170강 심화 4 에서 본 산점도 행렬의 한계가 여기서 나옵니다")
# --- 문제 2: 여러 변수를 한 판에 그리는 법 ------------------------------
print(" 평행좌표는 축을 나란히 세우고 한 관측을 꺾은선으로 잇습니다")
print(" 이웃한 축끼리만 관계가 보입니다. 떨어진 축은 선이 가려집니다")
print(" %s %s %s %s" % (pw("변수 p", 8), rw("전체 짝", 12), rw("이웃한 짝", 12),
rw("보이는 비율", 14)))
for p in [3, 5, 10, 20]:
tot = p * (p - 1) // 2
print(" %s %12d %12d %14.6f" % (pw(str(p), 8), tot, p - 1, (p - 1) / tot))
print(" p = 20 이면 190 개 짝 중 19 개만 이웃이라 0.1 만 보입니다")
print(" 축 순서를 바꾸면 다른 짝이 보입니다. 순서가 곧 무엇을 볼지 정합니다")
print(" 선이 겹치는 정도도 계산됩니다")
n2 = 20000
p2 = 8
Z = rng.normal(0, 1, (n2, p2))
print(" 관측 %d 개를 축 %d 개에 그리면 선분이 %d 개입니다"
% (n2, p2, n2 * (p2 - 1)))
print(" %s %s %s" % (pw("한 축의 눈금 칸", 16), rw("칸당 평균 선", 16),
rw("빈 칸 비율", 14)))
for k in [20, 100, 500]:
r = np.clip(((Z[:, 0] - Z[:, 0].min())
/ (Z[:, 0].max() - Z[:, 0].min()) * k).astype(int), 0, k - 1)
c = np.bincount(r, minlength=k)
print(" %s %16.2f %14.6f" % (pw(str(k), 16), n2 / k, float((c == 0).mean())))
print(" 168강 문제 5 의 겹침이 선에서는 더 심합니다. 선은 점보다 훨씬 넓게 덮습니다")
print(" 다변량 그림을 고르는 기준입니다")
print(" %s %s" % (pw("그림", 18), rw("무엇을 잘 보이는가", 30)))
for a, b in [("산점도 행렬", "모든 두 변수 짝, p 가 작을 때만"),
("평행좌표", "이웃한 축의 관계와 집단의 흐름"),
("히트맵", "상관행렬의 덩어리 구조"),
("차원축소 산점도", "전체 배치와 군집"),
("작은 배수", "한 변수를 조건으로 나눈 관계")]:
print(" %s %s" % (pw(a, 18), rw(b, 30)))
# --- 문제 3: 주성분은 무엇을 보존하는가 ---------------------------------
print(" 주성분은 분산이 가장 큰 방향을 차례로 찾습니다")
n3 = 40000
L = np.array([[3.0, 0.0, 0.0], [2.4, 1.2, 0.0], [1.5, 0.6, 0.4]])
W = rng.normal(0, 1, (n3, 3)) @ L.T
X3 = np.concatenate([W, 0.3 * rng.normal(0, 1, (n3, 3))], axis=1)
Xc = X3 - X3.mean(axis=0)
ev = np.linalg.eigvalsh(np.cov(Xc.T))[::-1]
print(" 변수 6 개이고 앞의 3 개만 서로 얽혀 있습니다")
print(" %s %s %s %s" % (pw("성분", 8), rw("고윳값", 12), rw("설명 비율", 12),
rw("누적", 12)))
for i, v in enumerate(ev):
print(" %s %12.4f %12.6f %12.6f"
% (pw(str(i + 1), 8), v, v / ev.sum(), ev[:i + 1].sum() / ev.sum()))
print(" 앞의 두 성분이 %.4f 를 설명합니다. 6 차원을 2 차원으로 줄일 수 있습니다"
% (ev[:2].sum() / ev.sum()))
print(" 그런데 단위를 바꾸면 결과가 통째로 바뀝니다")
X4 = X3.copy()
X4[:, 5] = X4[:, 5] * 1000.0
for nm, M in [("원자료", X3), ("한 변수만 1000 배", X4)]:
C = np.cov((M - M.mean(axis=0)).T)
e = np.linalg.eigvalsh(C)[::-1]
vec = np.linalg.eigh(C)[1][:, -1]
print(" %s %s %s" % (pw(nm, 20), rw("첫 성분 설명 비율 %.6f" % (e[0] / e.sum()), 28),
rw("가장 큰 가중치를 받은 변수 %d" % (int(np.argmax(np.abs(vec))) + 1), 32)))
Xs = (X3 - X3.mean(axis=0)) / X3.std(axis=0)
Xs4 = (X4 - X4.mean(axis=0)) / X4.std(axis=0)
for nm, M in [("원자료를 표준화", Xs), ("1000 배 뒤 표준화", Xs4)]:
C = np.cov(M.T)
e = np.linalg.eigvalsh(C)[::-1]
print(" %s %s" % (pw(nm, 20), rw("첫 성분 설명 비율 %.6f" % (e[0] / e.sum()), 28)))
print(" 표준화하면 단위를 바꿔도 같은 답이 나옵니다. 89강에서 본 그대로입니다")
print(" 단위가 다른 변수를 섞을 때는 표준화가 사실상 필수입니다")
print(" 몇 개를 남길지 정하는 기준이 몇 가지 있습니다")
print(" %s %s %s" % (pw("기준", 22), rw("이 자료에서 남기는 수", 24), rw("근거", 16)))
Cs = np.cov(Xs.T)
es = np.linalg.eigvalsh(Cs)[::-1]
k1 = int((es > 1.0).sum())
cum = np.cumsum(es) / es.sum()
k2 = int(np.searchsorted(cum, 0.90) + 1)
k3 = int(np.argmax(-np.diff(es)) + 1)
print(" %s %24d %s" % (pw("고윳값이 1 보다 큼", 22), k1, rw("표준화한 경우", 16)))
print(" %s %24d %s" % (pw("누적 90 퍼센트", 22), k2, rw("설명 비율", 16)))
print(" %s %24d %s" % (pw("스크리의 팔꿈치", 22), k3, rw("고윳값 차이", 16)))
print(" 기준마다 답이 다릅니다. 목적이 정해지지 않으면 개수도 정해지지 않습니다")
# --- 문제 4: 차원축소가 무엇을 왜곡하는가 -------------------------------
print(" 주성분은 분산이 큰 방향을 찾지 자료의 덩어리를 찾지 않습니다")
n4 = 3000
lab = rng.integers(0, 3, n4)
big = rng.normal(0, 6.0, (n4, 2))
sep = np.zeros((n4, 1))
sep[:, 0] = lab * 2.0 + rng.normal(0, 0.25, n4)
X5 = np.concatenate([big, sep], axis=1)
Cc = np.cov((X5 - X5.mean(axis=0)).T)
e5, V5 = np.linalg.eigh(Cc)
order = np.argsort(e5)[::-1]
e5, V5 = e5[order], V5[:, order]
print(" 세 덩어리가 셋째 축에서만 갈라져 있고 그 축의 분산이 가장 작습니다")
print(" %s %s %s" % (pw("성분", 10), rw("설명 비율", 12), rw("셋째 축의 가중치", 18)))
for i in range(3):
print(" %s %12.6f %18.6f"
% (pw(str(i + 1), 10), e5[i] / e5.sum(), abs(float(V5[2, i]))))
P2 = (X5 - X5.mean(axis=0)) @ V5[:, :2]
sep2 = float(abs(P2[lab == 0].mean(0)[0] - P2[lab == 2].mean(0)[0])
/ P2[:, 0].std())
sep3 = float(abs(X5[lab == 0, 2].mean() - X5[lab == 2, 2].mean()) / X5[:, 2].std())
print(" 앞의 두 성분만 남기면 덩어리 사이 거리가 표준편차의 %.4f 배입니다" % sep2)
print(" 원래 셋째 축에서는 %.4f 배였습니다. 갈라짐이 사라집니다" % sep3)
print(" 국소 이웃을 지키는 방법은 반대로 전역 거리를 버립니다")
n6 = 1200
th = rng.uniform(0, 4 * np.pi, n6)
S = np.stack([th * np.cos(th), th * np.sin(th), rng.uniform(-1, 1, n6)], axis=1)
D0 = np.sqrt(((S[:, None, :] - S[None, :, :]) ** 2).sum(axis=2))
Cs2 = np.cov((S - S.mean(0)).T)
e6, V6 = np.linalg.eigh(Cs2)
Q = (S - S.mean(0)) @ V6[:, np.argsort(e6)[::-1][:2]]
D1 = np.sqrt(((Q[:, None, :] - Q[None, :, :]) ** 2).sum(axis=2))
iu = np.triu_indices(n6, 1)
print(" %s %s %s" % (pw("무엇을 재는가", 26), rw("주성분 2 차원", 16), rw("펼친 좌표", 14)))
U = np.stack([th, S[:, 2]], axis=1)
D2 = np.sqrt(((U[:, None, :] - U[None, :, :]) ** 2).sum(axis=2))
def keep(Dref, Dl, k=10):
a = np.argsort(Dref, axis=1)[:, 1:k + 1]
b = np.argsort(Dl, axis=1)[:, 1:k + 1]
return float(np.mean([len(set(a[i]) & set(b[i])) / k for i in range(len(a))]))
print(" %s %16.6f %14.6f"
% (pw("3 차원 거리 순위와의 상관", 26),
float(np.corrcoef(np.argsort(np.argsort(D0[iu])),
np.argsort(np.argsort(D1[iu])))[0, 1]),
float(np.corrcoef(np.argsort(np.argsort(D0[iu])),
np.argsort(np.argsort(D2[iu])))[0, 1])))
print(" %s %16.6f %14.6f"
% (pw("3 차원 이웃 10 개 보존율", 26), keep(D0, D1), keep(D0, D2)))
print(" %s %16.6f %14.6f"
% (pw("나선을 따라간 이웃 보존율", 26), keep(D2, D1), keep(D2, D2)))
print(" 주성분은 3 차원 거리 순위를 거의 그대로 지킵니다")
print(" 펼친 좌표는 나선을 따라간 이웃을 완벽히 지키지만 3 차원 거리 순위를 버립니다")
print(" 셋째 줄에서 주성분이 낮은 것은 이웃한 감김끼리를 붙여 놓기 때문입니다")
print(" 둘 다 지킬 수는 없습니다. 무엇을 물을지가 방법을 정합니다")
# --- 문제 5: 탐색하면서 생기는 문제 -------------------------------------
print(" 변수가 많으면 우연히 눈에 띄는 것이 반드시 생깁니다")
n5, P5, M5 = 200, 500, 400
print(" 표본 %d 개에 무관한 변수 %d 개를 두고 y 와의 상관을 봅니다" % (n5, P5))
cnt = np.empty(M5)
mx = np.empty(M5)
for t in range(M5):
Xr = rng.normal(0, 1, (n5, P5))
yr = rng.normal(0, 1, n5)
Xr = (Xr - Xr.mean(0)) / Xr.std(0)
yz = (yr - yr.mean()) / yr.std()
r = (Xr * yz[:, None]).mean(0)
tstat = r * np.sqrt((n5 - 2) / np.maximum(1 - r * r, 1e-12))
cnt[t] = float((np.abs(tstat) > 1.9720).sum())
mx[t] = float(np.abs(r).max())
print(" %s %s" % (pw("무엇을 재는가", 30), rw("값", 14)))
print(" %s %14.4f" % (pw("유의하게 나온 변수의 평균 개수", 30), float(cnt.mean())))
print(" %s %14.4f" % (pw("이론값 0.05 x 500", 30), 0.05 * P5))
print(" %s %14.6f" % (pw("가장 큰 상관의 평균", 30), float(mx.mean())))
print(" %s %14.6f" % (pw("가장 큰 상관의 최댓값", 30), float(mx.max())))
print(" 관계가 하나도 없는데 평균 25 개가 유의하게 나옵니다")
print(" 가장 큰 상관은 0.3 을 넘기도 합니다. 그림으로 보면 진짜처럼 보입니다")
print(" 탐색은 가설을 만드는 일이지 확인하는 일이 아닙니다")
print(" %s %s" % (pw("나누는 방법", 20), rw("무엇을 얻는가", 30)))
for a, b in [("탐색용과 확인용 분할", "찾은 것을 다른 자료로 검사합니다"),
("사전 등록", "볼 것을 미리 정합니다"),
("다중비교 보정", "기준을 변수 수만큼 엄격히 합니다"),
("교차검증", "고른 것까지 포함해 검증합니다")]:
print(" %s %s" % (pw(a, 20), rw(b, 30)))
print(" %s %s %s" % (pw("보정 방법", 16), rw("500 개일 때 기준", 20), rw("성격", 14)))
print(" %s %20.8f %s" % (pw("보정 없음", 16), 0.05, rw("가장 느슨", 14)))
print(" %s %20.8f %s" % (pw("본페로니", 16), 0.05 / P5, rw("가장 엄격", 14)))
print(" %s %20.8f %s" % (pw("첫 순위 FDR", 16), 0.05 / P5, rw("뒤로 갈수록 느슨", 14)))
print(" %s %20.8f %s" % (pw("마지막 순위 FDR", 16), 0.05, rw("보정 없음과 같음", 14)))
print(" 152강 다중비교가 탐색적 분석에서 가장 크게 나타납니다")
print(" 그림으로 찾은 것도 검정한 것과 같습니다. 눈이 이미 많은 비교를 했습니다")
# 차원이 오르면 거리가 서로 비슷해집니다
# 차원 d 가장 가까운 거리 가장 먼 거리 (먼-가까운)/가까운 표준편차/평균
# 1 0.0004 3.6620 9154.518955 0.774697
# 2 0.0750 5.7096 75.111502 0.430656
# 5 0.7797 6.4432 7.263739 0.280867
# 20 3.4831 8.9587 1.572085 0.144122
# 100 11.1610 16.6828 0.494741 0.062379
# 500 28.9012 34.2374 0.184638 0.027475
# d = 500 이면 가장 가까운 점과 가장 먼 점의 차이가 20 퍼센트도 안 됩니다
# 가깝다는 말이 뜻을 잃으므로 이웃을 쓰는 방법이 모두 흔들립니다
# 부피가 껍질로 몰립니다. 반지름 1 인 공에서 바깥 5 퍼센트가 차지하는 몫입니다
# 차원 d 바깥 5 퍼센트 껍질의 몫 정육면체 대비 공의 부피
# 1 0.050000 1.0000000000
# 2 0.097500 0.7853981634
# 5 0.226219 0.1644934067
# 20 0.641514 0.0000000246
# 100 0.994079 0.0000000000
# d = 100 이면 부피의 99.4 퍼센트가 바깥 5 퍼센트 껍질에 있습니다
# 정육면체 안에 든 공의 부피는 사실상 0 이라 모서리가 공간의 거의 전부입니다
# 볼 것도 폭발합니다
# 변수 p 두 변수 짝 세 변수 짝 평행좌표 축 순서
# 3 3 1 3.000e+00
# 5 10 10 6.000e+01
# 10 45 120 1.814e+06
# 20 190 1140 1.216e+18
# p = 20 이면 두 변수 짝만 190 개이고 세 변수 짝은 1140 개입니다
# 170강 심화 4 에서 본 산점도 행렬의 한계가 여기서 나옵니다
# 평행좌표는 축을 나란히 세우고 한 관측을 꺾은선으로 잇습니다
# 이웃한 축끼리만 관계가 보입니다. 떨어진 축은 선이 가려집니다
# 변수 p 전체 짝 이웃한 짝 보이는 비율
# 3 3 2 0.666667
# 5 10 4 0.400000
# 10 45 9 0.200000
# 20 190 19 0.100000
# p = 20 이면 190 개 짝 중 19 개만 이웃이라 0.1 만 보입니다
# 축 순서를 바꾸면 다른 짝이 보입니다. 순서가 곧 무엇을 볼지 정합니다
# 선이 겹치는 정도도 계산됩니다
# 관측 20000 개를 축 8 개에 그리면 선분이 140000 개입니다
# 한 축의 눈금 칸 칸당 평균 선 빈 칸 비율
# 20 1000.00 0.000000
# 100 200.00 0.030000
# 500 40.00 0.124000
# 168강 문제 5 의 겹침이 선에서는 더 심합니다. 선은 점보다 훨씬 넓게 덮습니다
# 다변량 그림을 고르는 기준입니다
# 그림 무엇을 잘 보이는가
# 산점도 행렬 모든 두 변수 짝, p 가 작을 때만
# 평행좌표 이웃한 축의 관계와 집단의 흐름
# 히트맵 상관행렬의 덩어리 구조
# 차원축소 산점도 전체 배치와 군집
# 작은 배수 한 변수를 조건으로 나눈 관계
# 주성분은 분산이 가장 큰 방향을 차례로 찾습니다
# 변수 6 개이고 앞의 3 개만 서로 얽혀 있습니다
# 성분 고윳값 설명 비율 누적
# 1 17.9479 0.931656 0.931656
# 2 0.9220 0.047858 0.979514
# 3 0.1243 0.006450 0.985964
# 4 0.0909 0.004717 0.990681
# 5 0.0903 0.004689 0.995370
# 6 0.0892 0.004630 1.000000
# 앞의 두 성분이 0.9795 를 설명합니다. 6 차원을 2 차원으로 줄일 수 있습니다
# 그런데 단위를 바꾸면 결과가 통째로 바뀝니다
# 원자료 첫 성분 설명 비율 0.931656 가장 큰 가중치를 받은 변수 1
# 한 변수만 1000 배 첫 성분 설명 비율 0.999789 가장 큰 가중치를 받은 변수 6
# 원자료를 표준화 첫 성분 설명 비율 0.473910
# 1000 배 뒤 표준화 첫 성분 설명 비율 0.473910
# 표준화하면 단위를 바꿔도 같은 답이 나옵니다. 89강에서 본 그대로입니다
# 단위가 다른 변수를 섞을 때는 표준화가 사실상 필수입니다
# 몇 개를 남길지 정하는 기준이 몇 가지 있습니다
# 기준 이 자료에서 남기는 수 근거
# 고윳값이 1 보다 큼 2 표준화한 경우
# 누적 90 퍼센트 4 설명 비율
# 스크리의 팔꿈치 1 고윳값 차이
# 기준마다 답이 다릅니다. 목적이 정해지지 않으면 개수도 정해지지 않습니다
# 주성분은 분산이 큰 방향을 찾지 자료의 덩어리를 찾지 않습니다
# 세 덩어리가 셋째 축에서만 갈라져 있고 그 축의 분산이 가장 작습니다
# 성분 설명 비율 셋째 축의 가중치
# 1 0.487961 0.004848
# 2 0.476255 0.000965
# 3 0.035784 0.999988
# 앞의 두 성분만 남기면 덩어리 사이 거리가 표준편차의 0.0555 배입니다
# 원래 셋째 축에서는 2.4338 배였습니다. 갈라짐이 사라집니다
# 국소 이웃을 지키는 방법은 반대로 전역 거리를 버립니다
# 무엇을 재는가 주성분 2 차원 펼친 좌표
# 3 차원 거리 순위와의 상관 0.999802 0.397659
# 3 차원 이웃 10 개 보존율 0.530833 0.564833
# 나선을 따라간 이웃 보존율 0.249750 1.000000
# 주성분은 3 차원 거리 순위를 거의 그대로 지킵니다
# 펼친 좌표는 나선을 따라간 이웃을 완벽히 지키지만 3 차원 거리 순위를 버립니다
# 셋째 줄에서 주성분이 낮은 것은 이웃한 감김끼리를 붙여 놓기 때문입니다
# 둘 다 지킬 수는 없습니다. 무엇을 물을지가 방법을 정합니다
# 변수가 많으면 우연히 눈에 띄는 것이 반드시 생깁니다
# 표본 200 개에 무관한 변수 500 개를 두고 y 와의 상관을 봅니다
# 무엇을 재는가 값
# 유의하게 나온 변수의 평균 개수 25.3275
# 이론값 0.05 x 500 25.0000
# 가장 큰 상관의 평균 0.227330
# 가장 큰 상관의 최댓값 0.299084
# 관계가 하나도 없는데 평균 25 개가 유의하게 나옵니다
# 가장 큰 상관은 0.3 을 넘기도 합니다. 그림으로 보면 진짜처럼 보입니다
# 탐색은 가설을 만드는 일이지 확인하는 일이 아닙니다
# 나누는 방법 무엇을 얻는가
# 탐색용과 확인용 분할 찾은 것을 다른 자료로 검사합니다
# 사전 등록 볼 것을 미리 정합니다
# 다중비교 보정 기준을 변수 수만큼 엄격히 합니다
# 교차검증 고른 것까지 포함해 검증합니다
# 보정 방법 500 개일 때 기준 성격
# 보정 없음 0.05000000 가장 느슨
# 본페로니 0.00010000 가장 엄격
# 첫 순위 FDR 0.00010000 뒤로 갈수록 느슨
# 마지막 순위 FDR 0.05000000 보정 없음과 같음
# 152강 다중비교가 탐색적 분석에서 가장 크게 나타납니다
# 그림으로 찾은 것도 검정한 것과 같습니다. 눈이 이미 많은 비교를 했습니다