주성분 분석

[섬네일|오른쪽|중심점의 좌표가(1,3)이고, (0.878, 0.478)방향으로 3, 이와 수직한 방향으로 1의 표준편차를 가지는 [다변량 정규분포에 대한 주성분 분석. 화살표의 길이는 공분산행렬 고윳값의 제곱근에 해당하며, 고유 벡터의 끝점이 평균점에 위치한 채로 각 주성분의 방향을 나타내고 있다.]]

**주성분 분석**(主成分分析, Principal component analysis; PCA)은 고차원의 데이터를 저차원의 데이터로 환원시키는 기법을 말한다. 이 때 서로 연관 가능성이 있는 고차원 공간의 표본들을 선형 연관성이 없는 저차원 공간(**주성분**)의 표본으로 변환하기 위해 직교 변환을 사용한다. 데이터를 한개의 축으로 사상시켰을 때 그 분산이 가장 커지는 축을 첫 번째 주성분, 두 번째로 커지는 축을 두 번째 주성분으로 놓이도록 새로운 좌표계로 데이터를 선형 변환한다. 이와 같이 표본의 차이를 가장 잘 나타내는 성분들로 분해함으로써 데이터 분석에 여러 가지 이점을 제공한다. 이 변환은 첫째 주성분이 가장 큰 분산을 가지고, 이후의 주성분들은 이전의 주성분들과 직교한다는 제약 아래에 가장 큰 분산을 갖고 있다는 식으로 정의되어있다. 중요한 성분들은 공분산 행렬의 고유 벡터이기 때문에 직교하게 된다.

주성분 분석은 신호처리 분야에서는 이산 카루넨-뢰브 변환, 다변량 품질 관리에서는 호텔링 변환, 기계공학에서는 적합 직교 분해(POD), 선형대수학에서는 특잇값 분해 또는 고윳값 분해, 인자 분석, 심리측정학의 Eckart–Young 이론 (Harman, 1960) 또는 Schmidt–Mirsky 이론, 기상 과학의 실증 직교 함수(EOF), 소음과 진동의 실증적 고유 함수 분해(Sirovich, 1987)와 실증적 요소 분석(Lorenz, 1956), 준조화모드(Brooks et al., 1988), 스펙트럼 분해, 구조 동역학의 실증적 모델 분석 등으로 응용된다.

주성분 분석은 실제 고유 벡터 기반의 다변량 분석들 중 가장 간단한 방식이다. 만약 다변량 데이터 집합이 변수당 1개의 축이 있는 높은 차원의에서 보았을 때 단순히 좌표의 집합으로 보인다면, 주성분 분석은 이를 낮은 차원으로 끌어내려 일종의 그림자를 보고 분석할 수 있게 도와준다. 이는 가장 주요한 일부 요소들을 보여줌으로써 변환된 데이터의 차원수를 줄임으로써 끝난다.

주성분 분석은 인자 분석과 밀접한 관계를 갖고 있다. 인자 분석은 일반적으로 기저 구조에 대한 영역 한정적인 가정을 포함하고, 약간의 차이가 있는 행렬의 고유 벡터를 풀어낸다.

또한 주성분 분석은 정준상관분석(CCA)과도 관계가 있다. 주성분 분석이 하나의 데이터 집합의 변화를 제일 잘 설명하는 새로운 데카르트 좌표 시스템을 정의하는 반면 정준상관분석은 두 개의 데이터 집합간의 교차 공분산을 가장 잘 설명하는 좌표 시스템을 정의한다.

주성분 분석은 가장 큰 분산을 갖는 부분공간을 보존하는 최적의 선형 변환이라는 특징을 갖는다. 그러나 이산 코사인 변환과 같은 다른 방법에 비해 더 많은 계산시간을 요구하는 단점이 있다. 다른 선형 변환과 달리 주성분 분석은 정해진 기저 벡터를 갖지 않으며, 기저 벡터는 데이터의 특성에 따라 달라진다.

## 역사
주성분 분석은 역학의 주축정리에서 착안하여 1901년에 칼 피어슨이 처음 개발했으며, 1930년대에는 이 사실을 모르던 해롤드 호텔링에 의해 별도로 개발 및 명명되었다. 주성분 분석은 대부분 탐구 데이터 분석의 도구나 예측 모델을 만드는데 사용되었다. 공분산 (또는 연관성) 데이터 행렬을 각각의 속성에 대해 평균중심화(그리고 정규화 또는 Z-점수로 표준화)를 한 후에 행렬에 대해 고윳값 분해나 특잇값 분해를 하여 주성분 분석이 가능하다. 주성분 분석의 결과는 보통 인자 점수라고도 불리는 요소점수(특정 데이터 지점에 따른 변환된 변수 값)와 하중(요소 점수를 구하기 위해 각각의 표준화된 원래 변수가 곱해져야 한다는 것을 이용한 하중)을 가지고 논의된다.

## 개요
데이터 집합의 전체 평균이 0이라고 가정하면, (아닐 경우 평균을 데이터 집합에서 뺀다) 데이터 집합 *x*의 주성분 은 다음과 같이 정의된다.

:\mathbf{w}_1
 = \arg\max_{\Vert \mathbf{w} \Vert = 1} E\left\{ \left( \mathbf{w}^T \mathbf{x}\right)^2 \right\}
(arg max는 함수 f(x)의 값을 최대로 만드는 x를 가리킨다.)

*k*-1개의 주성분이 이미 주어져 있을 때 *k*번째 주성분은 앞의 *k*-1개 주성분을 뺌으로써 찾을 수 있다 :

:\mathbf{\hat{x}}_{k}
 = \mathbf{x} -
 \sum_{i = 1}^{k - 1}
 \mathbf{w}_i \mathbf{w}_i^T \mathbf{x}

그리고 이 값을 데이터 집합에서 뺀 다음 주성분을 새로 찾는다.

:\mathbf{w}_k
 = \arg\max_{\Vert \mathbf{w} \Vert = 1} E\left\{
 \left( \mathbf{w}^T \mathbf{\hat{x}}_{k}
 \right)^2 \right\}.

따라서 카루엔-뢰브 변환은 데이터 행렬 *X*의 특잇값 분해를 찾은 다음,

:\mathbf{X}=\mathbf{W}\mathbf{\Sigma}\mathbf{V}^T,

**X**를 *L*개의 특이 벡터, **W<sub>L</sub>**로 정의된 부분공간으로 사상시켜 부분 데이터 집합 **Y**를 찾는 것과 같다.

:\mathbf{Y}=\mathbf{W_L}^T\mathbf{X} = \mathbf{\Sigma_L}\mathbf{V_L}^T

**X**의 특잇값 벡터 행렬 **W**는 공분산 **C**=**XX<sup>T</sup>**의 고유 벡터 행렬 **W**와 동일하다.

:\mathbf{X}\mathbf{X}^T = \mathbf{W}\mathbf{\Sigma}^2\mathbf{W}^T

가장 큰 고윳값을 갖는 고유 벡터는 데이터 집합에서 가장 강한 상관성을 갖는 차원에 대응된다.

## 직관

