10 · 연속 잠재 변수
많은 데이터 집합은 원 공간의 차원보다 낮은 차원의 매니폴드에 가깝게 놓인다. 잠재 변수를 연속적으로 표현하는 모델로 데이터의 내재적 정보를 추출할 수 있다.

10.1 주성분 분석
- 큰 이미지에 작은 숫자를 임의 위치·각도로 삽입하면 자유도가
(수직·수평·회전)이라, 데이터의 내재적 차원intrinsic dimensionality은 이다. 주성분 분석principal component analysis; PCA은 가장 단순한 연속 잠재 변수 모델로, 차원 감소·압축·특징 추출·시각화에 쓰인다. PCA는 두 방식으로 정의된다: (1) 분산이 최대가 되는 주 부분공간principal subspace으로의 직교 투영, (2) 평균 투영 제곱 오류의 최소화. 두 정의는 같은 결과를 준다.


그림 10.1·10.2 · (왼쪽) 숫자를 임의 위치·각도로 삽입해 만든 인공 데이터. (오른쪽) 주 부분공간(자주색)은 투영(녹색)의 분산을 최대화하고 투영 오류(청색)를 최소화한다.
10.1.1 최대 분산 공식화
- 단위 벡터
에 투영한 데이터 의 분산은 이다( 는 데이터 공분산). 제약 하에 라그랑주 승수로 최대화하면
즉

그림 10.3 · 확률적 PCA의 생성적 관점. 잠재 변수
실습 · PCA (최대 분산 = 최대 고유벡터)
데이터 공분산
import numpy as np
rng = np.random.default_rng(0)
A = np.array([[2.0, 0.0], [1.3, 0.7]])
X = (rng.standard_normal((1000, 2)) @ A.T) + [1.0, -2.0]
Xc = X - X.mean(0); S = Xc.T @ Xc / len(X) # 공분산
w, V = np.linalg.eigh(S); idx = np.argsort(w)[::-1]; w = w[idx]; V = V[:, idx]
u1 = V[:, 0] # 제1주성분
print("고윳값:", np.round(w, 4).tolist())
print("제1주성분 u1 =", np.round(u1, 3).tolist())
print(f"투영 분산 u1ᵀSu1 = {u1@S@u1:.4f} (= λ1 = {w[0]:.4f})")
print(f"분산 설명 비율 = {w[0]/w.sum():.3f}")10.1.2 최소 오류 공식화
- 정규직교 기저
( )로 을 표현하고, 첫 개 기저로 근사할 때의 평균 제곱 오류는
이를 정규직교 제약 하에 최소화하면 다시
10.2 확률적 주성분 분석
- 확률적 주성분 분석probabilistic PCA은 PCA를 선형 가우시안 잠재 변수 모델의 최대 가능도 해로 표현한다. 잠재 변수 사전 분포와 조건부 분포를 두면
이고
이며
10.2.1 최대 가능도 주성분 분석
이고, · 의 최대 가능도 해는 닫힌 형태로 구해진다.

그림 10.4 · 확률적 PCA의 방향성 그래프. 각 관측
실습 · 확률적 PCA 최대가능도
공분산
import numpy as np
rng = np.random.default_rng(1)
D, M, N = 5, 2, 2000
Wtrue = rng.standard_normal((D, M)); Z = rng.standard_normal((N, M))
X = Z @ Wtrue.T + 0.3*rng.standard_normal((N, D)) + rng.standard_normal(D)
Xc = X - X.mean(0); S = Xc.T @ Xc / N
lam, U = np.linalg.eigh(S); idx = np.argsort(lam)[::-1]; lam = lam[idx]; U = U[:, idx]
sig2 = lam[M:].mean() # σ²_ML = 버린 고윳값 평균
WML = U[:, :M] @ np.diag(np.sqrt(np.maximum(lam[:M]-sig2, 0)))
C = WML @ WML.T + sig2*np.eye(D) # 복원 공분산
print(f"σ²_ML = {sig2:.4f} (버린 고윳값 평균)")
print(f"‖C - S‖_max = {np.abs(C-S).max():.4f} (주변 공분산 복원 오차)")
print("상위 M개 고윳값:", np.round(lam[:M], 3).tolist())10.2.2 주성분 분석에서의 EM 알고리즘
- 완전 데이터 로그 가능도의 기댓값을 최대화하는 EM으로도 확률적 PCA를 학습한다. E 단계에서 사후 통계량을, M 단계에서 매개변수를 갱신한다.
고윳값·고유벡터를 직접 구하지 않아 고차원에서 효율적이고, 누락된 값도 다룰 수 있다.






