인공지능 공부

[0916] PCA(주성분 분석)_차원축소

띄듸니 2021. 9. 23. 17:54

- 우리는 데이터가 가진 속성을 특성이라 불렀으며 이를 '차원'이라고도 부른다. (데이터셋 특성 100개 = 100개의 차원)

- 차원을 줄이면 저장공간을 줄일 수 있고, 학습 속도 또한 빨라진다. 그리고 많은 특성을 한번에 시각화할 수도 있다.

- 차원 축소는 비지도 학습중 하나의 알고리즘이다.

 

PCA (주성분 분석)

>>>  변수 간 상관관계를 이용해서 주성분을 추출해서 차원 축소하는 기법 (기존 데이터의 유실 최소화 해야함)

PCA는 가장 높은 분산을 가지는 데이터의 축을 찾아 이 축으로 차원을 축소하는데, 이것이 PCA의 주성분입니다.
원본 데이터의 피처 개수에 비해 매우 작은 주성분으로 원본 데이터의 총 변동성으로 대부분 설명할 수 있는 분석법


정리하면 PCA는 입력 데이터의 공분산 행렬이 고유벡터와 고유값으로 분해될 수 있으며, 이렇게 분해된 고유벡터를 이용해 입력 데이터를 선형 변환하는 방식이 PCA라는 것입니다. 보통 PCA는 다음과 같은 스텝으로 수행됩니다.

1. 입력 데이터 세트의 공분산 행렬을 생성합니다.
2. 공분산 행렬의 고유벡터와 고유값을 계산합니다.
3. 고유값이 가장 큰 순으로 K개(PCA변환 차수만큼)만큼 고유벡터를 추출합니다.
4. 고유값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터를 변환합니다.

                                                                            https://nicola-ml.tistory.com/144?category=861724

 

# 아이리스 데이터 실습

from sklearn.preprocessing import StandardScaler

#StandarScaler는 개별 Feature를 평균이 0이고, 분산이 1인 값으로 변환해줍니다.
iris_scaled = StandardScaler().fit_transform(irisDF)

from sklearn.decomposition import PCA
pca = PCA(n_components=2)   #4차원 데이터를 2차원으로 변환

#fit( )과 transform( ) 을 호출하여 PCA 변환 데이터 반환
pca.fit(iris_scaled)
iris_pca = pca.transform(iris_scaled)

이렇게 해서 iris_pca 에 target을 추가해서 시각화를 함 

 

# explained_variance_ratio_는 PCA 별로 원본 데이터의 변동성을 얼마나 반영하고 있는지 나타낸다.
print(pca.explained_variance_ratio_)

>>>> [0.76740358 0.18282727]

pca_component_1은 전체 변동성의 약 76%를 차지하며, pca_component_2는 약 18%를 차지한다. 따라서 두개의 PCA 요소로만 변환해도 원본 데이터의 변동성을 94% 설명 가능하다