주성분 분석은 각각의 축이 주요 요소들을 표현하는 *n*-차원의 타원면에 데이터를 맞추는 것으로 생각될 수 있다. 만약 타원면의 몇 개의 축이 작으면, 축에 따른 변화 또한 작을 것이다. 여기서 우리의 데이터 집합의 표현에서 작은 축과 그에 해당하는 주요 요소들을 생략함으로써 우리는 상응하는 작은 정보만을 잃을 수 있다.

타원면의 축을 찾기 위해, 먼저 각각의 변수의 평균을 데이터 집합에서 빼주어 원래의 데이터 주변에 중심을 두도록 해야만 한다. 그 뒤, 공분산 행렬의 데이터를 계산하고, 공분산 행렬의 고유 값과 그에 따른 벡터를 계산한다. 그러면 우리를 고유 벡터를 직교화해야 하고, 각각을 단위 벡터로 정규화해야 한다. 그것이 되면, 각각의 서로 직교된 단위 고유 벡터들은 데이터에 맞춰진 타원면의 축으로 해석될 수 있다. 각각의 고유 벡터가 표현하는 변화의 비율은 고유 벡터에 따른 고유 값을 모든 고유 값의 합으로 나누는 것으로 계산 가능하다.

이 과정은 데이터를 스케일링하는 것에 민감하다는 것과 최적의 결과를 얻기 위해 어떻게 스케일 하는 것이 최고인지에 대해서는 합의의 여지가 없다는 것에 주목해야 한다.

## 세부 사항

PCA는 수학적으로 직교 선형 변환으로 정의된다. 직교 선형 변환이란 어떤 데이터를 새로운 좌표계로 변환하는 것을 말한다. 데이터를 투사했을 때 가장 큰 분산이 첫 번째 좌표로 오고, 그 다음으로 큰 분산이 두 번째 좌표로 오고, 그 다음이 그 다음 좌표로 오는 식으로 할 수 있다. 여기서 첫 번째 좌표를 첫 번째 주성분이라고 부른다.

열 방향으로 0인 실증적 평균을 가진(각 열의 표본 평균이 0으로 이동됨) 어떤 한 데이터 행렬 **X**를 생각해보자. n개의 행이 각각 실험의 다른 반복을 나타내고, p개의 열이 특정 종류의 자료(특정 센서로 부터의 결과들)를 준다고 하자.
수학적으로 변환은 무게 및 *하중*의 p차원 벡터들의 집합 \mathbf{w}_{(k)} = (w_1, \dots, w_p)_{(k)} 로 정의된다. **X**의 각 행 벡터 \mathbf{x}_{(i)}를 새로운 주성분 *점수* 벡터\mathbf{t}_{(i)} = (t_1, \dots, t_p)_{(i)}로 매핑시킨다. 여기서, {t_{k}}_{(i)} = \mathbf{x}_{(i)} \cdot \mathbf{w}_{(k)}와 같다. **t**의 각각의 변수들은 **x**로부터 가장 큰 분산을 성공적으로 상속받은 데이터 집합이라고 할 수 있고, 각각의 하중 벡터 **w**는 단위벡터로 제한된다.

### 첫 번째 성분

첫 번째 하중 벡터 **w**(1)는 다음을 만족한다.
:\mathbf{w}_{(1)}
 = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{\arg\,max}}\,\left\{ \sum_i \left(t_1\right)^2_{(i)} \right\}
 = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{\arg\,max}}\, \sum_i \left(\mathbf{x}_{(i)} \cdot \mathbf{w} \right)^2 

이 식을 행렬 형태로 쓰면 아래와 같이 된다.
:\mathbf{w}_{(1)}
 = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{\arg\,max}}\, \{ \Vert \mathbf{Xw} \Vert^2 \}
 = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{\arg\,max}}\, \left\{ \mathbf{w}^T \mathbf{X}^T \mathbf{X w} \right\}

**w**(1)는 단위 벡터로 정의되었기 때문에 아래의 식도 만족한다.
:\mathbf{w}_{(1)} = {\operatorname{\arg\,max}}\, \left\{ \frac{\mathbf{w}^T\mathbf{X}^T \mathbf{X w}}{\mathbf{w}^T \mathbf{w}} \right\}

최대화될 수 있는 양은 레일리 지수로 생각할 수 있다. **X**T**X**와 같은 대칭 행렬에 대한 표준 결과는 **w**가 대응하는 고유 벡터일 때 몫의 최대 가능 값이 행렬의 가장 큰 고윳값인 것과 같다.
**w**(1)을 찾으면, 데이터 벡터 **x**(*i*)의 첫 번째 성분은 변환된 좌표에서 점수 *t*1(*i*) = **x**(*i*) ⋅ **w**(1)로 주어지거나 원래 변수에서 대응하는 벡터 {**x**(*i*) ⋅ **w**(1)} **w**(1)로 주어질 수 있다.

### 그 밖의 성분들

*k*번째 성분은 **X**로부터 첫 번째 *k*&nbsp;−&nbsp;1 주성분을 뺌으로써 찾을 수 있다. 식은 아래와 같다.
:\mathbf{\hat{X}}_{k} = \mathbf{X} - \sum_{s = 1}^{k - 1} \mathbf{X} \mathbf{w}_{(s)} \mathbf{w}_{(s)}^{\rm T} 

이러한 새로운 데이터 행렬로부터 아래와 같이 최대 분산을 추출하면 하중 벡터를 찾는 것이 가능하다.
:\mathbf{w}_{(k)} = \underset{\Vert \mathbf{w} \Vert = 1}{\operatorname{arg\,max}} \left\{ \Vert \mathbf{\hat{X}}_{k} \mathbf{w} \Vert^2 \right\} = {\operatorname{\arg\,max}}\, \left\{ \tfrac{\mathbf{w}^T\mathbf{\hat{X}}_{k}^T \mathbf{\hat{X}}_{k} \mathbf{w}}{\mathbf{w}^T \mathbf{w}} \right\}

이것이 괄호 안에 해당 고유 값들에 의해 주어진 양의 최댓값과 함께 **X**T**X**의 나머지 고유 벡터들을 주는 것으로 나타난다.
따라서 데이터 벡터 **x**(*i*)의 *k*번째 주성분은 변환된 좌표에서 점수 *t**k*(*i*) = **x**(*i*) ⋅ **w**(*k*)로 주어질 수 있다. 또는 **w**(*k*)가 **X**T**X**의 *k*번째 고유 벡터일 때, 원래 변수들의 공간에서 해당 벡터 {**x**(*i*) ⋅ **w**(*k*)} **w**(*k*)로 주어질 수 있다.
**X**의 전체 주성분 분해는 아래 식으로 주어질 수 있다.
:\mathbf{T} = \mathbf{X} \mathbf{W}
여기서 **W**는 **X**T**X**의 고유 벡터가 열로 이루어진 *p*×*p* 행렬이다.

### 공분산

**X**T**X**는 데이터셋 **X**의 실증적 샘플 공분산 행렬에 비례하는 것으로 인정될 수 있다.
데이터셋 이상의 두 개의 다른 주성분들 사이의 샘플 공분산 *Q*는 다음과 같이 주어진다.
:\begin{align}
Q(\mathrm{PC}_{(j)}, \mathrm{PC}_{(k)}) & \propto (\mathbf{X}\mathbf{w}_{(j)})^T \cdot (\mathbf{X}\mathbf{w}_{(k)}) \\
& = \mathbf{w}_{(j)}^T \mathbf{X}^T \mathbf{X} \mathbf{w}_{(k)} \\
& = \mathbf{w}_{(j)}^T \lambda_{(k)} \mathbf{w}_{(k)} \\
& = \lambda_{(k)} \mathbf{w}_{(j)}^T \mathbf{w}_{(k)}
\end{align}