그림 10.5 · PCA를 위한 EM. (a) 데이터와 실제 주성분. (b) 초기 부분공간. (c)~(f) M·E 단계를 번갈아 갱신하며 수렴한다.
실습 · PCA를 위한 EM
E 단계(
import numpy as np
rng = np.random.default_rng(1)
D, M, N = 5, 2, 2000
Wtrue = rng.standard_normal((D, M)); Zt = rng.standard_normal((N, M))
X = Zt @ Wtrue.T + 0.3*rng.standard_normal((N, D)) + rng.standard_normal(D)
mu = X.mean(0); Xc = X - mu; S = Xc.T @ Xc / N
lam, U = np.linalg.eigh(S); U = U[:, np.argsort(lam)[::-1]]
W = rng.standard_normal((D, M)); sig2 = 1.0
for it in range(100): # EM 반복
Minv = np.linalg.inv(W.T@W + sig2*np.eye(M))
Ez = Xc @ W @ Minv.T # E[z_n]
Ezz = N*sig2*Minv + Ez.T@Ez # Σ E[z zᵀ]
W = (Xc.T@Ez) @ np.linalg.inv(Ezz) # M 단계
sig2 = (np.sum(Xc**2) - 2*np.sum((Ez@W.T)*Xc) + np.trace(Ezz@(W.T@W)))/(N*D)
Qem, _ = np.linalg.qr(W) # EM 부분공간
cos = np.linalg.svd(Qem.T @ U[:, :M], compute_uv=False) # 주각 코사인
print(f"σ² 수렴값 = {sig2:.4f}")
print("EM vs PCA 부분공간 주각 코사인:", np.round(cos, 4).tolist(), "(1이면 일치)")10.2.3 베이지안 주성분 분석
- 주 부분공간 차원
을 데이터로부터 정하려면 베이지안 접근이 필요하다. 의 각 열에 정밀도 로 조절되는 독립 가우시안 사전 분포를 두고(증거 근사evidence approximation), 를 주변화한 가능도를 최대화해 를 반복 추정한다.
불필요한 방향은

그림 10.6 · 베이지안 PCA의 그래프 모델.
10.3 커널 주성분 분석
- 커널 주성분 분석kernel PCA은 커널 트릭으로 PCA를 비선형으로 일반화한다. 특징 공간
의 공분산 고유벡터 를 대입하면, 특징 공간을 직접 다루지 않고 그램 행렬 의 고윳값 문제로 환원된다.
정규화 조건은


그림 10.7 · 커널 PCA. 원 데이터 공간(왼쪽)이 비선형 변환

그림 10.8 · 가우시안 커널 PCA. 선들은 각 주성분 투영값이 상수인 윤곽선이다.
실습 · 커널 PCA (비선형 분리)
동심원 데이터에 가우시안 커널 PCA를 적용합니다. 커널 행렬을 중심화하고
import numpy as np
rng = np.random.default_rng(3)
def ring(r, n):
t = rng.uniform(0, 2*np.pi, n); rr = r + 0.08*rng.standard_normal(n)
return np.c_[rr*np.cos(t), rr*np.sin(t)]
X = np.vstack([ring(1.0, 150), ring(3.0, 150)]); y = np.r_[np.zeros(150), np.ones(150)]
N = len(X); one = np.ones((N, N))/N
d2 = ((X[:, None, :]-X[None, :, :])**2).sum(2)
K = np.exp(-d2/(2*1.5**2)) # 가우시안 커널 (σ=1.5)
Kc = K - one@K - K@one + one@K@one # 커널 중심화
lam, al = np.linalg.eigh(Kc); idx = np.argsort(lam)[::-1]; al = al[:, idx]
proj = Kc @ al[:, 0] # 제1 커널 주성분
m0, m1 = proj[y==0].mean(), proj[y==1].mean(); thr = (m0+m1)/2
acc = max(np.mean((proj>thr)==(y==1)), np.mean((proj<thr)==(y==1)))
print(f"제1 커널 주성분 — 내부 원 평균={m0:+.3f}, 외부 원 평균={m1:+.3f}")
print(f"제1 성분만으로 두 원 분리 정확도={acc:.1%} (선형 PCA로는 불가능)")연습문제
문제 10.1
투영 분산을
풀이
투영 분산
양변에
즉
문제 10.2
풀이
가우시안성 — 가우시안 확률 변수의 아핀 변환은 가우시안이다(선형 결합의 특성 함수가 다시 가우시안 형태). 평균과 공분산은 기댓값의 선형성으로
따라서
경우별 논의 — 공분산
: 가 완전 행 계수( )이면 인 비퇴화 차원 가우시안이다(차원 감소·투영). : 가 가역이면 전단사 변환으로 비퇴화 차원 가우시안이다. : 이라 이 특이(계수 부족)해진다. 는 차원 공간 안의 차원 부분공간에 갇힌 퇴화 가우시안degenerate Gaussian이 되어 정규 밀도가 존재하지 않는다.