포스트

PCA와 LDA가 헷갈릴 때 보는 선형대수: 고유벡터부터 차원축소까지

PCA와 LDA의 차이는 한 문장으로 정리된다. PCA는 데이터 전체의 분산을 최대한 보존하는 축을 찾고, LDA는 같은 클래스는 모으면서 다른 클래스는 멀어지는 축을 찾는다. 이 차이를 이해하려면 벡터, 기저, 고유벡터, 공분산이 어떻게 연결되는지만 잡으면 된다.

PCA와 LDA는 어떤 기준으로 고를까?

두 방법 모두 데이터를 새로운 축에 투영하지만 최적화하는 기준과 label 사용 여부가 다르다. 차원축소 뒤 결과를 시각화하는 데서 끝내지 말고 정보 손실과 downstream 성능을 원본 feature와 비교해야 한다.

더 긴 강의가 필요하면 AI를 위한 선형대수, 기하학적 직관은 영상 자료를 함께 볼 수 있다.

벡터와 행렬은 무엇을 표현하나

벡터는 크기와 방향을 가진 순서 있는 값의 묶음이다.

\[x=[1,2,3]\in\mathbb{R}^3\]

행렬은 여러 벡터를 모은 배열이면서, 벡터를 다른 공간으로 바꾸는 선형 변환으로 볼 수 있다. 행렬곱은 순서에 따라 결과가 달라 일반적으로 \(AB\ne BA\)다.

자주 쓰는 형태는 다음과 같다.

  • 전치행렬 \(A^T\): 행과 열을 바꾼다.
  • 항등행렬 \(I\): 곱해도 대상을 바꾸지 않는다.
  • 대각행렬: 대각선 밖의 값이 0이다.
  • trace \(Tr(A)\): 정방행렬 대각 원소의 합이다.

선형방정식은 벡터 내적으로 짧게 표현할 수 있다.

\[a_1x_1+a_2x_2+\cdots+a_nx_n=b\] \[a^Tx=b\]

여러 재료 벡터에 계수를 곱해 더하는 것을 linear combination이라 한다. 그 조합으로 만들 수 있는 모든 벡터의 집합이 span이다. 따라서 방정식의 해가 있는지는 목표 벡터가 재료 벡터의 span 안에 있는가와 연결된다.

선형 독립과 기저가 중요한 이유

벡터 집합의 선형 조합이 0이 되는 계수가 모두 0뿐이면 선형 독립이다. 한 벡터가 나머지 벡터의 조합으로 만들어진다면 선형 종속이다.

기저(basis)는 두 조건을 동시에 만족한다.

  1. 벡터들이 선형 독립이다.
  2. 그 벡터들이 공간 전체를 span한다.

예를 들어 다음 집합은 \(\mathbb{R}^3\)의 표준 기저다.

\[\{(1,0,0),(0,1,0),(0,0,1)\}\]

기저를 바꾼다는 것은 같은 데이터를 다른 좌표축으로 표현한다는 뜻이다. PCA와 LDA도 결국 목적에 맞는 새 축을 골라 그 위에 데이터를 투영한다.

두 벡터의 내적이 0이면 서로 직교(orthogonal)한다. 직교하면서 각 길이가 1이면 orthonormal이다. 직교하는 축은 중복된 방향 정보를 줄여 새 좌표계를 해석하기 쉽게 만든다.

고유벡터는 변환 뒤에도 방향이 남는 축이다

행렬 \(A\)로 변환해도 방향은 같고 크기만 \(\lambda\)배가 되는 벡터 \(x\)를 고유벡터라고 한다.

\[Ax=\lambda x\]

fig

\(\lambda\)는 고유값이다. 자세한 그림은 Eigenvalues and eigenvectors에서도 확인할 수 있다.