**w**(*k*)의 고윳값 속성은 2번째 줄과 3번째 줄에서 쓰였다. 그런데 대칭 행렬의 고윳값에 상응하는 고유 벡터 **w**(*j*)와 **w**(*k*)는 직교하거나(고윳값들이 서로 다르다면), 직교화 될 수 있다(벡터들이 같은 반복적인 값을 공유한다면). 따라서 마지막 줄의 결과는 0이 된다. 데이터셋 이상의 두 개의 다른 주성분들 사이의 샘플 공분산은 존재하지 않는다.

주성분 변환을 특징짓는 또 다른 방법으로는 실증적 샘플 공분산 행렬을 대각선화하는 좌표로의 변환이 있다.

행렬 형태에서 원래 값들의 실증적 공분산 행렬은 다음과 같이 나타낼 수 있다.
:\mathbf{Q} \propto \mathbf{X}^T \mathbf{X} = \mathbf{W} \mathbf{\Lambda} \mathbf{W}^T

주성분들 사이의 실증적 공분산 행렬은 아래와 같다.
:\mathbf{W}^T \mathbf{Q} \mathbf{W} \propto \mathbf{W}^T \mathbf{W} \, \mathbf{\Lambda} \, \mathbf{W}^T \mathbf{W}
=  \mathbf{\Lambda} 

여기서 **Λ**는 **X**T**X**의 고유 값 *λ*(*k*)의 대각 행렬이다.
(*λ*(*k*) = Σ*i* *t**k*2(*i*) = Σ*i* (**x**(*i*) ⋅ **w**(*k*))2)

### 차원 축소

신뢰성 있는 변환 **T** = **X** **W**는 데이터 벡터 **x**(*i*)를 *p* 변수들의 원래 공간에서 데이터셋에 무상관인 *p* 변수들의 새로운 공간으로 매핑한다. 그러나 모든 주성분들이 유지되어야 하는 것은 아니다. 첫 번째 *L* 하중 벡터만을 사용하여 생성된 첫 번째 *L* 주성분들만을 유지하는 것으로 다음과 같은 생략적 변환을 줄 수 있다.
:\mathbf{T}_L = \mathbf{X} \mathbf{W}_L
여기서 **T**L은 현재 *L*개의 열뿐만 아니라 *n*개의 행도 가진다.
다시 말해, *p* × *L* 행렬 *W*의 열들이 역상관된 *L* 특징들(표현 *t*의 성분들)에 대한 직교 기저를 형성할 때, PCA는 선형 변환  t = W^T x, x \in R^p, t \in R^L을 학습한다.
오직 *L*개의 열을 가진 모든 변환된 데이터 행렬을 만듦으로써 이 점수 행렬이 보존된 원래의 데이터의 분산을 최대화하고, 총 제곱 재구성 오류 \|\mathbf{T}\mathbf{W}^T - \mathbf{T}_L\mathbf{W}^T_L\|_2^2 or \|\mathbf{X} - \mathbf{X}_L\|_2^2는 최소화할 수 있다.

섬네일|오른쪽
이러한 차원 축소는 고차원의 데이터셋들의 시각화 및 처리에 매우 유용한 단계가 될 수 있다.
예를 들어, *L*&nbsp;=&nbsp;2로 선택하고 오직 처음의 두개의 주성분들만 유지하는 것은 데이터가 가장 많이 확산된 고차원의 데이터셋을 통해 2차원 평면을 찾을 수 있다. 만약에, 데이터가 클러스터들을 포함하고 있으면 이 역시 크게 확산될 가능성이 높으므로, 결국 2차원 도표에서 가장 눈에 띄게 나뉜다. 반면에, 만약 데이터를 통해 두 개의 방향(또는 두개의 변수)이 임의로 선택된다면, 클러스터는 서로에게서 덜 떨어져 있을 것이고, 서로를 구분하지 못하게 상당히 겹쳐져 있을 것이다.

유사하게, 회귀분석에서는 허용된 설명변수의 수가 증가할수록, 다른 데이터셋으로의 일반화를 실패하면서, 모델을 과적합할 가능성이 커진다. 서로 다른 가능한 설명 변수들 사이에 강한 연관성이 있는 경우에는, 그것들을 몇 가지 주성분으로 줄이고 그것들에 대한 회귀를 실행하는 접근이 가능하다. 이 방법을 주성분 회귀라고 부른다.

또한 차원 축소는 데이터셋의 변수들의 노이즈가 클 때에도 적합하다. 만약 데이터셋의 각 열이 독립적이고 동일하게 분산되어 있는 가우시안 노이즈를 포함하고 있다면, **T**의 열은 유사하게 독립적이고 동일하게 분산되어 있는 가우시안 노이즈 또한 포함하고 있다(이러한 분포는 행렬 **W**의 영향 하에서 불변이고, 행렬 **W**는 좌표축의 고차원 회전으로 생각될 수 있다).
하지만 같은 노이즈 분산에 비해 처음 몇몇의 주성분들에 총 분산이 더 많이 집중되어 있을 때, 노이즈의 비례 효과는 덜해지고, 처음 몇몇의 주성분들이 더 높은 신호 대 잡음비를 가진다. 따라서 PCA는 많은 양의 신호를 차원 축소로 수집할 수 있는 처음 몇몇의 주성분으로 집중시키는 효과를 가질 수 있다. 반면, 이후의 주성분들은 노이즈에 지배될 수 있고 큰 손실없이 사라질 수 있다.

### 특잇값 분해

또한 주성분 변환은 또다른 행렬 인수 분해와 연관된다. 이를 특잇값 분해(SVD)라 하고 **X**의 특잇값 분해를 다음과 같이 나타낼 수 있다.
:\mathbf{X} = \mathbf{U}\mathbf{\Sigma}\mathbf{W}^T

여기서 **Σ**는 **X**의 특잇값이라 불리는 양수 *σ*(*k*)의 *n*×*p* 직각 대각 행렬이다. **U**는 *n*×*n* 행렬이고 그 열은 **X**의 왼쪽 특이 벡터라고 불리는 길이 *n*의 직교 단위 벡터이다. 그리고 **W**는 *n*×*n*행렬이고 그 열은 **X**의 오른쪽 특이 벡터라고 불리는 길이 *p*의 직교 단위 벡터이다.

이 인수분해의 관점에서, 행렬 **X**T**X**는 아래와 같이 쓰여질 수 있다.
:\begin{align}
\mathbf{X}^T\mathbf{X} & = \mathbf{W}\mathbf{\Sigma}\mathbf{U}^T \mathbf{U}\mathbf{\Sigma}\mathbf{W}^T \\
                       & = \mathbf{W}\mathbf{\Sigma}^2\mathbf{W}^T
\end{align}

