이번에 알아볼 내용은 PCA의 변형 형태인 Kernel PCA입니다.
기존 PCA 관련 내용은 아래 포스팅을 참조해서 보고 오시면 좋으실 것 같습니다.
[머신러닝 with 파이썬] PCA / 주성분 분석 / 차원축소 /iris 데이터 활용
1. Kernel PCA
- Kernel pCA란, 비선형 데이터의 주요 구성요소를 찾기 위해 커널 트릭을 사용하는 PCA의 확장 버전입니다.
- 일반적인 PCA는 데이터의 선형 차원 축소에 유용하지만, 비선형적으로 분포된 데이터에는 한계가 있으며, 이런 비선형성을 처리하기 위해 Kernel PCA는 원본 데이터를 고차원 공간으로 매핑하여, 그 공간에서 선형 변환을 수행하는 것입니다.
- Kernel PCA가 이루어지는 주요 내용은 아래와 같습니다.
1) 원본 데이터의 Representation
* 주어진 데이터가 아래와 같이 존재하다고 가정해 봅니다. 이 데이터는 비선형적으로 분포되어 있다고 가정하며, 이 경우 단순한 선형 PCA의 경우 비효율적일 수 있습니다.
2) 고차원 feature space로 매핑
* Kernel PCA에서는 원본 데이터를 고차원 Feature Space인 F로 매핑하여 비선형성을 처리합니다. 이를 위해 매핑 함수인 theta를 사용하여 각 데이터 포인트 xi를 고차원 공간으로 매핑합니다.
* 이때 매핑된 데이터는 아래와 같습니다. 이 고차원 공간에서 데이터가 선형적으로 분포되어 있을 것으로 가정하고, PCA를 수행하고자 합니다.
3) 커널 함수의 사용
* 직접 고차원 feature space로 매핑을 수행하는 것은 계산 비용이 많이 들 수 있기 때문에, 아래와 같은 커널 함수를 사용하여 두 데이터 포인트 간의 유사도를 계산합니다.
* 이때 자주 사용되는 커널 함수의 예로는 아래와 같이 RBF(Radial Basis Function) 또는 Polynomial 등 있습니다.
4) 커널 행렬 K
* 모든 데이터 쌍 (xi, xj)에 대해 커널 함수를 적용하여 커널 행렬 K를 구합니다.
5) 중심화된 커널 행렬
* 고차원 공간에서 데이터가 중심화되어 있어야 PA가 제대로 작동하므로, K 행렬을 중심화합니다. 중심화된 커널 행렬은 다음과 같이 계산됩니다.
6) Eigenvalue Decomposition
* 중심화된 커널 행렬에 대해 Eigenvalue Decomposition을 수행하여 고유값과 고유 벡터를 구해냅니다.
7) Principal Component 요소로의 Projection
* 데이터 xi의 Principal components인
를 찾기위해, Eigen vector인 alpha k에 대한 선형결합을 사용합니다.
- 위 과정을 요약을 해보자면
* 고차원으로 매핑
* 커널함수를 사용해 고차원 매핑을 간접적으로 처리
* Eigenvalue decomposition을 통해 차원을 축소
라고 볼 수 있습니다.
2. 예시 데이터를 통해 알아보는 Kernel PCA
- 이번에는 예시 데이터를 생성해서 일반적인 PCA와 Kernel PCA(RBF Kernel, Polynomial Kernel)을 처리했을 때 어떻게 다르게 나타나는지 알아보겠습니다.
- 사용할 데이터는 3D Swiss Roll 함수를 활용해서 생성하겠습니다. 전체 코드는 아래와 같습니다.
- 위 결과를 보시면
* Original Data인 3D Swiss Roll 데이터는 비선형 구조가 강한 3차원 데이터로, 단순한 선형 변환으로는 쉽게 주성분을 찾을 수 없는 구조를 가지고 있습니다.
* Linear PCA를 적용한 결과를 보시면 데이터의 비선형 구조를 잘 확인하지 못하고 스위스 롤 구조가 퍼진 형태로 PC1과 PC2의 차원에 투영된 것을 볼 수 있습니다.
* RBF Kernel PCA를 적용한 결과르 보시면 데이터의 곡선 구조를 잘 유지하면서 차원을 축소한 것을 알 수 있습니다.
* Polynomial Kernel PCA를 적용한 결과를 보시면, 현재 주어진 파라미터 설정으로는 데이터의 원형 패턴을 RBF만큼 잘 반영하지는 못하고 있음을 알 수 있습니다. 하지만 여전히 비선형 변환 효과가 보이는 것처럼 느껴집니다.
- 전반적으로 3차원의 Swiss Roll 데이터의 경우, RBF Kernel이 차원 축소를 데이터의 특징을 잘 반영해서 한 것을 알 수 있습니다.
'머신러닝 with Python' 카테고리의 다른 글
[머신러닝 with Python] TF-IDF를 활용한 텍스트 분류 (0) | 2024.11.29 |
---|---|
[머신러닝 with Python] 불균형 데이터 처리(4) : ADASYN 활용 (0) | 2024.11.26 |
[머신러닝 with Python] 불균형 데이터 처리(3) : TomekLink활용 (0) | 2024.11.23 |
[머신러닝 with Python] 불균형 데이터 처리(2) : 불균형 클래스 분류 문제 평가지표 (0) | 2024.11.21 |
[머신러닝 with Python] 불균형 데이터 처리(1) : Credit Card Fraud Detection Data에 대해 EDA (1) | 2024.11.20 |
댓글