Chapter 15

PCA와 데이터

식각 장비 한 대에는 압력, 온도, 가스 유량, RF 전력, 반사 전력 같은 센서가 수십 개 붙어 있고, 웨이퍼 한 장마다 이 모든 값이 기록됩니다. 숫자는 넘쳐나지만 사람이 한눈에 볼 수 있는 축은 두세 개뿐입니다. 다행히 센서들은 제각각 움직이지 않습니다. 몇 개의 숨은 원인이 여러 센서를 함께 흔들기 때문입니다. 주성분 분석(PCA)은 그 "함께 흔들리는 방향"을 찾아 데이터를 몇 개의 점수로 요약하는 방법이고, 그 정체는 놀랍게도 지금까지 배운 것 그대로입니다. 공분산 행렬이라는 대칭 행렬의 고유벡터, 그리고 데이터 행렬의 특이값 분해입니다. 이 장에서는 점구름 위에서 축을 직접 돌려 보며 "분산이 가장 큰 방향"과 "재구성 오차가 가장 작은 방향"이 같은 방향임을 확인하고, 센서 10개를 점수 2개로 줄이는 데까지 갑니다.

이 수식이 없었다면수십 개 센서를 한 화면에서 보는 공정 모니터링

장비 센서가 40개라면, 센서마다 관리도를 하나씩 그려 40개의 화면을 지켜봐야 합니다. 더 큰 문제는 개별 센서가 모두 정상 범위 안에 있어도 조합이 이상할 수 있다는 점입니다. 압력이 조금 높고 유량이 조금 낮은 것은 각각은 흔하지만, 둘이 동시에 일어나는 일은 평소에 없던 일일 수 있습니다. 센서 쌍만 해도 780개, 셋씩 묶으면 9,880개라서 조합을 하나하나 감시할 수는 없습니다.

해법은 센서들이 "함께 움직이는 방향"을 데이터에서 찾아 좌표축을 바꾸는 것입니다. 1901년 칼 피어슨(Karl Pearson)은 점들에 "가장 가깝게 맞는 직선과 평면"을 구하는 문제로, 1933년 해럴드 호텔링(Harold Hotelling)은 "분산을 가장 많이 담는 성분"을 구하는 문제로 같은 답에 도달했습니다. 그 답이 공분산 행렬의 고유벡터, 곧 주성분입니다. 오늘날 반도체 공정의 다변량 이상 감지에서 PCA 점수와 호텔링 T2T^2 통계량은 표준 도구로 쓰입니다.

센서 40개의 관리도→조합 이상은 못 봄→공분산의 고유벡터 = 새 좌표축→점수 몇 개 + T² 하나

데이터 행렬과 중심화

웨이퍼 300장, 센서 10개: 이것은 어떤 행렬인가

웨이퍼 한 장을 처리할 때마다 센서 10개의 평균값을 한 줄로 기록한다고 합시다. 300장이면 300줄 × 10칸의 표가 됩니다. 이 표에서 "웨이퍼들이 주로 어느 방향으로 흩어져 있나"를 묻고 싶은데, 그 전에 먼저 정할 것이 있습니다. 표의 숫자를 원점에서 잰 위치로 볼 것인가, 평균에서 벗어난 정도로 볼 것인가?

표 하나를 행렬로 읽는 약속부터 정합니다. 이 장에서는 통계와 머신러닝의 관례대로 행이 표본, 열이 변수입니다. 표본 하나는 Rd\mathbb{R}^d의 벡터이고, 데이터 전체는 Rd\mathbb{R}^d에 찍힌 nn개의 점, 곧 점구름입니다.

정의 15.1 (데이터 행렬, 평균 벡터, 중심화) 표본 x1,…,xn∈Rd\mathbf{x}_1, \dots, \mathbf{x}_n \in \mathbb{R}^d을 행으로 쌓은 n×dn \times d 행렬 XX를 데이터 행렬(data matrix)이라 한다. 평균 벡터는 μ=1n∑ixi\boldsymbol\mu = \frac1n\sum_i \mathbf{x}_i이고, 각 행에서 μT\boldsymbol\mu^{\mathsf T}를 뺀
Xc=X−1μT,1=(1,…,1)T∈RnX_c = X - \mathbf{1}\boldsymbol\mu^{\mathsf T}, \qquad \mathbf{1} = (1, \dots, 1)^{\mathsf T} \in \mathbb{R}^n
를 중심화(centering)된 데이터 행렬이라 한다. XcX_c의 각 열의 합은 0이다.
X (n × d): 행 = 웨이퍼, 열 = 센서 센서 → 압력온도RF #110.261.0402 #29.859.6395 #310.561.9408 ⋮⋮⋮⋮ μ10.060.4401 − μᵀ X_c 0.20.61 −0.2−0.8−6 0.51.57 ⋮⋮⋮ 000 원점평균이 멀리 있다 점구름 중심화 = 원점을 점구름의 무게중심으로 옮기기. 그 뒤의 모든 방향은 "평균에서 벗어나는 방향"이다.
그림 15-1. 데이터 행렬은 행마다 표본 하나, 열마다 변수 하나다. 각 열에서 그 열의 평균을 빼면(중심화) 점구름의 무게중심이 원점에 온다. 중심화하지 않으면 "가장 긴 방향"을 물었을 때 원점에서 평균까지의 방향(그림의 점선)이 답으로 나와 버린다. 그것은 데이터의 흩어짐이 아니라 데이터의 위치다.

중심화가 왜 필요한지는 그림이 말해 줍니다. 원점을 지나는 직선 가운데 점들에 가장 가까운 것을 찾으면, 점구름이 원점에서 멀리 있을 때 답은 거의 "원점에서 평균을 가리키는 직선"입니다. 웨이퍼들의 평균 온도가 60 °C라는 사실은 흩어짐과 아무 관계가 없습니다. 그래서 PCA는 언제나 평균을 뺀 데이터에서 출발합니다. 다음 절의 시뮬레이터에서 "평균을 빼지 않기"를 켜 보면 이 실수가 어떤 축을 만드는지 직접 볼 수 있습니다.

열 하나 = 변수 하나 = 벡터 하나 중심화한 열 aj\mathbf{a}_j는 Rn\mathbb{R}^n의 벡터입니다. 1장의 말로 하면 두 변수의 공분산은 이 두 벡터의 내적을 n−1n-1로 나눈 값이고, 상관 계수는 두 벡터 사이 각의 코사인입니다(1장 코사인 유사도). 다음 절의 공분산 행렬은 이 내적들을 한 표에 모은 것입니다.

공분산 행렬: 모든 방향의 분산을 담은 표

45° 방향의 분산은 어떻게 구하나

압력 축으로 본 분산, 온도 축으로 본 분산은 열마다 계산하면 됩니다. 그런데 "압력과 온도를 반씩 섞은 방향"의 분산은? 방향은 무한히 많습니다. 방향마다 데이터 전체를 다시 훑어야 할까요?

