PCA 정의

PCA는 기존의 변수를 일차 결합하여 서로 선형 연관성이 없는 새로운 변수, 즉 주성분(principal component, PC)들을 만들어 낸다. 이때 계산은 주로 행렬의 고윳값 분해 또는 특이값 분해(SVD)를 사용한다. 첫 번째 주성분 PC1이 원 데이터의 분포를 가장 많이 보존하고, 두 번째 주성분 PC2가 그 다음으로 원 데이터의 분포를 많이 보존한다. 예를 들어, PC1, PC2, PC3가 원 데이터의 분포(성질)의 약 90%를 보존한다면, 10% 정도의 정보는 잃어버리더라도, 합리적인 분석에 큰 무리가 없으므로, PC1, PC2, PC3만 택하여 3차원 데이터로 차원을 줄일 수 있다. 이 경우 계산과 시각화가 용이하여 데이터를 쉽게 분석할 수 있다.

PCA의 기하학적 의미

PCA는 데이터의 분산(variance)을 최대한 보존하면서 서로 직교하는 새 기저(축)를 찾아, 고차원 공간의 표본들을 선형 연관성이 없는 저차원 공간으로 projection하는 기법

row-wise vector vs column-wise vector

  • row-wise vector: 행에 데이터(n), 열에 특성변수(P)가 위치한 행렬
  • column-wise vector: 열에 데이터(n), 행에 특성변수(P)가 위치한 행렬
  • PCA를 유도하는 과정에서 X는 column-wise로 간주한다.

