Python Machine Learning/차원축소

PCA(principal component analysis)

Data Analytics 2020. 10. 6. 15:08

PCA

- 여러 변수 간에 존재하는 상관관계를 이용해 이를 대표하는 주성분(principal component)을 추출해 차원을 축소하는 기법이며, 가장 높은 분산을 가지는 데이터의 축을 찾아 이 축으로 차원을 축소하는데, 이것이 PCA의 주성분.

- 첫 번째 벡터 축 : 가장 큰 데이터 변동성을 기반으로 생성

  두 번째 벡터 축 : 첫 번째 벡터 축에 직각이 되는 벡터(직교벡터)

  세 번째 벡터 축 : 두 번째 벡터 축과 직각이 되는 벡터를 설정하는 방식으로 축 생성

 

PCA의 선형대수 관점

- 입력 데이터의 공분산 행렬을 고유값 분해하고, 이렇게 구한 고유벡터에 입력 데이터를 선형 변환하는 것

- 이 고유 벡터가 PCA의 주성분벡터로서 입력 데이터의 분산이 큰 방향을 나타냄

- 공분산c = 고유벡터 직교 행렬 * 고유값 정방 행렬 * 고유벡터 직교 행렬의 전치 행렬

즉 입력 데이터의 공분산 행렬이 고유벡터와 고유값으로 분해될 수 있으며, 이렇게 분해된 고유벡터를 이용해 입력 데이터를 선형 변환하는 방식이 PCA이다.

 

PCA step

1. 입력 데이터 세트의 공분산 행렬을 생성

2. 공분산 행렬의 고유벡터와 고유값을 계산

3. 고유값이 가장 큰 순으로 K개(PCA 변환 차수만큼)만큼 고유벡터를 추출

4. 고유값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터를 변환

 

 

 

예제

- 붓꽃 데이터세트에 있는 4개의 속성을 2개의 PCA차원으로 압축해 원래 데이터 세트와 압축된 데이터 세트가 어떻게

  달라지는지 비교

setosa는 세모, versicolor는 네모, virginica는 동그라미로 표현/                                            setosa의 target 값은 0, versicolor는 1, virginica는 2. 각 target 별로 다른 shape으로 표시         

-> 붓꽃 데이터세트에 있는 4개의 속성을 2차원으로 표현하므로 두 개의 속성인 sepal length, sepal width를 각각

    X축, Y축으로 해 품종 데이터 분포를 시각화

-> Versicolor와 virginica의 경우는 X축과Y축 조건만으로는 분류가 어려운 복잡한 조건임을 알 수 있음

 

[ PCA 변환]

 평균이 0, 분산이 1인 정규 분포로 원본 데이터를 변환

-> PCA는 여러 속성의 값을 연산해야 하므로 속성의 스케일에 영향을 받기때문에 여러 속성을 PCA로 압축하기 전에 각

    속성값을 동일한 스케일로 변환하는 것이 필요하여 사이킷런의 standardscaler를 이용해 원본 데이터를 변환

PCA 변환 수행

-> 원본 데이터를 PCA데이터로 PCA클래스를 이용하여 변환하였고, PCA클래스는 생성 파라미터로 n_components

    ( PCA로 변환할 차원의 수를 의미 )를 입력

-> transform( ) 메서드를 호출해 원본 데이터 세트를 pca 객체 변수로 반환( 150x2넘파이 행렬)

pca_component_1 을 x축, pc_component_2를 y축으로 scatter plot 수행하여 PCA 데이터세트 시각화

-> 원본보다 pca_component_1값을 기준으로 비교적 며왁한 구분이 가능해졌으며 이는 PCA의 첫 번째 새로운 축인

    pca_component_1이 원본 데이터의 변동성을 잘 반영했다는 결과

 

전체 변동성의 대략 72.7%, 23%

-> explained_variance_ratio_속성을 통해 전체 변동성에서 개별 PCA 컴포넌트별로 차지하는 변동성 비율을 제공

-> PCA를 2개 요소로만 변환해도 원동 데이터의 변동성을 95% 설명가능

 

RandomForestClassifier를 이용하고 cross_val_score( )로 3개의 교차 검증 세트로 정확도 결과를 비교 가능

-> 원본보다 PCA 변환된 데이터 세트가 더 나은 예측 정확도를 나타내지만 이러한 경우는 흔하지 않음

-> PCA 변환 차원 개수에 따라 예측 성능이 떨어질 수밖에 없음

-> 붓꽃 데이터의 경우는 4개의 속성이 2개의 변환 속성이 돼도 예측 성능에 전혀 영향을 받지 않을 정도로 PCA변환이 

    잘 적용됐음을 의미