주성분 분석과 저랭크 근사

자주 하는 실수와 요약

자주 하는 실수

실수 나온 문제 바로잡는 법
점들이 대각선으로 서 있으면 가장 가까운 직선이 45°라고 봄 1 공분산 행렬의 고유벡터를 구한다. 멀리 선 점이 직선을 끌어당긴다
고윳값이 같은 자료에서 가장 가까운 직선이 없다고 봄 2 모든 방향이 똑같이 좋아 답이 하나로 정해지지 않는 것이다
평균을 빼지 않고 직선이나 축을 구함 2 평균을 지나는 직선이 가장 가깝다. 비키면 비킨 거리의 제곱만큼 오차가 는다
축 방향으로 같은 거리면 같은 만큼 드문 점이라고 봄 3 그 방향의 표준편차로 나눠 잰다(화이트닝)
랭크 1 근사는 바뀐 칸만 틀리게 두는 것이라고 봄 4 에커트–영: 오차는 버린 특잇값의 제곱합. 차이를 여러 칸에 나눠 진다
그림 수만큼의 작은 행렬로는 그림 공간의 축을 못 얻는다고 봄 5 AᵀAv = λv 이면 Av 가 AAᵀ 의 고유벡터다
랭크 r 행렬의 숫자를 B, A 칸 수 그대로 셈 6, 11 바꿔치기 G 만큼 r² 을 뺀다. 자유도 r(m + n − r)
덮는 범위가 넓은 목록일수록 좋다고 봄 7 목록을 적는 비트와 목록 안의 번호 비트를 함께 센다
두 부분 코드가 진짜 축을 놓치면 기준이 틀렸다고 봄 8 점이 적으면 그 축을 믿을 근거가 모자란 것이다. 이득은 n 배, 값은 log n 배로 큰다
「분산 95%」로 축 수를 정함 9 노이즈 칸이 늘면 노이즈 축까지 데려온다. 축 하나하나가 제값을 치르는지 본다
영화 평균이나 사람 평균으로 빈칸을 채움 10 낮은 랭크를 쓰면 영화와 사람을 함께 본다
정할 숫자보다 칸이 많으면 언제나 채울 수 있다고 봄 11 사람마다, 영화마다 적어도 r 칸은 보여야 한다
보이는 칸의 오차로 랭크를 고름 12 축이 많으면 노이즈까지 외운다. 떼어 둔 칸이나 코드 길이로 고른다

요약

이 장에서 한 일을 정리해 보자. 평균을 지나는 직선에 대해 (평균까지 거리)² = (그림자의 자리)² + (직선까지 거리)²이므로, 그림자의 분산과 직선까지 거리 제곱의 평균은 합이 늘 같다. 그래서 점에 가장 가까운 직선(피어슨, 1901)과 가장 넓게 퍼진 방향(호텔링, 1933)은 같은 직선이고, 그 방향은 공분산 행렬의 고유벡터, 곧 주성분이다. 점 200개의 공분산 (3.4, 1.2; 1.2, 1.6)에서는 고윳값 4와 1, 방향 26.57°가 손으로 나왔다.

축 k개짜리 면도 한꺼번에 구할 수 있다. 점을 열로 늘어놓은 자료 행렬에서 평균을 빼고 특잇값 분해를 하면, 왼쪽 축이 주성분이고 특잇값의 제곱을 점 수로 나눈 값이 고윳값이다. 에커트–영 정리(1936)는 큰 특잇값 k개만 남긴 행렬이 랭크 k 행렬 가운데 가장 가깝고, 남는 오차가 버린 특잇값의 제곱합이라고 말한다. 인물 그림 64장에서 학습 그림의 오차는 축 5개에서 0.467, 63개에서 0이 되었지만, 처음 보는 그림의 오차는 0.49 근처에서 멈췄다. 남길 축의 수는 두 부분 코드로 고를 수 있다. 축 하나를 적는 값 d · ½ log₂ n을 그 축이 좌표에서 줄여 주는 비트가 넘을 때만 남긴다. 진짜로 퍼진 방향이 셋인 자료에서 이 기준은 3을 골랐고, 「분산 95%」 어림은 노이즈 칸을 더할수록 15, 38, 71개를 골랐다. 칸의 대부분이 빈 표에서도 보이는 칸만으로 낮은 랭크를 맞추면 빈칸을 채울 수 있고, 넷플릭스 상(2006–2009)이 그 무대였다.

flowchart LR
  A["가장 가까운 직선<br/>(피어슨)"] -- "피타고라스<br/>합이 늘 같다" --> B["가장 넓게 퍼진 방향<br/>(호텔링)"]
  B --> C["공분산의 고유벡터<br/>= 특잇값 분해의 축"]
  C -- "에커트–영<br/>큰 특잇값 k개" --> D["가장 좋은 랭크 k 근사"]
  D -- "두 부분 코드<br/>축 하나 = d·½log₂ n 비트" --> E["몇 개를 남기나"]
  D -- "보이는 칸만으로" --> F["행렬 채우기"]

막힌 곳

평평한 면 하나는 강력했지만, 이 장의 모든 셈은 자료가 면 하나 근처에 있다는 가정 위에 서 있다. 평면에 점 300개가 서로 다른 세 방향의 직선 위에 흩어져 있다고 하자. 별 모양이다. 점 하나하나는 직선 위에 있으니 숫자 하나로 적을 수 있을 것 같지만, 주성분 축은 둘이고 어느 축 하나로도 모든 점을 적을 수 없다. 축 둘을 다 쓰면 줄인 것이 없는데, 점마다 서로 다른 축 하나씩만 골라 쓸 수 있다면 어떨까? 그리고 그 축들은 자료에서 어떻게 배울까?