Covariance Matrix

  • X: (p by n matrix: p: # of variables, n: # of records)
  • COV(X) = $\frac{1}{n}(X - \overline{X})(X - \overline{X})^{T}$
  • X는 column-wise 이므로 $\overline{X}$의 각 Column은 변수들의 평균으로 채워져 있음
  • $(X - \overline{X})$ 가 p x n 차원이고 $(X - \overline{X})^{T}$가 n x p 차원이므로 COV(X)는 P x P 차원임
  • COV(X)는 대칭행렬임
  • COV(X) = $\frac{1}{n}(X - \overline{X})(X - \overline{X})^{T}$ = $\Sigma$이라고 하자

사영(projection)이란?

  • 한 벡터 $\vec{b}$를 다른 벡터 $\vec{a}$에 사영시킨다는 것은 벡터 $\vec{b}$로부터 벡터 $\vec{a}$에 수직인 점까지의 길이를 가지며 벡터$\vec{a}$와 같은 방향을 갖는 벡터를 찾는다는 것을 의미

$$(\vec{b}-p\vec{a})^{T}\;\vec{a} = 0 ⇒ \vec{b}^{T}\vec{a} - p\vec{a}^{T}\vec{a} = 0 ⇒ p = \frac{\vec{b}^T\vec{a}}{\vec{a}^{T}\vec{a}}$$

$$\therefore \vec{x} = p\vec{a} = \frac{\vec{b}^{T}\vec{a}}{\vec{a}^{T}\vec{a}}\vec{a} \; (if \; \vec{a} \; is \; unit \; vector)$$

$$p = \vec{b}^{T}\vec{a}    ⇒ \vec{x} = p\vec{a} = (\vec{b}^{T}\vec{a})\vec{a}$$

Data centering

  • 각 변수의 평균을 0으로 바꿔주는 것
  • $즉, X 대신 (X - \overline{X})$를 쓰는 것
  • 만약 X를 이미 centering 한 것으로 간주하면 COV(X) = $\frac{1}{n}XX^{T}$이 된다.
  • PCA를 수행하기 전에 데이터는 사전에 centering 된 것으로 간주한다. (즉, $\overline{x}_{i} = 0 \; , i=1,2,....,p$)

선형변환

  • PCA는 변수가 p개, 관측치가 n개 있는 데이터 X(p x n)로부터 새로운 변수 $z_{i}$를 만드는 과정으로 모든 특성변수를 선형결합하여 새로운 $z_{i}$를 만들게 된다.
  • 여기서 $\vec{x_i}$는 행렬X의 i번째 변수에 해당하는 열벡터(n x 1)이다. 또한 $\vec{\alpha_{i}}는$ (p x 1)열벡터이고 $\vec{\alpha_{i}}^{T}X$의 값인 $\vec{z_{i}}$ 는 (n x 1 )열벡터 (1차원) 이다.

$$ \vec{z_{1}}= \alpha_{11}\vec{x_{1}} + \cdots + \alpha_{1p}\vec{x_{p}} = \vec{\alpha_{1}}^{T}X \\ \vec{z_{2}}= \alpha_{21}\vec{x_{1}} + \cdots + \alpha_{2p}\vec{x_{p}} = \vec{\alpha_{2}}^{T}X \\ \vdots \\ \vec{z_{p}}= \alpha_{p1}\vec{x_{1}} + \cdots + \alpha_{pp}\vec{x_{p}} = \vec{\alpha_{p}}^{T}X $$

  • 이를 기하학적으로 본다면 $\vec{z_{i}}$는 X를 $\vec{\alpha_{i}}$ (p x 1)라는 새로운 축에 사영시킨 결과물이라고 말할 수 있다.
  • 즉, PCA는 X의 분산을 최대로 보존하는 새로운 차원 $\vec{z_{i}}$를 k개(단, k < p ) 찾아서 X를 k개의 $\vec{\alpha_{i}}$로 각각 정사영시킨 결과물을 새로운 변수로 하여 P차원을 k 차원으로 줄인 것임

PCA의 목적

  • PCA의 목적은 행렬 x의 분산을 최대한 보존하는 것임. 따라서 $z_i$의 분산 또한 최대화 되어야 한다.

$$ MAX_{\alpha_{i}} \; (var(z_{i})) = MAX_{\alpha_{i}}(var(\vec{\alpha_{i}}X)) \\=MAX_{\alpha_{i}}(\vec{\alpha_{i}}^{T}var(X)\vec{\alpha_{i}}) = MAX_{\alpha_{i}}(\vec{\alpha_{i}}^{T}\Sigma\vec{\alpha_{i}})
$$

  • 위식을 만족하는 $\alpha_{i}$는 무수히 많음. 사실 $\alpha_{i}$의 크기를 무작정 키우기만 해도 $z_{i}$의 분산은 높일 수 있음. 때문에 아래와 같은 제약식을 둔다

$$ \parallel \alpha_{i} \parallel \; = \vec{\alpha_{i}}^{T}\vec{\alpha_{i}} \; = 1 $$

by 라그랑지안

$$ L = \vec{\alpha_{i}}^{T}\Sigma\vec{\alpha_{i}} \; - \lambda_{i}(\vec{\alpha_{i}}^{T}\vec{\alpha_{i}}-1) $$

$$ \frac{\partial L}{\partial \vec{\alpha_{i}}} = \;\Sigma\vec{\alpha_{i}} \;-\lambda_{i}\vec{\alpha_{i}} \; = 0 $$

  • 이는 고유벡터(eigenvector)에 정의에 의해 $\alpha_{i}$는 공분산행렬 $\Sigma$의 고유 벡터를 의미하고 $\lambda_i$는 이에 대응하는 $\Sigma$의 고유값이 됨
  • 따라서 X의 분산을 최대화하는 $\alpha_{i}$는 X의 공분산행렬 $\Sigma$의 고유벡터임
  • Q) x의 공분산 행렬 $\Sigma$은 P x P의 비특이행렬(non-singular matrix)임. 따라서 고유벡터, 고유값이 p개 존재함. 그렇다면 어떤 고유벡터가 분산을 가장 최대화할까?

$$ var(z_{i}) = \vec{\alpha_{i}}^{T}\Sigma\vec{\alpha_{i}} \; = \vec{\alpha_{i}}^{T}\;\lambda_{i} \;\vec{\alpha_{i}} \\ = \lambda_i \; \vec{\alpha_{i}}^{T}\vec{\alpha_{i}} \; = \lambda_{i}\\ (\because \; \vec{\alpha_{i}}^{T}\vec{\alpha_{i}} = 1) $$

  • $\lambda_{i}$는 X의 공분산행렬 $\Sigma$의 고유벡터 $\vec {\alpha_{i}}$에 대응되는 고유값(eigen value)임. 따라서 분산을 가장 최대화 하는 공분산행렬의 고유벡터는 공분산 행렬의 고유값중 가장 큰 값의 고유값에 대응되는 고유벡터임

새로운 축들의 무상관성(uncorrelated)

  • pca에서 데이터의 각 변수들은 평균이 0으로 centering되어있다고 가정하고 있음.

