Broccoli's House

#3-(2) 비지도 변환 : 주성분 분석(PCA) 본문

공부/머신러닝

#3-(2) 비지도 변환 : 주성분 분석(PCA)

김콜리 2018. 2. 3. 22:55

※ 이 글의 내용은 O'REILLY의 <파이썬 라이브러리를 활용한 머신러닝> 책을 기반으로 한다.




비지도 변환 : PCA(주성분 분석)




  • 비지도 변환
 - 비지도 변환 : 비지도 학습을 사용하여 데이터를 변환한 것이다. 이렇게 데이터를 변환하는 이유는 주로 데이터를 시각화하거나, 데이터를 압축하거나, 지도 학습에 사용하기 위해 정보가 더 잘 드러나도록 하기 위해서이다. 비지도 변환에는 여러가지가 있으나 흔히 사용하는 알고리즘인 주성분 분석(Principal Component Analysis : PCA), 특성 추출에 널리 사용되는 비음수 행렬 분해(Non-negative Matrix Factorization : NMF)와 2차원 산점도를 이용하여 시각화 용도로 많이 사용하는 t-SNE(t-distributed Stochastic Neighbor Embedding) 알고리즘을 여기에서 다룬다. 

 - 비지도 변환 후의 데이터는 더이상의 처리가 필요없을 정도로 결과 값이 좋게 나오기 때문에, 튜닝 조금이면 원하는 출력을 얻을 수도 있다. 또한 비지도 변환을 하게 되면 계산 비용이 축소되고, 노이즈도 줄어들고 차원이 축소되어 그래프 상의 시각화가 가능하기 때문에 도출된 결과를 이해하기 쉬워지는 장점이 있다.



  • 주성분 분석
 - 주성분 분석(PCA) : 주성분 분석은 특성들이 통계적으로 상관관계가 없도록 데이터 세트를 회전시키는 기술이다. 서로 연관 가능성이 있는 고차원의 데이터를 연관성이 없는 저차원으로 변환하기 위하여 직교 변환을 사용한다. 이 알고리즘은 먼저 원본 데이터에서 데이터가 가장 멀리 퍼져있는, 분산이 가장 큰 방향을 찾는다. 분산이 가장 큰 방향(벡터)이 특성들의 상관관계가 가장 큰, 가장 많은 정보를 담고 있는 방향이기 때문이다. 그 다음 처음의 방향과 직각인 방향을 선택하고, 이것을 반복하는 알고리즘이다. 이렇게 찾은 방향을 데이터에 있는 주된 분산의 방향이라고 해서 주성분(Principal Component)이라고 한다. 일반적으로 원본의 특성 개수만큼 주성분이 존재한다. 

 - PCA는 선형 모델과 유사하게, 데이터에서 의미있는 축을 찾는 과정이다. 각각의 축은 하나의 주성분에 해당한다. 데이터에는 차원 수 만큼의 주성분이 존재하는데, 여기서 PCA는 어떤 축이 중요한지 그 우선 순위를 구하는 것이다. 간단하게 말해서 데이터의 범위를 재조정하고, 데이터의 평균을 0으로 맞춰줌으로써 PCA는 고차원의 데이터 중에서 중요한 차원을 골라준다. 결과적으로 PCA를 통해 출력된 데이터는 다른 학습 시에 수렴 속도와 성능을 향상시킬 수 있다.




 - 원본 데이터에서 가장 먼저 분산이 가장 큰 방향의 성분 1을 찾는다. 그리고 첫 번째 방향과 직각인 방향 중에서 가장 많은 정보를 담고 있는(첫 번째 다음으로 분산이 큰) 방향 성분 2를 찾는다. 주 성분을 축으로하여 변형한 것이 두 번째 그래프이다. PCA에 의해 회전된 두 축은 연관되어 있지 않으므로(직교하기 때문에) 변환된 데이터의 상관관계 행렬은 대각행렬이 된다.




 - PCA는 주성분의 일부만을 남기는 차원 축소 용도로 사용할 수 있다. 두 주성분을 축으로 하는 그래프에서 첫 번째 주성분만을 유지하고 두 번째 주성분을 제외한 것이다. 이렇게 하면 2차원 데이터 세트에서 1차원의 데이터 세트로 차원이 감소한다. 단순히 원본 특성이 중의 하나만 남기는 것이 아니라 가장 유용한 방향의 성분(주성분)을 유지한 것이다. (주성분을 축으로하여 정사영시켰다고 생각하는 것이 이해하기 편리하다.)


 - 우측은 첫번째 주 성분만 유지한 상태에서 회전을 복구시킨 것이다. 복구시킨 데이터 포인트들은 원래의 특성 공간에 놓여 있지만 첫 번째 주성분의 정보만을 담고 있다. 이러한 변환은 데이터에서 노이즈를 제거하거나 주성분에서 유지되는 정보를 시각화하는 데 종종 사용한다.


 - PCA의 단점은 그래프의 두 축을 해석하기가 어렵다는 것이다. 주성분은 원본 데이터에 있는 어떤 방향에 대응하는 여러 특성이 같이 조합된 형태이다. 거의 대부분의 특성이 섞여있기 때문에 축이 가지는 의미를 설명하기가 어렵다.




  • 공분산 행렬

 - 공분산 행렬 : 분산-공분산 행렬은 여러 변수와 관련된 분산과 공분산을 포함하는 정방형 행렬이다. 행렬의 대각 원소는 각 변수의 분산을 포함하며, 대각선 이외의 원소는 가능한 모든 변수 쌍 간의 공분산을 포함한다.




 - 공분산 행렬이 2차 정방 행렬이라 할 때 (1, 1) 원소는 x의 분산, (1, 2) 및 (2, 1) 원소는 x와 y의 공분산, (2, 2)원소는 y의 분산이다. 위의 그래프를 보면 x의 분산이 y의 분산보다 클 때 그래프는 가로로 길어지는 개형을 보이고, 반대로 y의 분산이 크면 세로로 길어지는 개형을 보인다. 대각 원소를 제외한 x와 y의 공분산이 0일 때는 회전 없이 축과 수직을 이루거나 평행한 개형의 그래프가 그려지고, 값이 있을 때는 축에 대해 각도를 가지는 개형의 그래프가 그려진다. 즉, 공분산 행렬이 그래프의 개형을 나타내는 것이다.


 - 공분산 행렬은 데이터의 전체적인 분포를 나타낸다. 이 행렬의 고유 벡터(Eigen Vector)는 데이터 분포의 분산 방향을 나타내고, 고유값(Eigenvalue)은 분산의 크기를 나타낸다. 그렇기 때문에 공분산 행렬의 고유 벡터와 고유값을 찾는 것은 PCA에서 데이터의 주성분을 찾는 것과 동일하다. 왜냐하면 데이터가 어떤 방향으로의 분산이 가장 큰지를 구하는 것과 같기 때문이다. 

Comments