정의 15.2 (표본 공분산 행렬) 중심화된 XcX_c에 대해
C=1n−1XcTXc,Cjk=1n−1∑i=1n(xij−μj)(xik−μk)C = \frac{1}{n-1}X_c^{\mathsf T}X_c, \qquad C_{jk} = \frac{1}{n-1}\sum_{i=1}^n (x_{ij} - \mu_j)(x_{ik} - \mu_k)
CC는 d×dd \times d 행렬. 대각 원소 CjjC_{jj}는 변수 jj의 분산, 비대각 원소 CjkC_{jk}는 변수 j,kj, k의 공분산이다. n−1n-1로 나누는 이유(불편 추정)는 확률과 통계의 점추정 장을 보라.

이 표 하나가 문제의 답을 모두 갖고 있습니다. 단위 벡터 u\mathbf{u} 방향으로 점들을 사영하면 ii번째 점의 그림자 좌표는 ti=u⋅(xi−μ)t_i = \mathbf{u}\cdot(\mathbf{x}_i - \boldsymbol\mu), 묶어서 쓰면 t=Xcu\mathbf{t} = X_c\mathbf{u}입니다. 그 분산은

정리 15.1 (사영 분산) 단위 벡터 u\mathbf{u}에 대해 사영 좌표 ti=u⋅(xi−μ)t_i = \mathbf{u}\cdot(\mathbf{x}_i - \boldsymbol\mu)의 표본 분산은
Var⁡(t)=1n−1∥Xcu∥2=1n−1uTXcTXcu=uTC u\operatorname{Var}(t) = \frac{1}{n-1}\lVert X_c\mathbf{u}\rVert^2 = \frac{1}{n-1}\mathbf{u}^{\mathsf T}X_c^{\mathsf T}X_c\mathbf{u} = \mathbf{u}^{\mathsf T}C\,\mathbf{u}

증명. XcX_c의 열 합이 0이므로 ∑iti=1TXcu=0\sum_i t_i = \mathbf{1}^{\mathsf T}X_c\mathbf{u} = 0, 즉 tt의 평균은 0이다. 따라서 분산은 1n−1∑ti2=1n−1tTt\frac{1}{n-1}\sum t_i^2 = \frac{1}{n-1}\mathbf{t}^{\mathsf T}\mathbf{t}이고 t=Xcu\mathbf{t} = X_c\mathbf{u}를 대입하면 된다. ∎

방향마다 데이터를 다시 훑을 필요가 없습니다. d×dd \times d 표 CC를 한 번 만들어 두면, 어떤 방향의 분산도 uTCu\mathbf{u}^{\mathsf T}C\mathbf{u}라는 곱셈 몇 번으로 나옵니다. 예를 들어 u=(1,1)/2\mathbf{u} = (1, 1)/\sqrt2이면 uTCu=12(C11+2C12+C22)\mathbf{u}^{\mathsf T}C\mathbf{u} = \tfrac12(C_{11} + 2C_{12} + C_{22})입니다. 두 변수가 양의 상관(C12>0C_{12} > 0)이면 대각선 방향의 분산이 두 축의 평균보다 크다는 것이 식에서 바로 보입니다.

정리 15.2 (공분산 행렬의 성질) CC는 대칭이고 양의 준정부호(positive semidefinite)다. 즉 모든 u\mathbf{u}에 대해 uTCu≥0\mathbf{u}^{\mathsf T}C\mathbf{u} \ge 0. 따라서 CC의 고유값은 모두 0 이상의 실수이고, 서로 수직인 단위 고유벡터로 이루어진 정규직교 기저가 있다.

증명. CT=1n−1(XcTXc)T=1n−1XcTXc=CC^{\mathsf T} = \frac{1}{n-1}(X_c^{\mathsf T}X_c)^{\mathsf T} = \frac{1}{n-1}X_c^{\mathsf T}X_c = C. 또 uTCu=1n−1∥Xcu∥2≥0\mathbf{u}^{\mathsf T}C\mathbf{u} = \frac{1}{n-1}\lVert X_c\mathbf{u}\rVert^2 \ge 0. 고유값과 고유벡터에 관한 결론은 대칭 행렬의 스펙트럼 정리(13장 대칭 행렬과 양의 정부호)에서 나온다. Cv=λvC\mathbf{v} = \lambda\mathbf{v}, ∥v∥=1\lVert\mathbf{v}\rVert = 1이면 λ=vTCv≥0\lambda = \mathbf{v}^{\mathsf T}C\mathbf{v} \ge 0이다. ∎

예제 15.1 (작은 데이터의 공분산) 이미 중심화된 네 점 (3,1),(1,3),(−1,−3),(−3,−1)(3, 1), (1, 3), (-1, -3), (-3, -1)을 보자.
  1. XcTXcX_c^{\mathsf T}X_c의 (1,1) 칸은 첫 열의 제곱합 9+1+1+9=209 + 1 + 1 + 9 = 20, (2,2) 칸도 2020, (1,2) 칸은 3⋅1+1⋅3+(−1)(−3)+(−3)(−1)=123\cdot1 + 1\cdot3 + (-1)(-3) + (-3)(-1) = 12.
  2. n−1=3n - 1 = 3으로 나누면 C=[20/34420/3]≈[6.67446.67]C = \begin{bmatrix}20/3 & 4\\ 4 & 20/3\end{bmatrix}\approx\begin{bmatrix}6.67 & 4\\ 4 & 6.67\end{bmatrix}.
  3. 방향별 분산: xx축 6.676.67, 대각선 (1,1)/2(1,1)/\sqrt2 방향 12(6.67+8+6.67)=10.67\tfrac12(6.67 + 8 + 6.67) = 10.67, 반대 대각선 (1,−1)/2(1,-1)/\sqrt2 방향 12(6.67−8+6.67)=2.67\tfrac12(6.67 - 8 + 6.67) = 2.67.
점들은 대각선을 따라 길게 늘어서 있고, 그 방향의 분산이 축 방향보다 큽니다. 다음 절에서 이 두 대각선이 정확히 CC의 고유벡터라는 것을 봅니다.

주성분: 분산이 가장 큰 방향

축 하나만 남긴다면 어느 방향인가

점구름을 직선 하나 위로 눌러 요약해야 한다면, 그림자들이 가장 넓게 퍼지는(정보를 가장 많이 남기는) 방향을 고르고 싶습니다. 그 방향은 uTCu\mathbf{u}^{\mathsf T}C\mathbf{u}를 최대로 만드는 단위 벡터입니다. 무한히 많은 방향 가운데 어떻게 찾을까요?

분모로 길이를 나눈 R(u)=uTCuuTuR(\mathbf{u}) = \dfrac{\mathbf{u}^{\mathsf T}C\mathbf{u}}{\mathbf{u}^{\mathsf T}\mathbf{u}}를 레일리 몫(Rayleigh quotient)이라 합니다. 방향만 보고 길이는 신경 쓰지 않는 "방향별 분산"입니다. 이것을 최대로 만드는 방향은 고유벡터라는 것이 이 장의 핵심 정리입니다.

