티스토리 뷰

대표적인 차원 축소 알고리즘인 PCA, LDA, SVD, NMF에 대해서 알아봅시다. 차원 축소는, 매우 많은 피처로 구성된 다차원 데이터 세트의 차원을 축소해 새로운 차원의 데이터 세트를 생성하는 것입니다. 일반적으로 차원이 증가할수록 데이터 포인트 간의 거리가 기하급수적으로 멀어지므로 데이터들이 공간 상에 희소(sparse)하게 존재하게 됩니다.



수백 개 이상의 피처로 구성된 데이터의 경우 적은 차원에서 학습된 모델보다 예측 신뢰도가 떨어집니다. 또한 피처가 많으면 개별 피처간에 상관관계가 높을 가능성이 큽니다. 선형 회귀와 같은 선형 모델에서는 입력 변수 간의 상관관계가 높을 경우 다중 공서넝 문제가 발생하여 모델의 예측 성능이 저하됩니다.



데이터의 차원을 축소하면 더 직관적으로 데이터를 해석할 수 있습니다. 피처가 수십 개 이상인 데이터를 시각화하는 것을 불가능하지만, 3차원 이하의 데이터는 시각화를 통해 데이터의 특징을 파악할 수 있습니다. 또한 차원을 줄임으로써 데이터의 크기가 줄어서 학습에 필요한 처리 능력도 줄어듭니다.

 


일반적으로 차원 축소는 피처 선택(feature selection)과 피처 추출(feature extraction)로 나눌 수 있습니다. 피처 선택, 즉 특성 선택은 말 그대로 특정 피처에 종속성이 강한 불필요한 다른 피처를 제거하는 것입니다. 피처 추출은 기존 피처를 함축적으로 더 잘 설명할 수 있는 또 다른 저차원 공간으로 매핑하는 것 입니다. 이렇게 새롭게 만들어진 피처는 기존의 피처와는 완전히 다른 값이 됩니다. 이렇게 함으로써 기존 피처에선 인지하기 어려웠던 데이터의 잠재적인 특징(Latent Factor)을 드러내게 할 수 있습니다. 피처 추출 알고리즘으론 PCA, SVD, NMF 등이 있습니다.










PCA(Principal Component Analysis)는 가장 대표적인 차원 축소 기법입니다. 여러 변수 간에 상관관계를 이용해 이를 대표하는 주성분을 추출해 차원을 축소합니다. PCA로 차원을 축소할 때 기존 데이터의 정보 유실을 최소화하기 위해, 분산이 가장 높은 데이터의 축으로 차원 축소를 진행하며, 이것이 PCA의 주성분이 됩니다(즉, 분산이 데이터의 특성을 가장 잘 나타내는 것으로 간주합니다).

 


PCA는 제일 먼저 가장 큰 변동성(Variance)을 기반으로 첫 번째 벡터 축을 생성하고, 두 번째 벡터 축은 이 벡터 축에 직각이 되게 끔, 세 번째 벡터는 다시 두 번째 벡터와 직각이 되게끔 설정하는 방식으로 축을 생성합니다. 이러한 벡터 축에 원본 데이터를 투영하면 벡터 축의 개수만큼의 차원으로 원본 데이터의 차원이 축소됩니다.



PCA를 선형대수의 관점에서 해석해봅시다. 데이터의 공분산 행렬(Covariance Matrix)을 고윳값 분해하고, 구해진 고유 벡터를 이용해 데이터를 선형 변환하는 것입니다. 고유벡터가 PCA의 주성분 벡터로서 데이터의 분산이 큰 방향을 나타냅니다. 고윳값은 각 고유벡터의 크기를 나타내는 동시에 데이터의 분산을 나타냅니다.

 


선형 변환이란, 특정 벡터에 행렬을 곱해 새로운 벡터로 변환하는 것을 의미합니다. 이는 특정 벡터를 어떤 공간에서 다른 공간으로 투영하는 개념으로 볼 수 있으며, 행렬을 바로 공간으로 가정하는 것입니다. 공분산은 두 변수 간의 변동을 의미하며, $Cov(X, Y) > 0$이라면 변수 $X$가 증가할 때 변수 $Y$도 증가한다는 의미입니다. 공분산 행렬은 여러 변수와 관련된 공분산을 포함하는 정방 행렬입니다.



어떤 행렬의 고유 벡터란, 그 행렬을 곱하더라도 방향은 변하지 않고 크기만 변하는 벡터를 말합니다. 즉, $A\mathbf{x} = a\mathbf{x}$인 벡터 $\mathbf{x}$입니다. 정방 행렬을 최대 그 차우너 수 만큼의 고유벡터를 가질 수 있습니다. 이렇게 고유벡터는 행렬이 작용하는 힘의 방향과 관계가 있어서 행렬을 분해하는 데 사용됩니다.

 

 

 

