PCA, LDA, SVD, NMF

이재관·2022년 1월 24일
0

Machine Learning

목록 보기
5/5

PCA(Principal Component Analysis)

가장 대표적인 차원 축소 기법으로 PCA는 여러 변수간에 존재하는 상관관계를 이용해 주성분(Principal Component)을 추출해 차원을 축소하는 기법으로 PCA로 차원을 축소할 경우 기존 데이터의 정보가 유실이 최소화 된다.

PCA는 가장 높은 분산을 가지는 데이터의 축을 찾아 이 축으로 차원을 축소하는데 이것이 PCA의 주성분이 된다.

PCA는 가장 큰 변동성(Variance)을 기반으로 첫 번째 벡터 축을 생성하고 두 번째 축은 이 벡터 축에 직각이 되는 벡터(직교 벡터)를 축으로 한다. 세번째 축은 다시 두 번째 축과 직각이 되는 벡터를 설정하는 방식으로 축을 생성한다. 이렇게 생성한 벡터 축에 원본 데이터를 투영하면 벡터 축의 개수 만큼의 차원으로 원본 데이터가 차원 축소된다.

PCA, 즉 주성분 분석은 이처럼 원본 데이터의 피처 개수에 비해 매우 작은 주성분으로 원본 데이터의 총 변동성을 대부분 설명할 수 있는 분석법이다.

선형대수의 관점에서 해석하자면 입력 데이터의 공분산 행렬(Covariance Matrix)을 고유값 분해하고 이렇게 구한 고유 벡터에 입력 데이터를 선형 변환하는 것이다. 이 고유 벡터가 PCA의 주성분 벡터로서 입력 데이터의 분산이 큰 방향을 나타낸다. 고윳값(eigenvalue)는 고유 벡터의 크기를 나타내며 동시에 입력 데이터의 분산을 나타낸다.

선형 변환은 특정 벡터에 행렬 A를 곱해 새로운 벡터로 변환하는 것을 의미한다. 이것을 특정 벡터를 하나의 공간에서 다른 공간으로 투영하는 개념으로 볼 수도 있으며 이 경우 이 행렬을 바로 공간으로 가정할 수 있는 것이다.

보통 분산은 한 개의 특정한 변수의 데이터 변동을 의미하지만 공분산은 두 변수 간의 변동을 의미한다. 예를들어 사람 키 변수를 X, 몸무게 변수를 Y라고 하면 공분산 Cov(X,Y)>0은 X(키)가 증가할 때 Y(몸무게)도 증가함을 의미한다.
공분산 행렬은 여러 변수와 관련된 공분산을 포함하는 정방형 행렬이다.

고유 벡터는 행렬 A를 곱하더라도 방향이 변하지 않고 그 크기만 변하는 벡터를 지칭한다. 즉 Ax = ax(A:행렬, x:고유벡터, a:스칼라값)이다. 이런 고유 벡터는 여러 개가 존재하며 정방 행렬은 최대 그 차원 수만큼의 고유 벡터를 가질 수 있다.

공분산 행렬은 정방행렬이며 대칭행렬이다. 정방행렬은 열과 행이 같은 행렬을 말하며 정방행렬 중에서 대각 원소를 중심응로 원소 값이 대칭되는 행렬 즉 A의 전치행렬과 A가 동일한 행렬을 대칭행렬이라고한다. 공분산 행렬은 개별 분산값을 대각 원소로 하는 대칭 행렬이다. 대칭행렬은 항상 고유 벡터를 직교 행렬로(orthogonal matrix)로 고유값을 정방 행렬로 대각화할 수 있다.

PCA의 아이디어: 입력 데이터의 공분산 행렬이 고유벡터와 고유값으로 분해될 수 있으며 분해된 고유벡터를 이용해 입력 데이터를 선형 변환 하는 방식임

수행 과정:
1) 입력 데이터 세트의 공분산 행렬을 생성함
2)공분산 행렬의 고유벡터와 고유값을 계산함
3)고유값이 가장 큰 순으로 K개(PCA 변환 차수만큼) 고유벡터를 추출함
4)고유값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터를 변환함

LDA(Linear Discriminat Analysis)

선형 판별 분석법으로 불리며 PCA와 유사하게 입력 데이터 세트를 저차원 공간에 투영해 차원을 축소하는 기법이지만 차이점은 LDA는 지도학습의 분류(Classification)에서 사용하기 쉽도록 개별 클래스(결정값, target)를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소한다.
PCA는 입력 데이터의 변동성의 가장 큰 축을 찾았지만 DLA는 입력 데이터의 결정값 클래스를 최대한으로 분리할 수 있는 축을 찾는다.

LDA는 특정 공간상에서 클래스 분리를 최대화하는 축을 찾기 위해 클래스간 분산(between-class scatter)과 클래스 내부 분산(within-class scatter)의 비율을 최대화하는 방식으로 차원을 축소한다. 즉 클래스 간 분산은 최대한 크게 가져가고 클래스 내부의 분산은 최대한 작게 가져가는 방식이다.

LDA의 수행 과정은 PCA와 유사하나 가장 큰 차이점은 공분산행렬이 아니라 클래스간 분산과 클래스 내부 분산 행렬을 생성하여 그것에 기반해 고유벡터를 구하고 입력 데이터를 투영한다.

SVD(Singular Value Decomposition)

SVD도 PCA와 유사한 행렬 분해 기법을 사용하지만 PCA는 정방행렬(행과 열의 크기가 동일한 행렬)만을 고유벡터로 분해할 수 있지만 SVD는 정방행렬 뿐만아니라 행과 열의 크기가 다른 행렬에도 적용할 수 있다. 일반적으로 SVD는 mxn크기의 행렬A를 다음과 같이 분해한다.
A=UΣVt
SVD는 특이값 분해로 불리며 행렬U와 V에 속한 벡터는 특이벡터(singular vector)이며 모든 특이 벡터는 서로 직교하는 성질을 가니다. Σ는 대각 행렬이며 행렬의 대각에 위치한 값만 0이 아니고 나머지에 위치한 값은 모두 0이다. Σ이 위치한 0이 아닌 값이 행렬 A의 특이값이다. SVD는 A의 차원이 mxn일 때 U의 차원이 mxm. Σ의 차원이 mxn, Vt의 차원이 nxn으로 분해된다.

일반적으로 Σ의 비대각인 부분과 대각원소 중에 특이값이 0인 부분도 모두 제거된 Σ에 대응되는 U와 V원소도 함께 제거해 차원을 줄인 형태로 SVD를 적용한다. 이렇게 컴팩트한 형태로 SVD를 적용하면 A의 차원이 mxn일때 U의 차원을 mxp,Σ의 차원을 pxp, Vt의 차원을 Pxn으로 분해한다.

Truncated SVD는 Σ의 대각원소 중에 상위 몇 개만 추출해서 대응하는 U와 V의 원소도 함께 제거해 더욱 차원을 줄인 형태로 분해하는 것이다.

NMF(Non-Negative Matrix Factorization)

NMF는 Truncated SVD와 같이 낮은 랭크를 통해 근사(Low-Rank Approximation)방식의 변형이다. NMF는 원본 행렬 내의 모든 원소 값이 모두 양수가 보장될 경우 두 개의 양수 행렬로 분해하는 것을 말한다.

profile
안되면 될 때까지

0개의 댓글