정리 15.3 (레일리 몫의 최대·최소) 대칭 행렬 CC의 고유값을 λ1≥λ2≥⋯≥λd\lambda_1 \ge \lambda_2 \ge \cdots \ge \lambda_d, 대응하는 정규직교 고유벡터를 v1,…,vd\mathbf{v}_1, \dots, \mathbf{v}_d라 하자. 모든 u≠0\mathbf{u} \ne \mathbf{0}에 대해
λd≤R(u)=uTCuuTu≤λ1\lambda_d \le R(\mathbf{u}) = \frac{\mathbf{u}^{\mathsf T}C\mathbf{u}}{\mathbf{u}^{\mathsf T}\mathbf{u}} \le \lambda_1
이고, 최댓값은 u=v1\mathbf{u} = \mathbf{v}_1에서, 최솟값은 u=vd\mathbf{u} = \mathbf{v}_d에서 얻는다. 더 나아가 v1,…,vj−1\mathbf{v}_1, \dots, \mathbf{v}_{j-1}에 모두 수직인 u\mathbf{u} 가운데 RR의 최댓값은 λj\lambda_j이고 vj\mathbf{v}_j에서 얻는다.

증명. 단위 벡터 u\mathbf{u}를 고유벡터 기저로 u=∑icivi\mathbf{u} = \sum_i c_i\mathbf{v}_i, ∑ci2=1\sum c_i^2 = 1로 쓰면 Cu=∑iλiciviC\mathbf{u} = \sum_i \lambda_i c_i\mathbf{v}_i이고 정규직교성에 의해 uTCu=∑iλici2\mathbf{u}^{\mathsf T}C\mathbf{u} = \sum_i \lambda_i c_i^2이다. 이것은 고유값들의 가중 평균(가중치 ci2c_i^2, 합 1)이므로 λd\lambda_d와 λ1\lambda_1 사이에 있고, 가중치를 모두 λ1\lambda_1에 몰아 준 c1=1c_1 = 1일 때 최대다. v1,…,vj−1\mathbf{v}_1, \dots, \mathbf{v}_{j-1}에 수직이라는 조건은 c1=⋯=cj−1=0c_1 = \cdots = c_{j-1} = 0이라는 뜻이므로 같은 논리로 최댓값은 λj\lambda_j다. ∎

정의 15.3 (주성분) 공분산 행렬 CC의 단위 고유벡터 v1,v2,…\mathbf{v}_1, \mathbf{v}_2, \dots(고유값 내림차순)를 주성분(principal components) 방향 또는 적재 벡터(loading vector)라 하고, 표본 xi\mathbf{x}_i의 jj번째 주성분 점수(score)를 tij=vj⋅(xi−μ)t_{ij} = \mathbf{v}_j\cdot(\mathbf{x}_i - \boldsymbol\mu)로 정한다. 점수 t⋅jt_{\cdot j}의 분산은 λj\lambda_j이고, 서로 다른 주성분의 점수는 상관이 0이다.

마지막 문장도 한 줄로 확인됩니다. 점수 열 XcvjX_c\mathbf{v}_j와 XcvkX_c\mathbf{v}_k의 공분산은 1n−1vjTXcTXcvk=vjTCvk=λk vj⋅vk\frac{1}{n-1}\mathbf{v}_j^{\mathsf T}X_c^{\mathsf T}X_c\mathbf{v}_k = \mathbf{v}_j^{\mathsf T}C\mathbf{v}_k = \lambda_k\,\mathbf{v}_j\cdot\mathbf{v}_k이고, 이는 j≠kj \ne k이면 0입니다. 즉 주성분 좌표계로 옮기면 공분산 행렬이 대각 행렬 Λ=diag⁡(λ1,…,λd)\Lambda = \operatorname{diag}(\lambda_1, \dots, \lambda_d)이 됩니다. 서로 얽혀 있던 변수들을 얽히지 않은 새 변수들로 바꾼 것입니다.

SIMULATOR

축을 돌려 분산이 가장 큰 방향 찾기

보라 점 u를 끌어 축을 돌려 보세요
사영 분산 uᵀCu—
잔차 제곱 평균—
합 (총분산)—
PC1과의 각—
후보 축 uPC1, PC2 (점선)그림자(사영)잔차
—
해볼 것: ① u를 천천히 돌리며 사영 분산이 가장 커지는 곳을 찾으세요. 그곳이 초록 점선(PC1)과 겹치고, 그때 잔차 제곱 평균은 가장 작습니다. 두 값의 합은 어디서나 같습니다(다음 절의 피타고라스 항등식). ② 긴 축 ÷ 짧은 축을 1로 내리면 점구름이 둥글어져 어느 방향이나 분산이 비슷해지고, PC1은 표본마다 제멋대로 바뀝니다. ③ '평균을 빼지 않기'를 켜면 축이 원점을 지나야 하므로, 최적의 축이 점구름의 긴 방향이 아니라 평균 쪽을 향합니다. 모델: 2차원 정규 분포에서 시드 고정 난수로 뽑은 점 160개. 분산은 n − 1로 나눈 표본 분산입니다.
예제 15.2 (예제 15.1의 주성분) C=[20/34420/3]C = \begin{bmatrix}20/3 & 4\\ 4 & 20/3\end{bmatrix}의 고유값은 det⁡(C−λI)=(20/3−λ)2−16=0\det(C - \lambda I) = (20/3 - \lambda)^2 - 16 = 0에서 λ=20/3±4\lambda = 20/3 \pm 4, 즉 λ1=32/3≈10.67\lambda_1 = 32/3 \approx 10.67, λ2=8/3≈2.67\lambda_2 = 8/3 \approx 2.67이다.
  1. λ1\lambda_1의 고유벡터: (C−λ1I)v=[−444−4]v=0(C - \lambda_1 I)\mathbf{v} = \begin{bmatrix}-4 & 4\\ 4 & -4\end{bmatrix}\mathbf{v} = \mathbf{0}에서 v1=(1,1)/2\mathbf{v}_1 = (1, 1)/\sqrt2. 같은 방법으로 v2=(1,−1)/2\mathbf{v}_2 = (1, -1)/\sqrt2. 예제 15.1에서 계산한 대각선 방향의 분산 10.67과 2.67이 바로 두 고유값이다.
  2. PC1 점수: ti1=(xi+yi)/2t_{i1} = (x_i + y_i)/\sqrt2 → 22,22,−22,−222\sqrt2, 2\sqrt2, -2\sqrt2, -2\sqrt2. 분산은 4⋅8/3=32/3=λ14\cdot 8/3 = 32/3 = \lambda_1. ✓
  3. PC2 점수: (xi−yi)/2(x_i - y_i)/\sqrt2 → 2,−2,2,−2\sqrt2, -\sqrt2, \sqrt2, -\sqrt2. 분산은 4⋅2/3=8/3=λ24\cdot 2/3 = 8/3 = \lambda_2. ✓ PC1 점수와 PC2 점수의 곱의 합은 4−4−4+4=04 - 4 - 4 + 4 = 0이므로 상관이 0이다. ✓
  4. PC1이 담는 분산의 비율은 λ1/(λ1+λ2)=32/40=80%\lambda_1/(\lambda_1 + \lambda_2) = 32/40 = 80\%.