$$ \Sigma \; = cov(X) = \frac{1}{n-1}XX^{T} \; \propto XX^{T} $$

  • $\Sigma$의 고유벡터들을 각각의 열벡터들로 하는 행렬을 $\alpha$라 하고, $\alpha$의 각각의 열벡터에 대응하는 고유값을 대각성분으로하고 나머지는 0인 대각행렬을  $\Lambda$ 라고할 때 다음이 성립한다.

$$ \Sigma \alpha = \Lambda \alpha \\ \therefore \Sigma = \alpha\Lambda \alpha^{T} $$

$\sum$는 대칭행렬이므로 다음과 같이 정리할 수 있다

$$ \Sigma ^{T} = (\alpha^{-1})\Lambda \alpha^{T}\\ = \Sigma = \alpha\Lambda \alpha^{-1} $$

$$ \therefore \alpha^{-1} = \alpha^{T}\\ => \alpha^{T}\alpha = I $$

따라서, $\alpha_{i}^{T}\alpha_{j} = 0 \;( if \; i \neq j)$ , $\alpha_{i}^{T}\alpha_{j} = 1 \;( if \; i = j)$

  • $var(\alpha_{i}^{T}X + \alpha_{j}^{T}X)$ = $var(\alpha_{i}^{T}X)$ + $var(\alpha_{j}^{T}X)$ = $var(z_{i})$ + $var(z_{j})$
  • V는 $\Sigma$의 고유벡터들을 각각의 열벡터들로 하는 행렬이므로 PCA에 의해 변환된 좌표축들은 uncorrelated가 됨
  • 따라서 원 데이터의 특성변수들이 상관관계가 크더라도 PCA에 의해 변환된 변수들은 상관관계가 없음

얼마나 많은 principal components를 선택해야 합리적일까

  • total variance ( $\frac{1}{n}XX^{T}$ ) = trace($\frac{1}{n}XX^{T}$)
  • 그런데 $\Sigma = \frac{1}{n}XX^{T}$는 (p x p) non-singular matrix이므로 tr($\frac{1}{n}XX^{T}$) = $\lambda_1 + \lambda_2 + ... + \lambda_p$
  • 따라서 X의 공분산행렬 $\Sigma$의 총 분산의 합은 공분산행렬 $\Sigma$의 고유값들의 합 ($\lambda_1 + \lambda_2 + ... + \lambda_p$)과 같다.
  • 또한 if i $\neq$j 일 때, $z_i 와 z_j$는uncorrelated되어 있으므로 var($z_i + z_j$) = $var(z_i)$+ $var(z_j)$ = $\lambda_{i}$ + $\lambda_{j}$
  • $\frac{var(z_{1}+...+ z_{k})}{total- variance(\Sigma)}$ = $\frac{var(z_{1})+var(z_{2})+ \ldots + var(z_{k})}{\lambda_{1} + \lambda_{2} + \ldots \lambda_{p}}$ = $\frac{\lambda_{1} + \lambda_{2} + \ldots \lambda_{k}}{\lambda_{1} + \lambda_{2} + \ldots \lambda_{p}}$ (단, k < p) 에서 전체 데이터의 분산 중 보존되는 정도를 통해 principal components의 수 k 를 구한다
  • 일반적으로 누적 분산의 합 그래프를 통해 분산의 합의 증가 기울기가 무뎌지는 곳(elbow point)의 k 값을 principal components 의 수로 결정한다

PCA의 단점

  • PCA는 통계모델에서 시작했기 때문에 데이터의 분포가 Gaussian 분포를 가정함. 따라서 Gaussian분포를 따르지 않거나 multimodel Gaussian 분포를 따를 경우 PCA의 결과물이 유용하지 못함
    • 대안: 커널 PCA, LLE(Local Linear Embedding)
  • PCA는 범주 정보를 고려하지 않고 오직 데이터가 가진 분산을 최대한 보존하는 방법론이기 때문에 target의 범주 정보가 주어져있을 때, 분류 성능을 향상시키는 모델은 아님.
    • 대안: Fisher의 LDA(Linear Discriminant Analysis) - 두 범주간의 구분을 잘 할 수 있는 축을 찾아 사영을 하는 방법은 Fisher의 LDA, Partial Least Square(PLS)