공분산 행렬은 개별 분산값을 대각 원소로 하는 대칭행렬입니다. 대칭행렬은 고윳값 분해와 관련해 매우 좋을 특성을 가집니다. 대칭행렬은 항상 고유벡터를 직교행렬(orthogonal matrix)로, 고윳값을 정방 행렬로 대각화할 수 있다는 것입니다. 입력 데이터의 공분산 행렬을 $C$라고 하면, 공분산 행렬은 $C=P\sum P^{T}$로 분해될 수 있습니다. 

 

 

 

 

 

 

 

 

즉, 공분산 행렬을 고유벡터로 구성된 직교 행렬 $P$와 고윳값으로 구성된 정방 행렬 $\sum$의 구성으로 분해될 수 있습니다.$e_{1}$는 가장 분산이 큰 방향을 가진 고유벡터이며, $e_{2}$는 $e_{1}$에 수직이면서 다음으로 가장 분산이 큰 방향을 가진 고유벡터입니다. 중요한 점은 데이터의 공분산 행렬이 고유벡터와 고윳값으로 분해될 수 있으며, 고유 벡터를 이용해 데이터를 선형 변환하여 차원을 축소하는 것이 PCA의 동작 방식이라는 사실입니다. 

 

 

 

  • 데이터 세트의 공분산 행렬을 생성합니다.
  • 공분산 행렬의 고유벡터와 고윳값을 계산합니다.
  • 고윳값이 큰 순으로 K개(PCA 변환 차수만큼)의 고유벡터를 추출합니다.
  • 고유벡터로 데이터를 변환합니다.

 

 

 

 

 

PCA를 이용하여 붓꽃 데이터 세트의 차원을 축소해봅시다.

 

 

 

 

 

붓꽃 데이터 세트는 4개의 피처를 가집니다. 이를 PCA를 통해 2개의 차원으로 축소해봅시다.

 

 

 

 

 

 

 

각 붓꽃의 품종에 따라 "sepal length", "sepal width" 피처를 시각화해봅시다. "setosa" 품종의 경우 두 피처만으로도 다른 품종과 확실히 구별되는 것을 확인할 수 있습니다. "versicolor"와 "virginica" 품종은 두 피처만으로는 영역이 확실히 구별되지 않고 있습니다.

 

 

 

 

 

 

 

어떤 데이터 세트에 대해 PCA를 수행하기 전에, 개별 피처는 같은 스케일을 가져야합니다. PCA는 여러 피처의 값을 연산하므로 피처의 스케일에 영향을 받기 때문입니다. 타겟값을 제외한 모든 피처에 표준화를 수행합시다.

 

 

 

 

 

 

 

스케일링이 적용된 데이터 세트에 PCA를 적용해 2차원의 데이터로 변환하였습니다. 사이킷런은 PCA 변환을 위해 PCA 클래스를 제공합니다. 생성 파라미터로 n_components를 받으며, 총 몇 차원으로 데이터를 축소할 지를 뜻합니다. fit(), transform() 메서드를 통해 변환된 데이터 세트의 크기를 확인하니, 피처의 개수가 2개로 잘 축소됐습니다.

 

 

 

 

 

 

 

PCA를 통해 압축된 피처는 원본 데이터의 피처와는 완전히 다른 값을 가집니다.

 

 

 

 

 

 

 

PCA 변환된 데이터 세트에 대해, 각 품종을 피처에 따라 시각화해보았습니다. "setosa" 품종은 PCA 변환을 하기 전과 마찬가지로 다른 품종과 매우 잘 구분됩니다. "versicolor"와 "virginica" 품종은 역시 완벽히 구분되진 않지만, 변환 전보다는 명확히 구분되고 있음을 확인할 수 있습니다.

 

 

 

 

 

PCA의 각 피처가 원본 데이터의 변동성을 얼마나 반영하고 있는지를 확인할 수 있습니다. PCA 변환을 수행한 PCA 객체의 explained_veriance_ratio_ 속성을 통해 데이터의 전체 변동성 중 개별 PCA 피처가 차지하는 변동성 비율을 확인할 수 있습니다. 두 피처를 합쳐서 원본 데이터의 변동성을 약 95% 설명할 수 있다는 결과가 나왔습니다.

 

 

 

원본 데이터와, PCA 변환을 수행한 데이터 세트에 대해 랜덤 포레스트 모델을 학습시켜 교차 검증 정확도를 비교해봅시다.

 

 

 

 

 

 

원본 데이터 세트로 학습시킨 모델의 평균 정확도가 훨씬 높은 것을 확인할 수 있습니다. 약 8%정도의 정확도 하락은 큰 성능 수치의 감소이지만, 4개의 피처를 2개로 압축함으로써 피처의 개수가 50% 감소한 것을 고려하면 PCA 변환 후에도 원본 데이터의 특성을 상당 부분 유지하고 있음을 알 수 있습니다.

«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31