두 가지 관점: 분산 최대화 = 재구성 오차 최소화

피어슨과 호텔링은 왜 같은 답을 얻었나

피어슨은 "점들까지의 수직 거리 제곱합이 가장 작은 직선"을 찾았고, 호텔링은 "그림자의 분산이 가장 큰 방향"을 찾았습니다. 하나는 오차를 줄이고 하나는 정보를 늘리는, 서로 다른 목표처럼 보입니다. 그런데 둘의 답이 같습니다. 시뮬레이터에서 본 "합은 언제나 같다"가 그 이유입니다.

직선 span{u} 평균(원점) xᵢ − μ tᵢ = u·(xᵢ − μ) rᵢ 점 하나의 피타고라스 ‖xᵢ − μ‖² = tᵢ² + ‖rᵢ‖² 모든 점을 더하면 총분산 tr C (고정) = uᵀCu 오차 막대 전체 길이가 정해져 있으니 주황(사영 분산)을 늘리는 것과 빨강(재구성 오차)을 줄이는 것은 같은 일이다.
그림 15-2. 중심화한 점 xi−μ\mathbf{x}_i - \boldsymbol\mu를 직선에 사영하면 그림자 길이 tit_i와 수직 잔차 ri\mathbf{r}_i가 직각을 이룬다. 점마다 피타고라스 정리가 성립하고, 모든 점에서 더하면 "총분산 = 사영 분산 + 재구성 오차"가 된다. 왼쪽 항이 축과 무관하므로 오른쪽 두 항은 한쪽이 늘면 다른 쪽이 준다.
정리 15.4 (분산–오차 분해) 단위 벡터 u\mathbf{u}에 대해 재구성 x^i=μ+tiu\hat{\mathbf{x}}_i = \boldsymbol\mu + t_i\mathbf{u}의 평균 제곱 오차는
1n−1∑i=1n∥xi−x^i∥2=tr⁡C−uTCu\frac{1}{n-1}\sum_{i=1}^n \lVert\mathbf{x}_i - \hat{\mathbf{x}}_i\rVert^2 = \operatorname{tr}C - \mathbf{u}^{\mathsf T}C\mathbf{u}
따라서 재구성 오차를 최소로 하는 방향과 사영 분산을 최대로 하는 방향은 같고, 그것은 v1\mathbf{v}_1이다. 최소 오차는 λ2+⋯+λd\lambda_2 + \cdots + \lambda_d이다.

증명. ri=(xi−μ)−tiu\mathbf{r}_i = (\mathbf{x}_i - \boldsymbol\mu) - t_i\mathbf{u}는 u\mathbf{u}에 수직이다(u⋅ri=ti−ti=0\mathbf{u}\cdot\mathbf{r}_i = t_i - t_i = 0). 피타고라스 정리로 ∥xi−μ∥2=ti2+∥ri∥2\lVert\mathbf{x}_i - \boldsymbol\mu\rVert^2 = t_i^2 + \lVert\mathbf{r}_i\rVert^2. 모든 ii에 대해 더하고 n−1n-1로 나누면 왼쪽은 1n−1∑i,j(xij−μj)2=∑jCjj=tr⁡C\frac{1}{n-1}\sum_{i,j}(x_{ij} - \mu_j)^2 = \sum_j C_{jj} = \operatorname{tr}C, 오른쪽 첫 항은 정리 15.1에 의해 uTCu\mathbf{u}^{\mathsf T}C\mathbf{u}다. 대각합은 고유값의 합이므로 최소 오차는 ∑jλj−λ1\sum_j\lambda_j - \lambda_1이다. ∎

같은 논리가 직선 대신 kk차원 부분공간에도 그대로 적용됩니다. 정규직교 열 u1,…,uk\mathbf{u}_1, \dots, \mathbf{u}_k로 이루어진 UkU_k에 사영하면 사영 분산은 tr⁡(UkTCUk)\operatorname{tr}(U_k^{\mathsf T}CU_k)이고, 이것은 Uk=[v1⋯vk]U_k = [\mathbf{v}_1 \cdots \mathbf{v}_k]일 때 최대 λ1+⋯+λk\lambda_1 + \cdots + \lambda_k입니다(정리 15.3을 차례로 적용하는 것과 같은 결론으로, 키 판 정리(Ky Fan)라 부릅니다). 남는 오차는 λk+1+⋯+λd\lambda_{k+1} + \cdots + \lambda_d입니다.

SVD로 보는 PCA

공분산 행렬을 거치지 않고 데이터 행렬에서 바로 주성분을 얻을 수도 있습니다. 중심화된 데이터 행렬의 특이값 분해(14장 특이값 분해) Xc=UΣVTX_c = U\Sigma V^{\mathsf T}를 쓰면 됩니다.

정리 15.5 (PCA와 SVD) Xc=UΣVTX_c = U\Sigma V^{\mathsf T}(특이값 σ1≥σ2≥⋯≥0\sigma_1 \ge \sigma_2 \ge \cdots \ge 0)이면
C=1n−1XcTXc=V ΣTΣn−1 VT,λj=σj2n−1,T=XcV=UΣC = \frac{1}{n-1}X_c^{\mathsf T}X_c = V\,\frac{\Sigma^{\mathsf T}\Sigma}{n-1}\,V^{\mathsf T}, \qquad \lambda_j = \frac{\sigma_j^2}{n-1}, \qquad T = X_cV = U\Sigma
주성분 방향은 XcX_c의 오른쪽 특이벡터(VV의 열)이고, 점수 행렬 TT의 jj열은 σjuj\sigma_j\mathbf{u}_j다.

증명. XcTXc=VΣTUTUΣVT=V(ΣTΣ)VTX_c^{\mathsf T}X_c = V\Sigma^{\mathsf T}U^{\mathsf T}U\Sigma V^{\mathsf T} = V(\Sigma^{\mathsf T}\Sigma)V^{\mathsf T}이고 UTU=IU^{\mathsf T}U = I를 썼다. VV는 직교 행렬, ΣTΣ=diag⁡(σj2)\Sigma^{\mathsf T}\Sigma = \operatorname{diag}(\sigma_j^2)은 대각이므로 이것은 XcTXcX_c^{\mathsf T}X_c의 고유분해다. 즉 VV의 열이 고유벡터, σj2\sigma_j^2이 고유값이다. n−1n-1로 나누면 CC의 고유분해가 된다. 점수는 XcV=UΣVTV=UΣX_cV = U\Sigma V^{\mathsf T}V = U\Sigma. ∎

