머신러닝

차원축소 1 : PCA 개념과 sklearn적용

happynunu 2021. 6. 28. 22:01

구성

  1. 차원축소(Dimension Reduction)
  2. PCA (Principal Component Analysis)
  3. 공분산 행렬
  4. 공분산 행렬 분해
  5. klearn 적용 및 활용

차원 축소(Dimension Reduction)

  • 일반적으로 차원이 증가할수록, 데이터 포인트 간의 거리가 기하급수적으로 멀어지게 되고  희소(sparse)한 구조를 가지게 된다. 수백개 이상의 피처로 구성된 데이터 세트의 경우, 상대적으로 적은 차원에서 학습된 모델보다 예측 신뢰도가 떨어진다.
  • 또한 피처가 많을 경우, 개별 피처 간에 상관관계가 높을 가능성이 큰데, 선형회귀와 같은 선형 모델에서는 입력 변수 간의 상관관계가 높을 경우 이로 인한 다중공선성 문제로 모델의 예측 성능이 저하된다

필요성 : (1) 많은 다차원의 피처를 차원 축소해 피처 수를 줄이면 더 직관적으로 데이터를 해석할 수 있다. (2) 또한 학습 데이터의 크기가 줄어들어서 학습에 필요한 처리용량도 줄일 수 있다.

적용 : 추천엔진, 이미지 분류 및 변환, 문서 토픽 모델링

PCA (Principal Component Analysis) 

  • PCA는 가장 대표적인 차원 축소 기법으로서, 여러 변수 간에 존재하는 상관관계를 이용해 이를 대표하는 주성분을 추출해, 차원을 축소하는 기법이다.
  • PCA를 적용할 때, 가장 높은 분산을 가지는 데이터의 축을 찾아 이축으로 차원을 축소하는 데, 이것이 PCA의 주성분이 됩니다.

 

예를 들어  아래 그림과 같이 2차원 좌표평면에 n개의 점 데이터 (x1,y1), (x2,y2), ..., (xn,yn)들이 타원형으로 분포되어 있을 때,  2개의 벡터로 데이터 분포 특성을 가장 잘 설명할 수 있는 방법은 그림에서와 같이, e1, e2 두개의 벡터로 데이터 분포를 설명하는 것이다. 

<그림1> 2D에서 PCA 적용

여기서 주성분이라 함은 그 방향으로 데이터들의 분산이 가장 큰 방향 벡터를 의미한다. <그림 1>에서 e1 방향을 따라 데이터들의 분산(흩어진 정도)이 가장 크다. 그리고 e1에 수직이면서 그 다음으로 데이터들의 분산이 가장 큰 방향은 e2이다. 이러한 방향벡터를 e를 eigen vector 라고 하는데 차원의 수가 n이면 vector의 수도 n개이며 이러한 eigen vectore들은 각각의 수직인(orthogonal) 벡터들이다.

 

 3차원 데이터의 경우는 아래 그림과 같이 3개의 서로 수직인 주성분 벡터(eigen vectors)를 보여준다.

<그림2> 3D에서 PCA 적용

공분산 행렬

  • PCA의 고유 벡터를 구하기 위해, 입력 데이터의 공분산 행렬을 고유값 분해하고, 이렇게 구한 고유벡터에 입력데이터를 선형변환한다.
  • 공분산 행렬이란, 데이터의 좌표 성분들 사이의 공분산 값을 원소로 하는 행렬로서, 데이터의 i번째 좌표 성분과 j번째, 좌표 성분의 공분산 값을 행렬의 i행 j열 원소값으로 하는 행렬이다.

예를 들어, 2차원 데이터 n개가 (x1, y1), (x2, y2), ..., (xn, yn)와 같이 있다면 이 데이터들의 공분산 행렬은 다음과 같이 계산된다.

공분산 행렬 계산

공분산 행렬 분해

입력 데이터의 공분산 행렬을 c라고 하면, 공분산 행렬의 특성으로 인해 다음과 같이 분해할 수 있다.

공분산 행렬 분해 1

공분산 C는 고유벡터 직교행렬*고유값 정방 행렬*고유벡터 직교 행렬의 전치행렬로 분해된다. 

이를 구체화하면 다음과 같다.

공분산 행렬 분해 2

따라서 입력 데이터의 공분산 행렬은 고유벡터와  고유값으로 분해될 수 있으며 이렇게 분해된 벡터를 이용해 입력데이터를 선형 변환하는 방식이 PCA라는 것을 알 수 있다.

 

sklearn 적용 및 활용 

sklearn의 dataset중에서 4개의 features값을 가지는 iris 데이터를 가져온다. 그다음 sklearn의 PCA함수를 가져와서 iris의 dataset를 2개의 feature로 변환한다. 이후에, PCA 변환된 데이터의 컬럼명을 각각 pca_component_1, pca_component_2로 바꾼다.

 

붓꽃 데이터 세트에 바로 PCA를 적용하기 전에 개별 속성을 함께 스케일링 해야한다. PCA는 여러 속성의 값을 연산해야하므로, 속성의 스케일에 영향을 받기 때문이다. 따라서, 여러 속성을 PCA로 압축하기 전에 각 속성값을 동일한 스케일로 변환하는 것이 필요하다. 이를 위해, 사이킷런의 StandandScaler함수를 사용해 평균이 0 분산이 1이 되도록 데이터 세트의 속성값들을 변환한다.

이후에, 원본데이터와 pca변환데이터를 RandomForest를 통해 정확도를 산출할 수 있다.

 

 

더 알아보기

고유벡터를 구한 뒤, 원본데이터에 어떠한 적용을 해야지 PCA 변환이 일어나는지 파악해야 겠다.

 

참조

1)파이썬 머신러닝 완벽가이드(권철민 지음)

 

 

2)선형대수학#6 주성분 분석의 이해와 활용

https://darkpgmr.tistory.com/110

 

[선형대수학 #6] 주성분분석(PCA)의 이해와 활용

주성분 분석, 영어로는 PCA(Principal Component Analysis). 주성분 분석(PCA)은 사람들에게 비교적 널리 알려져 있는 방법으로서, 다른 블로그, 카페 등에 이와 관련된 소개글 또한 굉장히 많다. 그래도 기

darkpgmr.tistory.com