**X**T**X**의 고유 벡터 인수분해와의 비교는 **X**의 특잇값 *σ*(*k*)가 **X**T**X**의 고윳값 *λ*(*k*)의 제곱근과 같다고 했을 때, **X**의 오른쪽 특이 벡터 **W**가 **X**T**X**의 고유 벡터와 같은 것으로 설정한다.

특잇값 분해를 이용하여 점수 행렬 **T**는 아래와 같이 쓰여질 수 있다.
:\begin{align}
\mathbf{T} & = \mathbf{X} \mathbf{W} \\
           & = \mathbf{U}\mathbf{\Sigma}\mathbf{W}^T \mathbf{W} \\
           & = \mathbf{U}\mathbf{\Sigma}
\end{align}
결국 **T**의 각 열은 해당 특잇값으로 곱해진 **X**의 왼쪽 특이 벡터 중 하나로 주어질 수 있다.

행렬 **X**T**X**형태를 가지지 않고 **X**의 특잇값 분해를 계산할 수 있는 효과적인 알고리즘이 존재한다. 따라서, 단지 소수의 성분만을 필요로 하지 않는 한, 현재 특잇값 분해의 계산은 데이터 행렬로부터 주성분 분석을 계산하는 표준적인 방법이다.

고유 분해와 같이, *n*×*L* 점수 행렬 **T**L은 오직 처음 L번째로 가장 큰 특잇값과 그것들의 특이 벡터만 고려하는 것으로 얻어질 수 있다.
:\mathbf{T}_L = \mathbf{U}_L\mathbf{\Sigma}_L = \mathbf{X} \mathbf{W}_L 

행렬 **M**의 절단이나 이런 방식으로 절단된 특잇값 분해를 사용한 **T**는 원래 행렬에 랭크 *L*인 가장 가까운 가능한 행렬이 되는 절단된 행렬을 생성한다.

## 더 생각해볼 것들
유클리드 공간의 주어진 점들에서, 첫 번째 주성분은 다차원 공간의 평균점을 지나는 선에 대응되며 이 선에서 점들 사이의 제곱 합이 최소화 된다. 두 번째 주성분은 모든 점들에서 첫 번째 주성분의 관계를 제거한 뒤, 첫 번째 주성분을 구할 때와 동일한 방식으로 얻어진다. 특잇값(\Sigma 행렬의 대각성분)들은 X^TX 행렬의 고윳값의 제곱근이다. 각각의 고윳값들은 "분산"의 정도에 비례하며 (보다 정확히는 다차원 공간의 평균점에서 점들 사이의 제곱 거리합) 이 값들은 고유 벡터와 관련되어 있다. 모든 고윳값들의 합은 다차원 공간의 평균점에서부터 모든 점들 사이 거리를 제곱한 것과 같다. PCA는 본질적으로 평균 근방의 점들을 주성분들과 정렬하기 위해 회전시킨다. 이것은 직교 변환을 이용해 첫 번째 몇 개의 차원으로 분산을 가능한한 크게 한다. 따라서 남아있는 차원의 값들은 작은 값을 갖는 경향이 있고 최소한의 정보 손실만으로 차원이 줄여질 것이다. PCA는 종종 이런 식으로 차원 축소를 위해 사용된다. PCA에 대해 특기할 점은 가장 큰 "분산"(위에 정의 했듯)을 가지는 부분공간을 유지하는 최적 직교 변환이라는 것이다. 그러나 이러한 장점의 이면에는 이산 코사인 변환이나 DCT로 알려진 DCT-II에 비해 높은 계산비용이 필요하다는 단점이 있다. 비선형 차원 축소 기술은 PCA보다 대체로 더 많은 계산을 요구한다.

PCA는 변수의 크기 조정에 민감하다. 만약 같은 분산을 갖는 두 개의 변수가 있고 이 둘에 양의 상관관계가 존재한다면, PCA는 45도 회전을 수반할 것이고 이 때 주성분에 대한 두 변수 각각의 가중치는 동일할 것이다. 그러나 동일한 상황에서 첫 번째 변수의 값들이 100배가 되면 첫 번째 주성분은 이 첫 번째 변수와 거의 같은 방향이 되고 두 번째 변수에는 매우 적은 영향만을 받게 된다. 반면 두 번째 성분은 거의 두 번째의 원래 변수들과 정렬된다. 이것은 서로 다른 변수들이 서로 다른 단위(기온, 질량 처럼)를 가지고 있을 때, PCA는 임의적인 분석방법이 될 수 있음을 시사한다. (온도의 단위로 섭씨를 쓰는지 화씨에 따라 다른 결과를 얻게 된다.) Pearson이 작성한 "On Lines and Planes of Closest Fit to Systems of Points in Space" – "in space"라는 제목의 최초 논문에서는 물리적인 유클리드 공간을 다루고 있어 이러한 문제점이 크게 드러나지 않는다. PCA를 덜 임의적이게 하는 방법 중 하나는, 각각의 변수들을 표준화시켜 모두 단위 분산을 갖게 하는 것이다. 다시 말해 PCA의 기저로 자기공분산 행렬이 아닌 자기상관관계 행렬을 사용하는 것이다. 그러나 이 방법은 신호공간의 모든 차원에서 값들의 변동을 단위 분산으로 압축(또는 팽창)시킨다.

평균 빼기(혹은 평균 중심화)는 PCA를 수행했을 때 첫 번째 성분이 최대 분산 방향을 나타내도록 보장해준다. 만약 평균 빼기가 수행되지 않으면 첫 번째 주성분은 데이터의 평균에 더 혹은 덜 대응되게 될 것이다. 평균 0은 데이터 근사의 평균 제곱 오차를 최소화하는 기저를 찾는데 필요하다.

PCA는 기상학에서 사용되는 경험직교함수와 동등하다.

선형 은닉층을 가지는 오토인코더 인공신경망은 PCA와 비슷하다. 수렴했을 때, 은닉층에서의 K개 뉴런의 가중치 벡터는 첫 K개의 주성분에 의해 스팬되는 공간의 기저를 형성한다. PCA와는 다르게, 이 방법은 반드시 직교하는 벡터를 만들어내지는 않는다.

PCA는 패턴 인식 분야에서 자주 사용되는 기본 방법 중의 하나다. 그러나 이것은 클래스 분리도에 최적화 되지는 않는다. 다른 방법으로 선형판별분석(Linear Discriminant Analysis)이 이 점을 고려하는 방법이다.

## 기호표와 축약어들

## 주성분분석의 특성과 한계점
### 특성