X_cn × d = Un × d Σ (σ₁ ≥ σ₂ ≥ …) Vᵀd × d, 행 = 주성분 읽는 법 Vᵀ의 행 j = 주성분 vⱼ (적재) σⱼ²/(n−1) = λⱼ (PCⱼ의 분산) UΣ = X_cV = 점수 행렬 T 앞의 k개만 남기면 X_c ≈ U_k Σ_k V_kᵀ
그림 15-3. 중심화한 데이터 행렬의 SVD는 PCA의 모든 결과를 한 번에 준다. VV의 열이 주성분 방향, 특이값의 제곱을 n−1n-1로 나눈 값이 주성분의 분산, UΣU\Sigma가 점수다. 앞의 kk개 성분만 남긴 UkΣkVkTU_k\Sigma_kV_k^{\mathsf T}는 에커트–영 정리에 의해 계수 kk인 행렬 가운데 XcX_c에 가장 가깝고, 이것이 정리 15.4의 kk차원 판이다.
실제 계산은 SVD로 수학적으로는 CC의 고유분해와 XcX_c의 SVD가 같은 답을 주지만, 컴퓨터에서는 다릅니다. XcTXcX_c^{\mathsf T}X_c를 만드는 순간 조건수가 제곱이 되어(κ(XcTXc)=κ(Xc)2\kappa(X_c^{\mathsf T}X_c) = \kappa(X_c)^2) 작은 고유값의 유효 숫자가 사라집니다. 그래서 대부분의 수치 라이브러리는 PCA를 중심화한 데이터의 SVD로 계산합니다. 조건수와 반올림 오차는 16장 수치 선형대수에서 다룹니다.

설명 분산과 성분 수 k 고르기

센서 10개 가운데 진짜 독립적인 움직임은 몇 개인가

센서 10개가 기록되지만, 실제로 공정을 흔드는 원인은 챔버 압력의 흔들림, 전극 온도, RF 정합 상태처럼 몇 개뿐일 수 있습니다. 데이터만 보고 "숨은 원인의 수"를 짐작할 수 있을까요? 그리고 점수를 몇 개 남겨야 충분할까요?

정의 15.4 (설명 분산 비율) jj번째 주성분의 설명 분산 비율(explained variance ratio)은 λj/∑iλi=λj/tr⁡C\lambda_j/\sum_i\lambda_i = \lambda_j/\operatorname{tr}C이고, 앞의 kk개의 누적 비율은 ∑j≤kλj/tr⁡C\sum_{j\le k}\lambda_j/\operatorname{tr}C이다. 고유값을 크기순으로 막대로 그린 것을 스크리 그림(scree plot)이라 한다.

숨은 원인 rr개가 센서들을 선형으로 섞고 그 위에 서로 독립인 측정 잡음이 얹힌다고 해 봅시다. 원인이 만드는 공분산은 계수 rr인 행렬이라 고유값 rr개만 크고, 잡음은 모든 방향에 고르게 작은 분산을 보탭니다. 그래서 스크리 그림은 큰 막대 rr개 뒤에 낮고 평평한 막대들이 이어지는 모양이 되고, 꺾이는 곳(팔꿈치)이 rr을 알려 줍니다. 실무에서 자주 쓰는 기준은 다음과 같습니다.

기준방법주의할 점
누적 비율누적 설명 분산이 90%(또는 95%)를 넘는 최소 kk잡음이 크면 잡음까지 담으려고 kk가 커진다
팔꿈치스크리 그림이 평평해지기 직전까지꺾임이 뚜렷하지 않으면 사람마다 다르게 읽는다
카이저 기준상관 행렬 PCA에서 λj>1\lambda_j > 1인 성분만(변수 하나보다 많이 설명하는 것)표준화한 데이터에서만 뜻이 있다
교차 검증남겨 둔 데이터의 재구성 오차가 가장 작은 kk계산은 많지만 가장 근거가 분명하다
SIMULATOR

센서 10개의 스크리 그림

λ₁ … λ₄—
기준을 넘는 최소 k—
팔꿈치(최대 비율 낙차)—
해볼 것: ① 잡음 σ를 작게 하면 막대 r개 뒤가 거의 0으로 떨어져 꺾임이 뚜렷합니다. ② 잡음을 키우면 평평한 바닥이 올라와 누적 90% 기준의 k가 r보다 커집니다. 잡음까지 "설명"하려 들기 때문입니다. ③ 표본 수 n을 20으로 줄이면 잡음 고유값들이 고르지 않고 비스듬하게 퍼집니다. 표본이 적으면 공분산 추정 자체가 흔들립니다. 모델: 센서값 = (숨은 원인 r개, 표준 편차 3, 2, 1.4, 1)의 고정된 선형 결합 + 센서마다 독립인 정규 잡음 σ. 적재 행렬은 시드 고정 난수입니다.

차원 축소: 센서 10개를 점수 2개로

10차원 점구름을 어떻게 눈으로 보나

장비가 세 가지 운전 상태(정상, 챔버 세정 직후, 부품 교체 직전)를 오간다고 합시다. 센서 두 개를 골라 산점도를 그리면 세 상태가 겹쳐 보일 수 있습니다. 상태의 차이가 10개 센서에 조금씩 나뉘어 실려 있기 때문입니다. 10차원 점구름에서 상태가 가장 잘 갈라져 보이는 평면을 찾을 수 있을까요?

앞의 kk개 주성분 점수만 남기는 것이 PCA 차원 축소입니다. 표본 하나를 dd개의 숫자 대신 kk개의 숫자 (t1,…,tk)(t_1, \dots, t_k)로 기록하고, 필요하면 x^=μ+∑j≤ktjvj\hat{\mathbf{x}} = \boldsymbol\mu + \sum_{j\le k}t_j\mathbf{v}_j로 되살립니다. 저장할 것은 평균 μ\boldsymbol\mu와 적재 VkV_k(한 번만), 그리고 표본마다 점수 kk개입니다. 정리 15.4에 의해 이것이 kk차원 선형 요약 가운데 평균 제곱 오차가 가장 작은 방법입니다.

SIMULATOR

원래 센서 두 개 vs 주성분 점수 두 개

보기
PC1+PC2 설명 분산—
저장할 숫자 (300장)—
재구성 상대 오차—
정상세정 직후교체 직전
해볼 것: ① '센서 1 vs 센서 2'와 'PC1 vs PC2'를 번갈아 보세요. 같은 300개 점인데 주성분 평면에서는 세 상태가 훨씬 잘 갈라집니다. ② 바이플롯을 켜면 센서마다 화살표가 나타납니다. 같은 쪽을 가리키는 센서들은 함께 움직이고, 화살표가 긴 센서가 그 평면을 주로 만듭니다. ③ 상태 차이를 0으로 하면 세 무리가 한 덩어리가 됩니다. PCA는 라벨(색)을 전혀 보지 않고 분산만 봅니다. 상태 차이가 분산의 큰 몫을 차지할 때만 주성분 평면에서 갈라집니다. 모델: 10개 센서 = 숨은 원인 2개의 고정 선형 결합 + 상태별 평균 이동 + 독립 잡음. 저장 숫자는 점수 300×2 + 적재 10×2 + 평균 10.

