주성분 분석과 차원축소에 대해 배운다
Why?) 차원축소를 하는 이유?
가장 큰 이유는 용량 때문이다. 그래서 차원을 하나 줄이면서도 각각의 데이터들을 잘 표현할 수 있도록 하는 과정을 하게되고 이것을 차원축소라고 한다.
차원과 차원 축소
머신러닝에서 차원이란, 행렬의 경우 행 또는 열의 갯수를 말하며, 벡터의 경우에는 벡터의 element의 갯수를 말한다. 즉 같은 단어라도 대상이 행렬이냐 벡터이냐에 따라 가리키는게 다르니 주의!
차원 축소는 최대한 원래 차원에서의 데이터 특성을 잘 반영하는 방향으로 차원을 하나 줄이는 방법이다.
대표적인 차원축소 알고리즘에는 주성분 분석이 있다.
주성분 분석(PCA)
n차원(feature의 갯수)으로 이루어진 데이터 공간에서 m개의 좌표벡터를 가진 m차원 좌표계를 만든다고 하자. (선형대수학 참고)
이때 선형회귀나 다중회귀 등을 통해 그 데이터셋을 가장 잘 표현하는 도형을 찾고 좌표값을 새로운 m차원 좌표계로 좌표변환을 한다.
이 좌표계의 좌표벡터들을 주성분 이라고 부른다.
(주의!) 주성분의 차원(element의 갯수)은 원래 벡터공간 안에 있기 때문에 차원 축소 전의 feature의 갯수와 동일하다.
주성분 자체의 갯수는 기본적으로 feature의 갯수와 동일하다. (n차원 좌표계에서 n차원의 새로운 좌표계를 만든다는 뜻) 물론 사용자가 직접 주성분 갯수를 지정할 수 있다.
주성분 분석 구현
from sklearn.decomposition import PCA
<pca_obj> = PCA(n_components = <n>)
<pca_obj>.fit(<train_data>)
PCA가 찾은 주성분은 <pca_obj>.components_에 저장되어 있다.
<pca_obj>.transform(<train_data>)를 통해 좌표변환을 수행한다.
원본 데이터 복구
차원을 줄이면 정보손실이 발생해 완벽하게 복구할 수는 없다. 다만 어느정도 비슷하게 복구하는건 가능하다.
어떤 pca_obj객체가 기존에 n차원 이었다가 m차원으로 축소시킨 적이 있다고 하자.
<pca_obj>.inverse_transform(<train_data>) 함수를 수행하면 feature갯수가 m개였던 데이터들을 이전 차원인 n차원으로 되돌릴 수 있다.
설명된 분산
설명된 분산(explained variance)이란 주성분(좌표벡터)이 원래 데이터의 특징을 얼마나 잘 나타내는지 기록한 값이다.
일반적으로 먼저 만들어진 좌표벡터가 더 원래 데이터의 특징을 잘 반영한다. 따라서 주성분을 너무 많이 만들면 효율이 떨어질 수 있어 차원축소가 무의미해질 수도 있다.
[PLAYDATA] 데이터 엔지니어링 9월 3주차 9/16 (0) | 2023.09.16 |
---|---|
[PLAYDATA] 데이터 엔지니어링 9월 3주차 9/15 (0) | 2023.09.15 |
[PLAYDATA] 데이터 엔지니어링 9월 3주차 9/13 (0) | 2023.09.13 |
[PLAYDATA] 데이터 엔지니어링 9월 3주차 9/11 (0) | 2023.09.11 |
[PLAYDATA] 데이터 엔지니어링 9월 2주차 9/8 (0) | 2023.09.08 |