데이터 복원

                  X    (p x n) - >               $\alpha_i^{T}$X     (1 x p)(p x n)               - >              $\alpha_{i}\alpha_{i}^{T}$X       (p x 1)(1 x p)(p x n)

  • 값이 완벽하게 복원되지는 않음. 재구축 오차가 생김
  • 재구축 오차를 사용하여 이상치 탐지에서 많이 사용됨

PCA 알고리즘 요약

  1. 데이터 정규화(mean centering)
  2. 기존 변수의 covariance matrix 계산
  3. covariance matrix로부터 eigenvalue 및 이에 대응되는 eigenvector를 계산
  4. eigenvalue 및 이에 대응되는 eigenvector를 순서대로 나열
  5. 정렬딘 eigenvector를 토대로 기존 변수를 변환

$$ \vec{z_{1}}= \alpha_{11}\vec{x_{1}} + \cdots + \alpha_{1p}\vec{x_{p}} = \vec{\alpha_{1}}^{T}X \\ \vec{z_{2}}= \alpha_{21}\vec{x_{1}} + \cdots + \alpha_{2p}\vec{x_{p}} = \vec{\alpha_{2}}^{T}X \\ \vdots \\ \vec{z_{p}}= \alpha_{p1}\vec{x_{1}} + \cdots + \alpha_{pp}\vec{x_{p}} = \vec{\alpha_{p}}^{T}X $$

  1. 누적 분산의 증가 기울기가 무뎌지는 곳을 선택하여 principal components의 수 k 를 선택함

참고: 김성범, 강필성 교수님 강의, https://ratsgo.github.io/machine%20learning/2017/04/24/PCA/

노션 링크 주소 : metric 

노션 링크 주소 : Decision Theory

과대적합 : 학습데이터(traing data)에는 정밀도가 높으나 시험데이터(test data)에는 정밀도가 현저하게 떨어지는 경우

 

=> 과대적합은 표본 수를 늘리거나,초모수(hyper parameter)를 조정 또는 규제화 강도를 높이는 것, 특성변수의 차원축 
      소, 통계적으로 유의하지 않는 특성변수를 제거하여 특성변수의 수 줄이기 등으로 해결함

 

과소적합: 학습데이터의 정밀도가 목표한 정밀도보다 현저하게 낮은 경우

 

=>  과소적합은 특성변수를 늘리거나 규제화를 약화시키기 혹은 다른 모형을 선택하여 해결하여야 함.

 

*validation set이 필요한 이유

train set으로 모델을 훈련하고, test set으로 모델을 검증할 경우 문제점

= > 고정된 test set으로 성능을 검증&수정하는 과정을 반복할 경우, 해당 모델은 test set에만 잘 작동하는 모델이 될 수 있음. test setoverfitting되어 새로운 데이터에는 알맞은 모델이 되지 못함.

이런 문제를 해결하기 위해 사용하는 것이 바로 Cross Validation이다.

 

 

   <holdout cross-validation>

모수추정: 데이터를 통해 모델 학습과정에서 모수추정하게 됨

초모수 선택 : 여러 개의 초모수 값을 순차적으로 학습데이터와 검증 데이터에 적용하여검증데이터의 성능예를 들어손실함수값 또는 정밀도이 학습데이터의 성능에 근접하게 하는 초모수를 선택.

(초모수 선택과정에서 validation set은 일종의 test data 역할을 하여 해당 초모수일 때의 모델의 성능을 validation set으로 점검함. 하지만 초모수 튜닝과정까지도 결국 적합한 모델을 찾는 과정임)

 

=> 모수와 초모수가 선택되면 해당 모델을 test data(unseen data)를 이용하여 성능을 점검함.

 

고정된 자료분할의 문제점 : 검증데이터가 잘 선택되면 좋은 결과를 보이고 잘못 선택되면 검증데이터의 성능이 나쁘게 나온다면 초모수의 선택이 옳은지 그른지를 판단할 수 없게 된다. , 최적의 초모수 값이 선택된 validation data에 의존함. 특히 자료의 크기가 작을 경우에는 이러한 현상이 두드러짐.

=> 이를 보완한 검증법 : k-fold cross- validation

 

 