고유 패턴: 이미지 한 장도 벡터다

12×12 흑백 이미지는 숫자 144개, 즉 R144\mathbb{R}^{144}의 벡터입니다. 이미지 수십 장에 PCA를 하면 주성분 vj\mathbf{v}_j도 144개의 숫자라서 그 자체를 이미지로 그려 볼 수 있습니다. 1991년 터크와 펜틀랜드(Turk & Pentland)는 얼굴 사진에 이 방법을 써서 주성분 이미지를 "고유얼굴"(eigenfaces)이라 불렀습니다. 아래 시뮬레이터는 얼굴 대신, 몇 가지 기본 무늬를 무작위로 섞고 잡음을 더한 합성 이미지 60장을 씁니다. PCA는 무늬가 무엇인지 듣지 않고도 데이터만으로 그 무늬들이 펼치는 공간을 찾아냅니다.

SIMULATOR

고유 패턴으로 이미지 다시 쌓기

누적 설명 분산—
재구성 상대 오차—
저장 숫자 / 이미지—
해볼 것: ① k = 0이면 평균 이미지만 남습니다. k를 하나씩 올리면 원본에 빠르게 가까워지다가, 기본 무늬 수(4개)를 넘어서면 오차가 거의 줄지 않습니다. 그 뒤의 성분은 잡음입니다. ② 잡음을 0으로 하면 고유 패턴 5번부터는 거의 0이 됩니다(무늬가 펼치는 공간이 4차원). ③ 고유 패턴은 원래 무늬와 똑같지 않고 그 무늬들의 직교하는 조합입니다. PCA가 찾는 것은 '부분공간'이지 개별 원인이 아닙니다. 모델: 12×12 합성 이미지 60장 = 기본 무늬 4개(가로 띠, 세로 띠, 원, 대각 경사)의 무작위 결합 + 픽셀마다 독립 잡음. 색: 고유 패턴은 0을 흰색으로 한 파랑–빨강, 이미지는 흑백.
심화: 호텔링 T²와 잔차 Q 공정 모니터링에서는 정상 데이터로 μ\boldsymbol\mu, VkV_k, λ1,…,λk\lambda_1, \dots, \lambda_k를 만든 뒤, 새 웨이퍼 x\mathbf{x}마다 두 숫자를 계산합니다.
T2=∑j=1ktj2λj,Q=∥x−μ−∑j=1ktjvj∥2T^2 = \sum_{j=1}^{k}\frac{t_j^2}{\lambda_j}, \qquad Q = \Big\lVert \mathbf{x} - \boldsymbol\mu - \sum_{j=1}^{k}t_j\mathbf{v}_j\Big\rVert^2
T2T^2는 주성분 평면 안에서 평소보다 얼마나 멀리 갔는지(각 성분을 자기 분산으로 나눔), QQ(SPE)는 평면 밖으로, 즉 평소에 없던 방향으로 얼마나 벗어났는지를 잰다.
센서 40개의 관리도 대신 T2T^2와 QQ 관리도 두 개만 보면 되고, 경보가 울리면 어느 센서가 그 값에 크게 기여했는지(기여도 그림) 거꾸로 따라갑니다. 관리 한계를 정하는 법은 확률과 통계의 통계적 공정 관리 장을 참고하세요.

단위가 PCA를 바꾼다: 표준화

압력을 kPa 대신 Pa로 적었더니 주성분이 바뀌었다

온도(°C)와 압력을 함께 분석합니다. 압력을 kPa로 적으면 두 변수의 분산이 비슷하지만, Pa로 적으면 압력의 분산이 10002=1061000^2 = 10^6배가 됩니다. 물리는 그대로인데 PCA의 PC1은 압력 축에 거의 붙어 버립니다. 무엇이 잘못일까요?

잘못된 것은 없습니다. PCA는 숫자의 분산을 최대화할 뿐이고, 숫자의 크기는 단위에 따라 달라집니다. 변수 jj를 ss배로 다시 쓰면 CC의 jj행과 jj열이 ss배(대각은 s2s^2배)가 되어 고유벡터가 바뀝니다. 변수들의 단위가 서로 다르거나 비교할 근거가 없으면, 각 열을 표준 편차로 나눈 뒤 PCA를 합니다.

정의 15.5 (표준화와 상관 행렬 PCA) D=diag⁡(C11,…,Cdd)D = \operatorname{diag}(C_{11}, \dots, C_{dd})라 할 때 표준화된 데이터 Z=XcD−1/2Z = X_cD^{-1/2}(각 열을 그 표준 편차로 나눔)의 공분산은
R=D−1/2 C D−1/2,Rjk=CjkCjjCkkR = D^{-1/2}\,C\,D^{-1/2}, \qquad R_{jk} = \frac{C_{jk}}{\sqrt{C_{jj}C_{kk}}}
로 상관 행렬(correlation matrix)이다. RR의 고유분해를 상관 PCA라 하며, RR의 대각은 모두 1이고 tr⁡R=d\operatorname{tr}R = d다. 상관 PCA는 각 변수의 단위(척도) 변경에 영향을 받지 않는다.
SIMULATOR

압력의 단위를 바꾸면 PC1이 어디로 가나

축은 각 변수의 표준 편차 단위로 그렸습니다
압력 단위
C (온도, 압력)—
PC1 적재 (온도, 압력)—
PC1 설명 비율—
—
해볼 것: ① 단위를 Pa로 두고 표준화를 끄면 PC1의 적재가 (0.00, 1.00)에 가깝습니다. "압력만 보는" 축이고, 설명 비율 100%는 숫자 크기 때문에 생긴 착시입니다. ② 표준화를 켜면 단위를 kPa·MPa·Pa로 바꿔도 PC1이 꼼짝하지 않습니다. ③ 표준화한 상태에서 ρ를 0에 가깝게 하면 두 고유값이 모두 1 근처가 되어 PC1이 뚜렷한 방향을 잃습니다. 상관이 없으면 요약할 '공통 움직임'도 없습니다. 모델: 온도 표준 편차 2 °C, 압력 표준 편차 1.5 kPa인 2차원 정규 분포, 표본 200개.
예제 15.3 (같은 데이터, 두 단위) 온도 표준 편차 2 °C, 압력 표준 편차 1.5 kPa, 상관 0.6이면 kPa 단위의 공분산은 C=[41.81.82.25]C = \begin{bmatrix}4 & 1.8\\ 1.8 & 2.25\end{bmatrix}이다. 고유값은 λ=6.25±1.752+4⋅1.822=6.25±4.002\lambda = \frac{6.25 \pm \sqrt{1.75^2 + 4\cdot1.8^2}}{2} = \frac{6.25 \pm 4.00}{2}, 즉 5.13과 1.12로 PC1이 82%를 설명한다. Pa 단위로 바꾸면 C=[4180018002250000]C = \begin{bmatrix}4 & 1800\\ 1800 & 2250000\end{bmatrix}이 되어 PC1은 거의 (0.0008,1.0000)(0.0008, 1.0000), 설명 비율은 99.99% 이상이다. 상관 행렬 R=[10.60.61]R = \begin{bmatrix}1 & 0.6\\ 0.6 & 1\end{bmatrix}은 두 단위에서 같고, 고유값 1.6과 0.4, PC1 = (1,1)/2(1, 1)/\sqrt2로 80%를 설명한다.
언제 표준화하나 변수들의 단위가 다르면 거의 언제나 표준화합니다. 반대로 모든 변수가 같은 단위이고 그 크기 자체에 뜻이 있으면(예: 같은 이미지의 픽셀 밝기, 같은 센서를 여러 위치에서 잰 값) 표준화하지 않는 편이 낫습니다. 표준화하면 거의 변하지 않는 픽셀의 잡음까지 큰 변수와 똑같은 무게를 얻기 때문입니다.

