PCA는 Principal Component Analysis의 약자로 주성분 분석, 차원 축소를 진행하는 기법이다.
PCA의 목적은 고차원의 정보들을 저차원의 정보로 변환하면서 최대한 손실 없이 변환하는 것이다. 이는 실제로 설명변수가 너무 많으면 머신러닝 알고리즘을 적용할 때 어려움(학습속도, 과적합 등)을 겪기 때문에 이 문제점을 해결하면서 정보손실은 없어야 한다.
우선 고차원의 데이터를 저차원으로 바꾸려면 정사영, Projection을 진행해야 하는데 중요한 점은 어느 벡터에 정사영을 시켜야 기존의 정보를 많이 잃지 않느냐는 것이다. 이를 이해하기 위해 공분산행렬에 대해 알아보자.
- 공돌이의 수학 노트-
공분산행렬의 기하학적인 형태에 대해 간단하게 설명해 보면 왼쪽과 같이 원의 형태로 주어져있는 데이터가 공분산행렬이라는 선형변환을 통해 오른쪽과 같은 지금의 데이터 분포가 된다고 생각하면 된다. 즉 공분산행렬은 데이터가 퍼진형태를 의미한다고 볼 수 있다.
이때 고윳값과 고유벡터를 공분산행렬에 적용할 수 있는데 우선 고유벡터란 선형변환을 진행할 때 크기가 변하고 방향이 변하지 않는 벡터를 의미하여 공분산 행렬에서의 고유벡터는 즉 데이터가 어느 방향으로 분산되어 있는지를 찾아주고 고윳값은 해당 고유벡터의 방향으로 얼마만큼 크기로 벡터공간이 늘려지는지를 의미 만다. 즉 우리는 고유값이 큰 순서대로 고유벡터를 정렬하면 결과적으로 순서대로 주성분을 구하게 된다. (공돌이의 수학노트)
요약하면 데이터에서 공분산행렬을 구하고, 공분산행렬에서 고유벡터가 큰 순서대로 고유값을 구하여 해당 고유벡터에 정사영을 시키는 것이 가장 분산을 크게 유지시킬 수 있다는 것이다.
(분산을 크게 유지한다는 것은 기존의 고차원의 데이터를 저차원의 데이터로 투영시키면 데이터가 겹치는 현상이 발생하는데 분산이 크다=데이터가 잘 펴져있다는 의미로 가장 데이터가 잘 퍼져있도록, 잘 안 겹치도록 하는 축을 찾자는 것이다)
위의 그림에서 만약 c2고유벡터에 해당 데이터들을 정사영시키면 가장 아래에 있는 것처럼 분산이 작은, 데이터가 겹치도록 차원이 축소되고, c1 고유벡터에 투영을 시키면 제일 위쪽에 있는 것처럼 분산이 크도록 유지된다.
이렇게 분산이 최대로 되게 하는 축을 찾고 이 축에 직교하면서 남은 분산을 최대한 보존하는 다른 축을 찾는 것을 반복하면서 차원을 축소해 나간다. 이때의 각 축을 주성분이라고 부르는 것이다.
pca의 과정을 요약하면 위 그림과 같이 나타낼 수 있다.
우선 데이터의 평균을 구하여 모든 데이터에서 평균을 제거하여 데이터의 평균이 0인상태로 만들고,
데이터의 공분산행렬을 구한다.
다음으로 고유값과 고유벡터를 계산한다.
고유값이 큰 순서대로 고유벡터를 정렬하고 원하는 차원의 수만큼 주성분을 선택한다
선택된 주성분에 데이터를 투영시킨다.
PCA의 장단점
1. 차원축소: 고차원 데이터를 저차원 데이터로 변환함으로써 데이터의 크기를 줄여 계산량을 감소시키고 시각화를 통해 분포를 확인할 수 있다.
2. 데이터 압축: 위의 차원축소랑 비슷한 맥락으로, 분산을 최대화하면서 정보를 압축함으로써 메모리 공간을 절약하면서 데이터의 정보는 유지할 수 있다.
3. 노이즈 제거: 주성분을 기준으로 데이터를 변환하기 때문에 노이즈에 영향을 받지 않는 특성을 추출할 수 있다.
'ML & DL > 개념정리' 카테고리의 다른 글
Grad-CAM: Gradient Class Activation Map (0) | 2024.01.31 |
---|---|
CAM: Class Activation Map (0) | 2024.01.31 |
Activation Function: 활성화 함수 (0) | 2024.01.31 |
Feature engineering (0) | 2024.01.11 |
연속형, 범주형 변수 처리 (0) | 2024.01.11 |