<k-fold cross- validation>

  1. train data와 test data로 나눈 후, train data를 다시 k개의 fold로 나눈다.
  2. 첫 번째 자료분할에서 첫 (k-1)개의 foldtrain data로 간주하고 맨 마지막 foldvalidation data로 간주한다.
  3. (k-1)개의 fold로 구성된 train data를 이용하여, 초모수를 특정값으로 고정한 후 모형의 모수를 추정한다.
  4. 추정된 모형에 validation data을 적용하여 validation data의 성능( 예를 들어손실함수값 또는 정밀도)을 구하여
    $ E_1 $이라고 하자.
  5. 두 번째 foldvalidation data로 간주하고 나머지 foldtrain data로 간주하여 동일 방법으로 (이때 초모수 값은
    $ E_1 $
    일때와 같음) validation data의 성능을 구하여 $ E_2 $ 이라고 하자.
    validation data의 성능  $ E_1 $, $ E_2 $, ...., $ E_k $ 를 구한 후, 평균 $\frac{1}{k} \sum_{i=1}^{k} E_i$으로 고정된 초모수의 성능을 평가한다.(
    k-fold cross validation 동안 초모수의 값은 고정되어 있음)

장점: validation data를 어떤 것을 선택하느냐에 따라 큰 영향을 받지 않음. data수가 적을 때 k값을 증가시키면 더 많은 훈련 데이터가 반복에 사용되고 모델성능을 평균화하여 일반화 성능을 추정할 때 더 낮은 편향을 만들게 된다. k 값이 매우 높으면 교차검증의 시간이 오래걸리고 분산이 높은 추정을 만듦.(과대적합)

 

< stratified k-fold cross validation>

데이터가 불균형할 때 각 fold에서 클래스 비율이 전체 데이터에서의 클래스 비율로 유지되도록 하면서 k-fold cross validation을 실행하게 됨

 

 

 

 

(a) 높은 편향 ( train datavalidation data모두 정확도가 낮음) : 높은 편향은 underfitting을 의미함 => 특성변수를 늘리거나 규제화를 약화시키기 혹은 다른 모형을 선택하여 해결하여야 함.

(b) 높은 분산 : train datavalidation data 사이의 정확도 차이가 큼 : overfitting을 의미함

=> 표본 수를 늘리거나초모수(hyper parameter)를 조정 또는 규제화 강도를 높이는 것, 특성변수의 차원축소, 통계적으로 유의하지 않는 특성변수를 제거하여 특성변수의 수 줄이기 등으로 해결함.

(, train data의 노이즈가 많은 경우에는 표본수를 늘리는 것이 도움이 되지 못함)

 

*초모수 튜닝의 대표적인 방법 : grid search

grid search: 리스트로 저장된 여러 가지 하이퍼 파라미터값 전체를 조사하여 그 중 최적의 초모수를 구하는 방법

 

*k-fold cross validationtrain datak개의 fold로 나눈후 k번의 validation set을 사용함으로써 validation data set에는 덜 민감하도록 하였음 .하지만 test data에는 민감함. 즉 처음 datatrain datatest data로 나눌 때 선택되는 test data에 따라 모델의 성능이 판단될수 있음. 따라서 test data에도 fold를 이용한 cross-validation이 필요함을 알게 됨.

외부 루프와 내부루프의 이중 루프 구조를 통해 test data에도 fold를 이용한 cross-validation이 적용된 기술 :nested cross validation

 

 

< nested cross validation >

 

  1. 전체 데이터를 $ k_1 $분할하여 순차적으로 하나의 foldtest data로 사용하고 나머지를 train data로 사용함.
    => 
    외곽루프에  $ k_1 $개의 train test data set이 생성됨.
  2. 각각의 외곽루프마다 train data를 $ k_2 $분할하여 순차적으로 하나의 foldvalidation data로 사용하고 나머지를 train data로 사용함
    => 내부루프에 $ k_2 $개의 train-validation set이 생성됨.
  3. $ k_2 $내부루프를 이용하여 초모수를 fix하고 이를 validation data를 이용하여 성능평가하고 초모수를 바꾸어 가면서 이를 반복하여 최적의 초모수를 선택함.
  4. 이를 test data로 성능을 평가함
  5. 이러한 반복을 외곽루프로 $ k_1 $번 반복하여 test data의 성능의 척도가 $ k_1$개 구해짐.
  6. $ k_1 $개의 test data의 성능척도를 평균하여 최종성능을 구한다. 경쟁모형도 동일한 방법(nested cross validation)을 이용하여 성능을 구한 후 모형간 성능을 비교할 수있음. 

cf) 데이터가 충분히 크면 k-fold cross validation이 필요없음.

+ Recent posts