화이트닝: 공분산을 단위 행렬로

상관된 잡음을 서로 독립처럼 보이게 만들 수 있나

여러 센서의 잡음이 서로 상관되어 있으면, 거리를 잴 때 "흔한 방향으로의 차이"와 "드문 방향으로의 차이"를 똑같이 취급하는 것이 잘못입니다. 데이터를 변환해서 모든 방향의 분산을 1로, 공분산을 0으로 만들면 그다음부터는 평범한 유클리드 거리가 공정해집니다.

정리 15.6 (화이트닝) C=VΛVTC = V\Lambda V^{\mathsf T}이고 모든 λj>0\lambda_j > 0이면
z=Λ−1/2VT(x−μ)⟹Cov⁡(z)=I\mathbf{z} = \Lambda^{-1/2}V^{\mathsf T}(\mathbf{x} - \boldsymbol\mu) \quad\Longrightarrow\quad \operatorname{Cov}(\mathbf{z}) = I
PCA 회전 VTV^{\mathsf T} 뒤에 각 성분을 λj\sqrt{\lambda_j}로 나누는 것. 한 번 더 VV로 되돌려 돌린 WZCA=VΛ−1/2VT=C−1/2W_{\text{ZCA}} = V\Lambda^{-1/2}V^{\mathsf T} = C^{-1/2}은 원래 축과 가장 가까운 화이트닝(ZCA)이다.

증명. z=W(x−μ)\mathbf{z} = W(\mathbf{x} - \boldsymbol\mu)의 공분산은 WCWTWCW^{\mathsf T}다. W=Λ−1/2VTW = \Lambda^{-1/2}V^{\mathsf T}를 넣으면 Λ−1/2VTVΛVTVΛ−1/2=Λ−1/2ΛΛ−1/2=I\Lambda^{-1/2}V^{\mathsf T}V\Lambda V^{\mathsf T}V\Lambda^{-1/2} = \Lambda^{-1/2}\Lambda\Lambda^{-1/2} = I. ZCA는 여기에 직교 행렬 VV를 왼쪽에 곱했을 뿐이므로 VIVT=IV I V^{\mathsf T} = I. ∎

화이트닝한 공간에서의 거리 ∥z∥2=(x−μ)TC−1(x−μ)\lVert\mathbf{z}\rVert^2 = (\mathbf{x} - \boldsymbol\mu)^{\mathsf T}C^{-1}(\mathbf{x} - \boldsymbol\mu)를 마할라노비스 거리(Mahalanobis distance)의 제곱이라 합니다. 앞 절의 T2T^2는 kk개 성분만 남긴 마할라노비스 거리입니다. 점구름의 타원을 원으로 펴 주는 이 변환은 신호 처리의 잡음 백색화, 머신러닝의 입력 전처리, 독립 성분 분석(ICA)의 첫 단계로 쓰입니다.

x − μ (공분산 C) Vᵀ 주성분 점수 (공분산 Λ) Λ^−½ 화이트닝 (공분산 I) 한 번 더 V로돌리면 ZCAC^−½(x − μ)
그림 15-4. 화이트닝은 두 단계다. 주성분 방향이 좌표축과 겹치도록 돌리고(VTV^{\mathsf T}), 각 축을 그 표준 편차 λj\sqrt{\lambda_j}로 나눈다(Λ−1/2\Lambda^{-1/2}). 기울어진 타원이 단위 원이 된다. 원은 어떻게 돌려도 원이므로 화이트닝 변환은 회전 하나만큼 자유가 있고, 원래 축에 가장 가까운 선택이 ZCA다.
SIMULATOR

타원을 원으로: 화이트닝 한 단계씩

단계
지금 점들의 공분산—
노란 두 점의 유클리드 거리—
—
해볼 것: ① 단계를 차례로 눌러 공분산 표가 어떻게 바뀌는지 보세요. 회전 뒤에는 비대각이 0, 크기 맞춤 뒤에는 단위 행렬이 됩니다. ② 노란 점 두 개는 원래 공간에서 평균으로부터 비슷한 거리에 있지만, 하나는 흔한 방향, 하나는 드문 방향에 있습니다. 화이트닝 뒤의 거리(마할라노비스 거리)는 드문 쪽이 훨씬 멉니다. ③ ρ를 ±0.95로 하면 짧은 축이 아주 짧아 Λ^−½가 그 방향을 크게 늘립니다. 작은 고유값의 잡음도 함께 커지므로, 실무에서는 λ에 작은 값 ε을 더해 나눕니다. 모델: 2차원 정규 분포 표본 150개, 평균 (2, 1).

PCA가 놓치는 것

분산이 크면 중요한가

PCA는 단 하나의 기준, 분산으로 방향을 고릅니다. 그런데 데이터의 중요한 구조가 분산이 작은 방향에 있거나, 곧은 축으로 표현할 수 없는 곡선이거나, 점 하나의 이상값이 분산을 독차지한다면 어떻게 될까요?

세 가지 대표적인 함정이 있습니다.

SIMULATOR

PCA가 속는 세 가지 데이터

빨간 이상값을 끌어 보세요
데이터
PC1 설명 비율—
PC1 방향—
비교—
PC1 (전체 데이터)비교 축
—
해볼 것: ① '이상값'에서 빨간 점을 구름에서 멀리 끌고 가면 PC1(보라)이 그 점 쪽으로 돌아갑니다. 초록은 이상값을 뺀 PC1입니다. 점 하나가 150개를 이깁니다. ② '곡선'에서 재구성 점을 켜면 반달이 직선 하나로 납작해지면서 양 끝과 가운데가 같은 자리로 겹칩니다. ③ '두 무리'에서 PC1은 무리를 가르지 않는 방향입니다. 초록은 두 무리의 평균 차를 무리 안 공분산으로 보정한 판별 방향(LDA)입니다. 모델: 시드 고정 2차원 합성 데이터.