:***특성 1'':'''</big> 임의의 정수 ''q (1 ≤ q ≤ p )'' 대해, 직교 선형변환을 생각해보자.
::<math>y =\mathbf{B'}x</math>
:여기서 <math>y</math>는 ''q-element'' 벡터이며 <math>\mathbf{B'}</math> 은 ''(q × p)'' 행렬이다. <math>\mathbf_y = \mathbf{B'}\mathbf{\Sigma}\mathbf{B}</math>를 ''y''에 대한 분산-공분산 행렬이라 하자. 그러면 <math>\mathbf_y</math>의 [[대각합]] <math>\text{tr} (\mathbf{\Sigma}_y)</math>은 <math>\mathbf{B} = \mathbf{A}_q</math>일 때 최대화 된다. 이 때 <math>\mathbf{A}_q</math>는 <math>\mathbf{A}</math>의 첫 번째 ''q''개 열들로 구성된 행렬이다. <math>(\mathbf{B'}</math>는 <math>\mathbf{B})</math>의 transposition이다.

:<big>***특성 2*:*' 직교 변환을 다시 생각해보자.
::y = \mathbf{B'}x
:x, \mathbf{B}, \mathbf{A} 그리고 \mathbf{\Sigma}_y는 이전과 같이 정의된다. 그러면, \text{tr}(\mathbf{\Sigma}_y)은 \mathbf{B} = \mathbf{A}_q^*,일 때 최소화 된다. 이 때 \mathbf{A}_q^*는 \mathbf{A}의 마지막 *q*개 열로 구성되어있다.

이 특성의 통계적 함의는, 마지막 몇개의 주성분이 중요한 주성분을 제거한 이후에 구조화되지 않은채로 남아있지 않는다는 것이다. 이러한 마지막 주성분들은 가능한한 작은 분산을 가지므로 그들은 그들 나름대로 유용하다. 이들은 *x*의 원소들 사이에 거의 상수인 선형관계를 찾아내는데 도움이 될 수 있으며, *x*에서 변수들의 부분집합을 선택할 때, 또 이상점(outlier) 탐지에 있어 회귀에 유용하게 적용될 수 있다.

:**''특성3'':** (\Sigma의 스펙트럼 분해)
::\mathbf = \lambda_{1}\alpha_{1}\alpha_{1}' + \cdots + \lambda_{p}\alpha_{p}\alpha_{p}'

이것의 용례를 살펴보기 이전에, 우선 대각 원소들을 살펴보자.
:\text{Var}(x_j) = \sum_{k=1}^P \lambda_{k}\alpha_{kj}^2

이 결과의 주된 통계적 함의는 우리가 *x*의 모든 원소들의 결합된 분산들을 분해할 수 있을 뿐만 아니라, 공분산행렬 전체를 각 주성분으로부터 \lambda_{k}\alpha_{k}\alpha_{k}'로 분해할 수 있다는 것이다. 단조 감소하지는 않더라도 \lambda_{k}\alpha_{k}\alpha_{k}'는 *k*가 증가함에 따라 점점 작아지는 경향을 갖는다. \lambda_{k}\alpha_{k}\alpha_{k}'이 *k*가 증가함에 따라 감소할 때, 반대로 \alpha_{k}는 다음과 같은 제약조건 때문에 '같은 크기에 대해' 일정해지려는 경향이 있다: \alpha_{k}'\alpha_{k}=1, k=1,\cdots, p

### 한계점
위에서 기술했듯, PCA의 결과는 변수의 스케일링에 의존적이다. PCA의 스케일-불변한 형태도 개발된 바 있다.

PCA의 적용 범위는 식을 유도하는 과정에서 세웠던 몇 가지 가정들에 의해 제한이 된다.

### 주성분분석과 [[정보이론]]
차원 축소를 위해 사용된 PCA가 데이터가 가진 정보의 대부분을 보존한다는 주장은 실제를 오도하는 것이다. 실제로 신호 모델에 그 어떤 가정도 없다면 PCA는 차원이 축소될 때 손실되는 정보의 양을 줄여주는데 아무런 도움이 되지 못한다. 여기서 정보의 양은 정보 엔트로피를 이용해 측정된 값이다.

다음과 같은 가정 하에서,

:\mathbf{x}=\mathbf{s}+\mathbf{n}
즉, 데이터 벡터 \mathbf{x}가 의도한 정보가 담긴 신호 \mathbf{s}와 잡음 신호 \mathbf{n}의 합으로 표현될 때, PCA는 정보이론 관점에서도 차원축소를 위한 최적의 방법이라고 할 수 있다.

특히, Linsker는 \mathbf{s}가 가우시안이고 \mathbf{n}가 공분산 행렬이 단위행렬에 비례하는 가우시안일 때, PCA가 의도한 정보 \mathbf{s}와, 차원이 축소된 결과물 \mathbf{y}=\mathbf{W}_L^T\mathbf{x} 사이에 상호정보량(mutual information) I(\mathbf{y};\mathbf{s}) 가 최대화됨을 보였다.

만일 잡음이 여전히 가우시안이고 단위행렬에 비례하는 공분산행렬을 가지지만(다시 말해 \mathbf{n} 벡터의 요소들이 iid), 정보를 담고있는 신호 \mathbf{s}가 가우시안이 아니라면(일반적인 경우에 해당한다), PCA는 적어도 다음과 같이 정의된 *정보 손실*의 상계를 최소화 한다.

:I(\mathbf{x};\mathbf{s})-I(\mathbf{y};\mathbf{s}).

더불어 잡음 \mathbf{n}이 iid이고 최소한 정보를 담고 있는 신호 \mathbf{s}보다 더 가우시안을 따른다면(쿨백-라이블러 발산의 관점에서) PCA의 최적성은 역시 유지된다. 일반적으로는 상기 신호모델이 유지되더라도 잡음 \mathbf{n}가 의존적이 되는 순간, PCA는 정보이론적 최적성을 잃게된다.

## 공분산 방법을 이용한 PCA 계산
다음은 상관관계 방법과는 반대되는 공분산 방법을 이용한 PCA 계산을 기술한다. 그러나 이 방법은 표준적인 소프트웨어를 활용했을 때 특잇값 분해를 이용한 방법보다 더 낫다고 할 수는 없다는 점에 유의하자.

목표는 주어진 *p*차원의 데이터셋 **X**를 더 작은 차원 *L*을 갖는 다른 데이터셋 **Y**로 변환하는 것이다. 동등하게, 우리는 행렬 **X**의 Karhunen–Loève 변환(KLT) 행렬인 **Y**를 찾는 것이 목표이다.

: \mathbf{Y} = \mathbb{KLT} \{ \mathbf{X} \} 

### 데이터셋 구성

*p*개의 변수에 대한 관측결과를 담은 데이터 셋이 있다고 해보자. 우리는 이 데이터가 *p*보다 작은 *L*개의 변수만으로 표현될 수 있도록 데이터의 크기를 줄이고 싶어한다. 더불어 데이터가 *n*개의 벡터 \mathbf{x}_1 \ldots \mathbf{x}_n로 주어져 있다고 하자. 각각의 \mathbf{x}_i 들은 *p*개의 변수에 대한 하나의 관측결과 그룹에 해당한다. 데이터셋 행렬은 다음과 구성된다.

* \mathbf{x}_1 \ldots \mathbf{x}_n 들은 행벡터로 사용되며, 각각은 *p*개의 열로 이루어져 있다.
* 이 행벡터들을 하나의 단일 행렬 **X**로 묶어서 나타낸다. 이 행렬의 크기는 *n* × *p*가 된다.

### 경험평균 계산

* 각 *j* 차원마다의 경험평균을 계산한다. *j* = 1,&nbsp;...,&nbsp;*p*.
* 계산된 경험평균들을 *p* × 1 크기의 평균벡터 **u**의 *j*번째 요소로 둔다.

::u[j] = {1 \over n} \sum_{i=1}^n X[i,j] 

### 평균을 이용해 편차 계산
평균빼기는 데이터를 근사할 때의 평균제곱오차를 최소화하는 주성분기저를 찾을 때 핵심적인 단계이다. 따라서 데이터를 다음과 같이 평균중심화(평균을 0으로 만듦)해줘야 한다.
* 데이터 행렬 **X**의 각 행마다 평균벡터 **u**를 빼준다.
* 이렇게 평균이 빠진 데이터를 *n* × *p* 행렬 **B**에 저장한다.

::\mathbf{B} = \mathbf{X} - \mathbf{h}\mathbf{u}^{T} 
:: 여기서 **h**는 모든 원소의 값을 1로 갖는 *n* × 1 크기의 열벡터이다.
:::h[i] = 1 \, \qquad \qquad \text{for } i = 1, \ldots, n 

### 공분산 행렬 찾기

* *p* × *p* 크기의 경험공분산행렬 **C**를 계산한다. 이 행렬은 **B** 행렬의 외적값으로 계산할 수 있다.
::\mathbf{C} = { 1 \over {n-1} } \mathbf{B}^{*} \cdot \mathbf{B}
:여기서  *는 켤레전치 연산자이다. 만약 **B** 행렬의 모든 원소가 (대다수의 경우에서 처럼) 실수라면, "켤레전치"는 일반적인 전치와 같다.

* 외적은 벡터에 적용된다. 텐서의 경우에는 텐서곱을 사용해야 한다. 그러나 PCA에서의 공분산행렬은 사실 표본 벡터들간 외적의 합이다. 때문에 B*.B로 나타내질 수 있다. 보다 자세한 사항은 공분산행렬 부분을 참고하자.
* 공분산 계산을 위해 *N* 대신 *N* − 1로 나누는 이유는 베셀 보정 때문이다.

### 공분산 행렬의 고유 벡터와 고윳값 찾기

* 공분산행렬 **C**를 다음과 같이 대각화시키는 고유 벡터 **V**를 계산한다.

::\mathbf{V}^{-1} \mathbf{C} \mathbf{V} = \mathbf{D} 

: 여기서 **D**는 **C**의 고윳값을 담고 있는 대각행렬이다. 이 단계에선 고유 벡터와 고윳값을 계산하는 컴퓨터기반 알고리즘을 사용하면 된다. 이러한 알고리즘들의 대부분은 이미 R, MATLAB, Mathematica, SciPy, IDL (대화형 데이터 언어), GNU 옥타브, OpenCV 등과 같은 행렬 대수 시스템의 하위 컴포넌트로 구현되어있다.

* 행렬 **D**는 *p* × *p*크기의 대각행렬이며 다음과 같이 정의된다.
::D[k,l] = \lambda_k \qquad \text{for } k = l
: 이 때, \lambda_k는 공분산행렬 **C**의 *j*번째 고윳값이다.
::D[k,l] = 0 \qquad \text{for } k \ne l.
* 행렬 **V**는 *p*개의 열벡터를 담고 있는 *p* × *p* 크기의 행렬이다. 여기서 *p*개의 길이 *p*인 열벡터 각각은 공분산행렬 **C**의 고유 벡터들이다.
* 고윳값과 고유 벡터는 서로 짝지어서 정렬되어 있다. *j*번째 고윳값은 *j*번째 고유 벡터에 대응된다.

### 고유 벡터와 고윳값 재정렬하기
* 고유 벡터 행렬 **V**와 고윳값 행렬 **D**를 고윳값에 대해 내림차순으로 정렬한다.
* 정렬할 때 두 행렬 열들 사이의 짝 관계를 유지해야 한다.

### 각 고유 벡터의 누적 에너지값 계산

* 고윳값은 각 고유 벡터간 데이터의 에너지 분산을 나타내며, 고유 벡터는 데이터의 기저를 형성한다. *j*번째 고유 벡터에 대한 누적에너지 *g*는 1번째부터 *j*번째 고윳값들을 합한 에너지들의 합이다.

::g[j] = \sum_{k=1}^j D[k,k] \qquad \mathrm{for} \qquad j = 1,\dots,p 

### 고유 벡터의 부분집합을 기저벡터로 선택

* **V** 행렬의 첫 *L*개 열을 *p* × *L* 행렬 **W**로 저장한다:
:: W[k,l] = V[k,l] \qquad \mathrm{for} \qquad k = 1,\dots,p \qquad l = 1,\dots,L 
: 여기서,
::1 \leq L \leq p.

* **g** 벡터를 적절한 *L*값을 고르는 기준으로 사용한다. *g* 값이 적당히 높은 퍼센트 기준을 만족하게 하면서 가능한한 작은 *L*값을 선택하는 것이 목표이다. 예를 들어, 누적에너지 *g*가 어떤 임계치(예를 들면 아래와 같이 90퍼센트)를 갓 넘게 하는 가장 작은 *L*을 선택할 수 있다.
:: \frac{g[L]}{g[p]} \ge 0.9\, 

### 원본 데이터를 Z-점수로 변환 (선택적)

* 공분산행렬**C**의 주대각성분에 제급근을 취해 *p* × 1 크기의 경험 표준편차 벡터 **s**를 만든다. (스케일링 연산은 KLT와 교환법칙이 성립하지 않음에 유의해야 한다. 따라서 상관관계가 이미 제거된 분산 벡터인 **C**의 대각성분을 스케일 하는데 사용한다.)
:: \mathbf{s} = \{ s[j] \} = \{ \sqrt{C[j,j]} \} \qquad \text{for } j = 1, \ldots, p 
* *n* × *p* 크기의 Z-점수 행렬을 계산한다.
:: \mathbf{Z} = { \mathbf{B} \over \mathbf{h} \cdot \mathbf{s}^{T} }  (각 요소마다 나누어 준다.)
* 참고: 이 과정은 데이터의 분산에 대해 값들을 정규화하는 과정으로, 다양한 사례에 유용하게 적용되지만, PCA/KLT의 핵심적인 부분은 아니다.

### 데이터의 Z-점수를 새로운 기저로 투영

* 투영된 벡터는 다음 행렬의 각 열들에 해당한다.
:: \mathbf{T} =  \mathbf{Z} \cdot \mathbf{W} = \mathbb{KLT} \{ \mathbf{X} \}.
* **T** 행렬의 행들은 행렬 **X**의 행들에 담겨있는 데이터 벡터들의 Karhunen–Loeve 변환 (KLT)를 나타낸다.

## 공분산 방법을 이용한 PCA 추론

**X**는 열 벡터로 표현된 *d*차원 랜덤 벡터이고, 일반성의 손실 없이 **X**이 평균 0을 가진다고 가정하자.

우리는 **PX** 대각 공변 행렬을 가질 수 있도록 하기 위한 *d* × *d* 직교 변환 행렬 **P**를 찾으려 한다.
(**PX**는 모든 각각의 성분들이 상관관계를 가지지 않는 임의의 벡터이다.)

**P**가 유일하다고 가정하면 다음과 같은 빠른 계산이 가능하다.
:\begin{align}
\operatorname{var}(PX) &= \mathbb{E}[PX~(PX)^{\dagger}]\\
	&= \mathbb{E}[PX~X^{\dagger}P^{\dagger}]\\
	&= P~\mathbb{E}[XX^{\dagger}]P^{\dagger}\\
	&= P~\operatorname{var}(X)P^{-1}\\
\end{align}
즉, \operatorname{var}(X)가 P로 대각선화 가능한 경우에만 **P**를 찾는 것이 가능해진다.

var(**X**)이 음의 정부호 행렬이고, 따라서 어떤 단위 행렬에 의해 대각선화가 가능하다고 보장된다면, 이것은 매우 건설적이라고 할 수 있다.

### 반복적인 계산

고차원의 데이터의 실제 구현에서, 공분산 방법은 효율적이지 않기 때문에 거의 쓰이지 않는다.
첫 번째 주성분을 효율적으로 계산하는 한 방법은 아래의 의사 코드에서 보여진다.
데이터 행렬 는 평균 0을 가지고, 공분산 행렬은 계산하지 않는다.

  = a random vector of length 
 do  times:
        (a vector of length )
       
             
       }}
 return 

이 알고리즘은 의 계산, 정상화, 결과를 에 다시 배치하는, 단순히 효율적인 방법이다.
이는 공분산 행렬을 계산하는  연산을 하지 않는다.
은 일반적으로 적은 수의 반복()으로 의 첫 번째 주성분에 가까워진다.
(의 크기는 각 반복 이후로 더 커진다. 이 크기가 기계의 정밀도만큼 적은 양만큼 증가할 때 수렴된다고 볼 수 있다.)

이후의 주성분은 에서 성분 을 뺌으로써 계산할 수 있고, 이 알고리즘을 반복함으로써 그 다음 주성분을 찾을 수 있다.
하지만 만약 주성분의 수가 더 많이 요구된다면, 이러한 간단한 접근은 수치상으로 불안정하다. 왜냐하면 계산의 부정확함이 이후의 주성분의 추측에 부가적으로 영향을 끼치게 되기 때문이다.
좀 더 발전된 방법으로는 란초스 알고리즘에 밀접하게 연관된 것으로, 이 기본 아이디어에서 발전시킬 수 있다.

각 주성분에 대응되는 고윳값을 계산하는 한 방법은 주성분을 빼기 전후에 행과 중심간의 평균 자승 거리에서 차이를 측정하는 것이다.
제거된 성분과 대응하는 고윳값은 이 차이와 같다.

### NIPALS 방법

NIPALS는 비선형 반복 부분 최소 제곱법(Non-linear iterative partial least squares)를 나타내는 말이다.

오믹스 과학(예를 들어, 유전체학, 대사체학)에서 생성되는 것들과 같은 매우 고차원인 데이터셋에는 보통 처음 몇몇의 PC들을 계산하는 것만이 필요하다.
NIPALS 알고리즘은 **X**로부터 **t<sub>1</sub>**와 **w<sub>1</sub>**T을 계산하는 알고리즘이다.
외적 **t<sub>1</sub>w<sub>1</sub>**T은 잔여 행렬 **E<sub>1</sub>**을 남기면서, **X**에서 빠질 수 있다.
이것은 이후의 PC들을 계산하는 데에 쓰일 수 있다. 이는 공분산 행렬의 계산을 피함으로써 계산 시간을 엄청나게 감소시킬 수 있다.

하지만, 큰 데이터 행렬이거나 높은 열공선도를 가진 행렬은 NIPALS가 각 반복 단계에서 측정된 기계 정밀도의 한계로 인해 직교성의 손실을 겪는다.
각 반복 단계에서 이러한 직교성의 손실을 막기 위해, 그람슈미트(GS) 재직교화 알고리즘이 점수와 하중에 적용된다.

### 온라인/순차 추정

데이터가 일괄적으로 저장되지 않고 한 조각씩 도착하는 "온라인" 또는 "스트리밍" 상황에서는 연속적으로 업데이트되는 PCA 투영의 추정치를 만드는 것이 유용하다.

## PCA와 정성적 변수

PCA에서 흔히 정성적 변수를 추가 성분으로 소개한다.
예를 들어, 많은 정성적 변수가 식물에서 측정되는데, 이 식물들에 대해 정정적 변수는 식물이 속하는 종으로 사용가능하다.
이러한 데이터들은 정성적 변수에 대한 PCA를 받는다. 결과를 분석할 때, 주성분을 정성적 변수 종에 연결하는 것은 자연스러운 일이다.
이에 대해, 다음과 같은 결과가 생성된다.
* 계승면에서 다른 종들의 식별
* 계승면에서 같은 종에 속한 식물들의 중심의 표현
* 각 중심과 축에 대해 중심과 원점 간의 차이의 의미를 판단하기 위한 p 값

이러한 결과들은 *정성적 변수를 추가 성분으로 소개하는 것*이라 불린다.
이 과정은 Husson, Lê & Pagès 2009 and Pagès 2013에 자세하게 나와있다.

## 적용 사례
### 신경 과학

변형된 주성분분석은 신경과학분야에서 뉴런이 활동전위를 만들어낼 확률을 증가시키는 데 기여하는 자극의 구체적인 특성을 발견하는 데 이용되기도 한다. 이 기술은 스파이크-트리거드 공분산(Spike-triggered covariance) 분석으로 알려져 있다. 일반적인 적용 사례에서, 실험자는 (피험자에게 주는 감각 입력으로서, 또는 뉴런에 직접 주입되는 전류로서) 백색잡음을 자극으로 주고 뉴런활동의 결과로 만들어지는 활동전위와 스파이크의 변화를 기록한다. 아마도, 자극의 몇 가지 특징들이 뉴런의 활동이 더 왕성해지도록 만들 것이다. 이러한 특징들을 추출해내기 위해 실험자는 스파이크의 직전에 주어졌던 자극들의 집합(보통 100ms 단위로 값들을 일정 윈도우 안의 자극들을 이산화시킨다)인 *스파이크-트리거드 앙상블(Spike-triggered ensemble)*의 공분산행렬을 계산한다. 스파이크-트리거드 공분산 행렬과 *이전 자극 앙상블(prior stimulus ensemble)*(같은 길이의 윈도우에 담긴 이전 자극들)의 공분산 행렬의 차이의 고유 벡터들은 스파이크-트리거드 앙상블의 분산이 이전 자극 앙상블에서부터 가장 멀리 퍼지는 쪽을 향하게 된다. 구체적으로, 가장 큰 양수 고윳값에 대응되는 고유 벡터는 스파이크-트리거드 앙상블의 분산이 양의 방향으로 가장 크게 변하는 방향을 가리키게 된다. 이것은 스파이크를 만들어내는 자극의 변화 방향을 나타내므로, 적절한 자극 특징의 좋은 근사가 된다.

신경과학에서, 주성분분석은 뉴런의 활동전위 모양으로부터 특정 뉴런을 알아채는데 사용되기도 한다. 스파이크 정렬(Spike sorting)은 세포 외 기록 기술들이 거의 하나 이상의 뉴런의 신호들을 포착하기 때문에 중요한 과정이다. 스파이크 정렬을 할 때에는 먼저 활동전위 파형 공간의 차원을 줄인 뒤, 개별 뉴런들의 특정 활동전위에 클러스터 분석 기법을 적용시킨다.

## PCA와 [[K-평균 알고리즘]] (K-means clustering)의 관계

에서는, K-평균 알고리즘의 이완된 답(각 데이터의 클러스터의 번호들로 주어짐)은 PCA의 주성분으로 구할 수 있다고 주장한다. 다시 말해, 주방향에 의해 선형생성되는 부분공간은 클러스터 중심점으로 선형생성되는 부분공간과 동등하다는 것이다. 그러나, PCA가 K-평균 알고리즘의 유용한 이완이라는 것은 새롭게 밝혀진 결과가 아니었으며( 참조), 클러스터의 중심점들이 선형생성하는 부분공간이 주방향들에 의해 선형생성되는 부분공간이라는 주장에 대한 반례를 쉽게 찾을 수 있다.

## PCA와 [[요인 분석]] (Factor Analysis)의 관계

주성분분석은 원래 변수들의 선형결합으로 이루어지는 새로운 변수들을 만든다. 새롭게 만들어진 변수들은 서로 직교한다는 특성이 있다. 주성분들은 데이터의 클러스터들을 발견하는 데 사용될 수 있다. 주성분분석은 분산에 초점을 둔 방식으로, 전체 변수들의 분산을 재생성하며 각 주성분들은 변수의 공통적인 특성과 고유한 특성 모두를 반영하게 된다. 주성분분석은 일반적으로 데이터를 줄이는 목적으로 많이 활용되지만, 숨겨진 구조나 요인을 발견하는 목적으로는 잘 사용되지 않는다.

요인 분석은 변수들의 선형결합으로 결과가 나타난다는 점에서 주성분분석과 비슷하다. 그러나 주성분분석과는 달리, 요인 분석은 상관관계에 초점을 둔 방식으로 변수들 사이의 상관관계를 재생성한다. 여기서 얻어지는 요인들은 "변수들의 공통된 분산을 반영하지만, 변수 고유의 분산은 배제시킨다." 요인 분석은 데이터의 구조를 파악(숨겨진 구조나 요인들)하거나 인과관계를 모델링할 때 널리 사용된다.

## 대응 분석

**대응 분석(Correspondence Analysis)**은 Jean-Paul Benzécri
에 의해 개발되었으며 주성분분석과 개념적으로 비슷하다. 주성분분석과 다른점이 있다면, (음이 아닌) 데이터들을 스케일시켜, 행과 열이 동등하게 취급되도록 한다는 점이다. 대응분석은 주로 분할표(Contingency table)에 적용된다. 대응분석은 이 표와 연관된 카이제곱 통계량을 직교하는 요인들로 분해한다.
대응 분석은 서술하는 기법이기 때문에, 카이제곱 통계량이 적절하든 부적절하든 적용될 수 있다. 추세제거상호연관성분석(Detrended correspondence analysis)나 정규상호연관성분석(Canonical correspondence analysis)와 같은 대응 분석의 몇 가지 변형들도 있다. 한 가지 특별한 확장은 다중 상호연관성 분석(Multiple correspondence analysis)인데 이는 분류적 데이터를 위한 주성분 분석으로 볼 수도 있다.

## 일반화

### 비선형 일반화
섬네일|300px| 유방암 마이크로어레이 데이터 시각화를 위한 선형 주성분분석과 비선형 주변형체(Principal Manifolds)의 비교: a) 3차원으로 주성분분석을 했을 때 나타나는 노드들의 배치, 그리고 2차원의 주표면. 데이터셋의 배치가 곡선을 그리고 있어 2차원의 주평면에 적당히 그려지긴 힘들다; b) 점들의 밀집도를 함께 나타낸 2차원의 비선형 주평면 좌표계(ELMap2D)의 분포; b)와 같으나 2차원의 선형 주성분분석 변형체(PCA2D)를 나타낸다.
"기저" 유방암 부분형은 ELMap2D에 더 잘 나타나고, 분포의 몇몇 특징들도 PCA2D와 비교해 더 나은 모습을 보여준다.
주변형체(Principal manifold)는 엘라스틱맵(Elastic map) 알고리즘에 의해 생성된다. 이 데이터는 공공의 목적을 위해 사용될 수 있다. 소프트웨어는 비영리적인 목적에 대해 무료로 이용 가능하다.

비선형 차원 축소를 위한 최신 방법들 중 대다수는 주성분분석과 K-평균 알고리즘에서 이론적/알고리즘적 기원을 찾을 수 있다. Pearson의 본래 아이디어는 데이터 점들에 "가장 잘 들어맞는" 직선(혹은 평면)을 찾는 것이었다.
**주곡면과 변형체**는 주성분분석을 일반화하고, 주성분분석의 기하학적 해석을 확장하는데 자연스러운 기하학적 뼈대가 된다. 엘라스틱맵(Elestic map)알고리즘과 추측지분석(Principal geodesic analysis)를 참고해보자. 주성분분석의 또 다른 일반화는 커널 주성분분석이며, 정부호(positive definite) 커널을 사용하는 커널 힐버트공간에서 주성분분석을 수행하는 것에 해당한다.

### 다중선형 일반화
다중선형 부분공간 학습에서, 주성분분석은 텐서 표현에서 특징을 직접 추출해내는 다중선형주성분분석(Multilinear PCA; MPCA)으로 일반화된다. MPCA는 텐서의 각 축에서 반복적으로 주성분분석을 수행함으로써 풀 수 있다. 얼굴 인식, 걸음걸이 인식 등에 적용된 바 있으며 비상관 MPCA, 비음(음수가 아닌) MPCA, 그리고 강인한 MPCA 등으로 확장된다.

### 고차
*N*-way 주성분분석은 Tucker 분해, PARAFAC, 다중요인분석, 공관성분석, STATIS, DISTATIS 등과 같은 모델로 수행될 수 있다.

### 강인성 - 가중 주성분분석

주성분분석이 (제곱오차를 최소화하는 관점에서) 수학적으로 최적의 방법인 것은 사실이나, 큰 오차를 만들어내는 데이터의 이상점(outlier)에 민감하다. 따라서 주성분분석을 수행하기에 앞서 이상점들을 제거하는 것이 일반적이다. 그러나, 어떤 상황에서는 이상점을 검출해내기 쉽지 않을 수 있다. 예컨대 상관관계 클러스터링과 같은 데이터 마이닝알고리즘에서, 각 데이터의 클러스터 할당과 이상점 여부를 사전에 확인할 수 없다. **가중 주성분분석**에 기반을 둔 주성분분석의 확장판 은, 추정되는 적합성에 따라 데이터마다 가중치를 다르게 두어 알고리즘의 강인성을 높인다.

### 낮은 [[계수 (선형대수학)|계수]]와 희소 행렬의 분해를 이용한 강인한 PCA

강인한 주성분분석은 심하게 손상된 관측결과에 대해서도 잘 동작하는, 통계적 주성분분석의 변형판이다.

### 희소 PCA

주성분분석의 주된 단점 중 하나는, 주성분들이 보통 모든 입력 변수들의 선형결합으로 나타난다는 점이다. 희소 주성분분석(Sparse PCA)는 몇 개 변수들만의 선형결합으로 주성분을 나타냄으로써 이러한 단점을 극복한다.

## 같이 보기

* 인자 분석 (factor analysis)
* 회귀 분석
* 분산 분석
* 베이즈 통계학

## 참고 문헌
* Jolliffe, I. T. (2002). *Principal Component Analysis,* second edition Springer-Verlag. .

## 각주

분류:통계학
분류:선형대수학
분류:행렬 분해
분류:차원 축소