정방행렬의 고유값 분해는 다음 흐름으로 읽으면 된다.

  1. \(det(A-\lambda I)=0\)을 만족하는 고유값을 구한다.
  2. 각 고유값에 대응하는 고유벡터를 구한다.
  3. 고유벡터를 열로 모은 행렬을 \(V\), 고유값 대각행렬을 \(D\)라 하면 \(A=VDV^{-1}\)로 나타낸다.

모든 행렬이 같은 방식으로 분해되는 것은 아니다. 원문에서 다루지 않은 직사각행렬까지 확장하려면 SVD를 별도로 살펴봐야 한다.

PCA는 분산이 큰 방향을 남긴다

PCA는 클래스 라벨을 사용하지 않고 데이터의 분산을 가장 많이 보존하는 직교 축을 찾는다.

fig1

먼저 각 feature에서 평균을 빼 중심을 원점으로 옮긴다.

\[X'=X-m\]

그다음 공분산 행렬을 만든다.

\[C=\frac{X'^TX'}{n}\]

대각 원소는 각 feature의 분산, 나머지 원소는 feature 쌍의 공분산이다. 공분산 행렬의 고유벡터는 데이터가 퍼진 축을, 고유값은 그 축의 분산 크기를 나타낸다.

PCA 순서는 다음과 같다.

  1. 데이터를 중심화하고 공분산 행렬을 구한다.
  2. 공분산 행렬을 고유값 분해한다.
  3. 고유값이 큰 순서로 고유벡터를 정렬한다.
  4. 필요한 차원 수만큼 축을 골라 \(X\)를 투영한다.

가장 큰 고유값의 축을 남기면 투영 뒤에도 분산을 많이 보존한다. 그러나 “분산이 크다”와 “예측에 중요하다”는 같은 말이 아니다. 클래스 구분에 중요한 작은 변화가 버려질 수 있으므로, PCA 결과만 보고 분류 성능이 좋아진다고 단정하면 안 된다.

LDA는 클래스 사이 간격을 키운다

LDA는 라벨을 이용해 클래스 내부 분산은 작고 클래스 사이 분산은 큰 축을 찾는다.

fig2

두 클래스의 평균을 \(m_1,m_2\)라고 하고, 클래스 내부 scatter를 다음처럼 구한다.

\[S_i=\sum_{x\in w_i}(x-m_i)(x-m_i)^T\] \[S_w=S_1+S_2\]

클래스 사이 scatter는 평균 차이로 표현한다.

\[S_b=(m_1-m_2)(m_1-m_2)^T\]

찾고 싶은 방향 \(w\)는 클래스 사이 분산은 크게, 내부 분산은 작게 만드는 방향이다.

\[J(w)=\frac{w^TS_bw}{w^TS_ww}\]

이를 풀면 다음 고유값 문제와 연결된다.

\[S_w^{-1}S_bw=\lambda w\]

계산 흐름은 평균 계산 → \(S_w\)와 \(S_b\) 계산 → 고유값 분해 → 필요한 축 선택 → 데이터 투영 순서다. 수식 전개는 PCA/LDA 개념 자료에서 이어서 볼 수 있다.

선택 기준은 목적에서 출발하면 된다. 라벨 없이 압축하거나 시각화하려면 PCA, 라벨을 이용해 클래스 분리를 강조하려면 LDA를 검토한다. 둘 다 원래 정보를 일부 버리는 투영이므로, 축을 줄인 뒤에는 설명된 분산이나 분류 성능을 실제 데이터로 다시 확인해야 한다.

PCA를 적용하기 전에 무엇을 확인하나

Feature마다 단위와 범위가 크게 다르면 분산이 큰 단위가 주성분을 지배할 수 있다. 어떤 중심화, 스케일링을 적용했는지 training 데이터 기준으로 기록하고 validation, test에는 같은 변환을 사용한다. 전체 데이터를 미리 이용해 전처리하면 평가 정보가 섞일 수 있다.

공분산 행렬의 shape와 feature 수를 확인하고 고유값을 큰 순서로 정렬한다. 선택한 축이 서로 다른 방향을 이루는지, 투영 결과의 차원이 의도와 맞는지 작은 배열로 검증한다. 고유벡터의 부호가 바뀌어도 같은 축을 나타낼 수 있으므로 그림 방향만으로 구현 실패를 단정하지 않는다.

축 수는 시각화를 위해 2개로 고정하는 선택과 압축 품질을 위한 선택이 다르다. 누적 설명 분산과 downstream 모델 성능, 저장, 계산 비용을 함께 본다. 가장 큰 두 축에 class가 겹쳐 보인다고 원래 공간에서도 분리 불가능하다고 결론 내리지 않는다.

LDA에서 label과 클래스 분포를 어떻게 다루나

LDA는 각 class 평균과 class 내부 산포, class 사이 산포를 사용하므로 label 오류와 작은 class의 영향이 직접 들어간다. Class별 샘플 수와 산포를 먼저 보고, training split에서만 투영 축을 학습한다. Validation label로 축을 정하면 평가가 낙관적으로 바뀐다.

같은 class를 모으고 다른 class를 벌리는 기준이 실제 분류 목적과 맞는지 본다. Class가 심하게 겹치거나 내부에 여러 subgroup이 있으면 단순 선형 투영으로 충분하지 않을 수 있다. 예쁜 2차원 그림보다 독립 데이터의 분류 결과가 중요하다.

축 수에도 class 수와 데이터 rank에서 오는 한계가 있다. 무조건 원하는 차원만큼 유효한 판별축이 생긴다고 가정하지 않고 계산 결과의 고유값과 수치 안정성을 확인한다.

PCA와 LDA를 공정하게 비교하는 실험

같은 training, validation split, 같은 원본 feature와 downstream classifier를 사용한다. PCA와 LDA가 각각 어느 데이터를 보고 축을 배웠는지 기록하고, 투영 차원도 비교 목적에 맞게 정한다. LDA가 label을 쓴다는 차이를 숨긴 채 단순 그림만 비교하지 않는다.

평가에는 원본 feature baseline을 포함한다. 차원축소로 속도나 메모리가 줄었는지, 전체와 class별 성능이 어떻게 변했는지 본다. 실패 샘플이 특정 class나 작은 분산 방향에 몰리는지도 확인한다.

새 샘플에는 training에서 구한 평균, scale, 투영 행렬을 그대로 적용한다. 매 batch마다 PCA를 다시 계산하면 좌표계가 달라져 저장된 모델과 비교할 수 없다. 이 변환 순서를 하나의 pipeline으로 관리해야 재현 가능하다.

함께 읽으면 이해가 이어지는 글

자주 묻는 질문

PCA는 class label을 사용하나요?

사용하지 않습니다. 데이터 전체의 공분산에서 분산이 큰 방향을 찾아 투영합니다. Label을 이용해 클래스 사이를 벌리는 목적은 LDA와 다릅니다.

고유값이 큰 PCA 축은 무엇을 뜻하나요?

그 고유벡터 방향으로 데이터가 더 크게 퍼져 있음을 뜻합니다. 큰 고유값의 축부터 선택하면 전체 변동을 더 많이 보존할 수 있습니다.

PCA나 LDA를 적용하면 분류 성능이 항상 좋아지나요?

보장되지 않습니다. 차원을 줄이며 정보가 사라질 수 있으므로 설명된 분산, validation 성능과 class별 오류를 원본 feature 기준과 비교해야 합니다.

THE END / OPSOAI

여기까지 읽었습니다

핵심 장면을 한 번 더 떠올려 보세요. 이해가 남았다면 이 책은 제 역할을 다했습니다.

다른 책 고르기
표지 1

키와 좌우 스와이프를 지원합니다. 읽던 페이지는 이 기기에 저장됩니다.

CONTENTS

이 책의 목차

    11개 장 16 분읽는 시간