이 도구가 쓰이는 곳

"공분산의 고유벡터로 좌표를 바꾸고, 분산이 작은 축을 버린다"는 생각은 측정이 많은 거의 모든 분야에 있습니다.

핵심 정리

  1. 데이터 행렬은 행 = 표본, 열 = 변수. PCA는 언제나 평균을 뺀 XcX_c에서 시작한다. 중심화하지 않으면 흩어짐 대신 위치를 보게 된다.
  2. 공분산 행렬 C=1n−1XcTXcC = \frac{1}{n-1}X_c^{\mathsf T}X_c는 대칭·양의 준정부호이고, 어떤 단위 방향 u\mathbf{u}의 분산도 uTCu\mathbf{u}^{\mathsf T}C\mathbf{u}로 나온다.
  3. 주성분 = CC의 고유벡터. 레일리 몫 uTCu/uTu\mathbf{u}^{\mathsf T}C\mathbf{u}/\mathbf{u}^{\mathsf T}\mathbf{u}의 최댓값은 λ1\lambda_1이고 v1\mathbf{v}_1에서 얻는다. 주성분 좌표에서 공분산은 대각 행렬 Λ\Lambda다.
  4. 총분산 = 사영 분산 + 재구성 오차(피타고라스). 그래서 분산 최대화(호텔링)와 오차 최소화(피어슨)는 같은 문제이고, kk개 성분의 최소 오차는 λk+1+⋯+λd\lambda_{k+1} + \cdots + \lambda_d다.
  5. Xc=UΣVTX_c = U\Sigma V^{\mathsf T}이면 주성분은 VV의 열, λj=σj2/(n−1)\lambda_j = \sigma_j^2/(n-1), 점수는 UΣU\Sigma. 실제 계산은 조건수를 제곱하지 않는 SVD로 한다.
  6. 설명 분산 비율과 스크리 그림으로 kk를 고른다. 잡음이 크면 누적 비율 기준은 kk를 부풀린다.
  7. 단위가 다른 변수는 표준화(상관 행렬 PCA)한다. 화이트닝 Λ−1/2VT(x−μ)\Lambda^{-1/2}V^{\mathsf T}(\mathbf{x} - \boldsymbol\mu)은 공분산을 II로 만들고, 그 공간의 거리가 마할라노비스 거리다.
  8. PCA는 선형이고 분산만 본다. 곡선 구조, 이상값, "분산은 작지만 중요한 방향"을 놓칠 수 있다.

확인 퀴즈

Q1. PCA 전에 각 열의 평균을 빼는 가장 중요한 이유는?

중심화하지 않으면 "점들에 가장 가까운 원점 통과 직선"이 원점에서 평균을 향하는 방향이 되어 흩어짐과 무관한 축이 나온다. 분산을 1로 만드는 것은 표준화이고, XTXX^{\mathsf T}X는 중심화와 상관없이 언제나 대칭이다.

Q2. C=[5002]C = \begin{bmatrix}5 & 0\\ 0 & 2\end{bmatrix}일 때 단위 벡터 u=(0.6,0.8)\mathbf{u} = (0.6, 0.8) 방향의 사영 분산은?

uTCu=5(0.6)2+2(0.8)2=1.8+1.28=3.08\mathbf{u}^{\mathsf T}C\mathbf{u} = 5(0.6)^2 + 2(0.8)^2 = 1.8 + 1.28 = 3.08. 고유값들의 가중 평균(가중치 0.36, 0.64)이므로 2와 5 사이에 있다. 최댓값 5는 u=(1,0)\mathbf{u} = (1, 0)에서 나온다.

Q3. 3차원 데이터의 공분산 고유값이 6, 3, 1이다. 2차원 평면으로 요약할 때 최소 평균 제곱 재구성 오차(n − 1로 나눈 값)와 설명 분산 비율은?

정리 15.4의 kk차원 판: 남는 오차는 버린 고유값의 합 1, 설명 비율은 (6+3)/10=90%(6 + 3)/10 = 90\%. 사영 분산 9와 오차 1의 합은 총분산 10이다.

Q4. 중심화한 XcX_c(n=101n = 101)의 가장 큰 특이값이 σ1=20\sigma_1 = 20이다. PC1 점수의 분산은?

λ1=σ12/(n−1)=400/100=4\lambda_1 = \sigma_1^2/(n-1) = 400/100 = 4. 400은 XcTXcX_c^{\mathsf T}X_c의 고유값이고, 공분산은 그것을 n−1n-1로 나눈 것이다.

Q5. 온도(°C)와 압력(Pa)을 그대로 넣고 공분산 PCA를 했더니 PC1이 99.99%를 설명했다. 가장 알맞은 해석은?

Pa 단위의 압력은 분산이 매우 커서 공분산 행렬을 지배한다. 이 높은 설명 비율은 단위가 만든 착시다. 상관 행렬 PCA(표준화)는 단위 변경에 영향을 받지 않는다(정의 15.5).

Q6. 화이트닝 z=Λ−1/2VT(x−μ)\mathbf{z} = \Lambda^{-1/2}V^{\mathsf T}(\mathbf{x} - \boldsymbol\mu) 뒤의 공분산은? 그리고 ∥z∥2\lVert\mathbf{z}\rVert^2는?

공분산은 Λ−1/2VTCVΛ−1/2=I\Lambda^{-1/2}V^{\mathsf T}CV\Lambda^{-1/2} = I. 또 zTz=(x−μ)TVΛ−1VT(x−μ)\mathbf{z}^{\mathsf T}\mathbf{z} = (\mathbf{x} - \boldsymbol\mu)^{\mathsf T}V\Lambda^{-1}V^{\mathsf T}(\mathbf{x} - \boldsymbol\mu)이고 VΛ−1VT=C−1V\Lambda^{-1}V^{\mathsf T} = C^{-1}이다.

Q7. 다음 중 PCA의 PC1이 엉뚱한 방향을 가리키기 쉬운 경우가 아닌 것은?

같은 단위의 강한 선형 상관은 PCA가 가장 잘 요약하는 경우다(PC1 하나가 대부분을 설명). 나머지는 이상값(제곱 평균에 민감), 분산 ≠ 구별력, 비선형 구조라는 PCA의 대표적 한계다.

Q8. 이미지 12×12 = 144픽셀 60장에서 성분 4개로 압축한다. 평균과 적재까지 포함해 저장할 숫자는 모두 몇 개인가?

점수 60×460 \times 4, 적재(고유 패턴) 144×4144 \times 4, 평균 이미지 144144를 더하면 960개로 원본 8,640개의 약 11%다. 이미지 수가 많아질수록 적재와 평균의 몫은 작아지고 압축률은 k/dk/d에 가까워진다.