Patrick's 데이터 세상

PCA 분석 본문

Deep Learning/이론

PCA 분석

patrick610 2020. 12. 2. 22:40
반응형
SMALL

 

 

차원 감소 (Dimension reduction)

데이터를 분석할 때 피쳐가 많으면 데이터 분석이 어렵고, 특히 3개 이상(3차원)의 피쳐가 존재할 경우 시각화가 어려워집니다.

머신러닝의 경우에 학습용 데이터의 피쳐가 많으면, 연산량이 많아지고, 특히 학습을 위해서 더 많은 데이터가 필요했는데 이렇게 피쳐가 많음으로써 발생하는 문제를 차원의 저주(Dimension Curse)라고 합니다.

이 차원의 수를 줄이는 방법을 차원 감소 방법(Dimension reduction)이라고 합니다.

차원 수를 줄인 다는 것은 다른 말로는 피쳐의 수를 줄인다는 말과 같고, 앞에서 언급한 바와 같이 데이터 분석에서는 차원을 줄여서 시각화를 가능하게 해서 데이터 분석을 용이하게 할 수 있다.

3차원이 넘어가는 데이터는 시각화가 불가능하여 차원을 줄여서 데이터의 특성을 파악할 필요가 있고, 또한 머신러닝에 있어서 학습 데이터의 수를 줄이고, 학습에 필요한 컴퓨팅 파워를 절약하기 위해서 차원 감소는 유용한 기법이 됩니다.

 

 

차원 감소 방식

차원을 감소시키는 방식은 피쳐 선택 (Feature Selection)과 피쳐 추출 (Feature extraction) 두 가지 방식이 있습니다. 피쳐 선택의 경우는 여러 개의 피쳐 중에서 데이터의 특성을 가장 잘 나타내는 주요 필드 몇 개 만을 선택하여 대표 피쳐로 선택하는 방법입니다.

예를 들어 [7,1,2],[100,1,3],[92,1,5] 가 있을 때, 이 세 개의 행렬에서 각 첫 번째 열과 세 번째 열이 그 변화 폭이 가장 크기 때문에, 첫 번째와 세 번째 열만을 대표 피쳐로 사용하여 다음과 같이 선택합니다. [7,2], [100,3], [92,5] 이렇게 원래 피쳐에서 부분 집합만을 선택하는 방식을 피쳐 선택 방법이라고 합니다.

 

다음은 피쳐 추출 (Feature extraction) 방식이 있는데, 이건 원본 데이터와 전혀 다른 형태의 데이터를 추출해냅니다.

PCA 기반의 피쳐 추출 방법에 대해서 알아보겠습니다.

 

 

PCA 분석

아래와 같은 데이터가 있다고 할 때

 

 

PCA 분석에서는 데이터의 변화의 폭이 가장 큰 축을 정하고, 그다음 그와 직교하는 축을 구합니다.

 

그리고 데이터의 중심점에 축을 위치 시켜서 0,0을 중심으로 데이터가 양쪽으로 균등하게 퍼지도록 분포를 시켜서 축을 뒤틀어서 아래와 같이 원래의 데이터를 변화시킵니다.

 

이렇게 PCA 분석을 하면, 데이터의 중심축을 0,0으로 위치시킬 수 있고, 가장 데이터의 변화의 폭이 큰 순으로 X, Y축 등을 지정하여 데이터를 볼 수 있습니다.

 

PCA를 이용한 차원의 감소

PCA 분석을 하더라도 단순히 축을 틀어버린것이기 때문에 차원의 수는 줄어들지 않습니다.

PCA 분석을 하면, 각 피쳐(축) 별로, 값의 변화도 (Variance : 해당 축의 값의 변화의 크기)를 볼 수 있습니다.

아래는 PCA Variance 값의 예제입니다.

 

 

그래프에서 보는것과 같이 0번 피쳐의 경우 Variance가 매우 심하고, 1,2는 상대적으로 많이 약한 것을 볼 수 있습니다. 그래서 0만 피쳐로 사용하거나 또는 0,1만 피쳐로 사용하더라도 데이터 특징의 대부분을 나타낼 수 있습니다.

앞의 예제 데이터에서 2차원 데이터를 PCA 분석을 해서 첫 번째 피쳐가 Variance가 가장 높다고 했을 때 이를 변환하면 다음과 같이 PCA 변환된 데이터의 X축의 값만을 사용하도록 해서 2차원을 1차원으로 줄일 수 있습니다.

 

 

 

물론 차원을 줄이면, 원래 데이터가 가지고 있는 특징이 다소 사라지는 단점이 있지만, 전체적인 데이터의 특성을 파악하는 대세에는 큰 영향이 없기 때문에, 더 장점이 많습니다.

 

 

 

 

Sklearn을 이용한 PCA 분석과 차원 감소

PCA 분석과 차원 감소를 파이썬 sklearn 라이브러리로 구현해보겠습니다.
여기서 사용할 데이터는 IRIS 데이터를 샘플 데이터로 사용하였습니다. 이 예제에서는 3차원인 IRIS 데이터를 PCA 분석을 통해서 2차원으로 줄여보도록 하겠습니다.

다음은 원본 데이터를 생성하고 시각화하는 코드입니다.

 

from sklearn import datasets
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import pandas as pd
iris = datasets.load_iris()
print(iris)

결과

 

                                     ...

 

labels = pd.DataFrame(iris.target)
labels.columns=['labels']
labels

결과

 

data = pd.DataFrame(iris.data,columns=['Sepal length','Sepal width','Petal length','Petal width'])
data.head(5)

 

결과

 

fig = plt.figure(figsize=(6,6))
ax = Axes3D(fig, rect=[0, 0, .95, 1], elev=48, azim=134)
ax.scatter(data['Sepal length'],data['Sepal width'],data['Petal length'],c=labels,alpha=0.5)
ax.set_xlabel('Sepal lenth')
ax.set_ylabel('Sepal width')
ax.set_zlabel('Petal length')
plt.show()

결과

 

 

 

 

 

 

피쳐 별 Variance를 PCA 분석

 

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt
# Create scaler: scaler
scaler = StandardScaler()
# Create a PCA instance: pca
pca = PCA()
# Create pipeline: pipeline
pipeline = make_pipeline(scaler,pca)
# Fit the pipeline to 'samples'
pipeline.fit(data)

결과

 

features = range(pca.n_components_)
plt.bar(features, pca.explained_variance_)
plt.xlabel('PCA feature')
plt.ylabel('variance')
plt.xticks(features)
plt.show()

결과

분석을 해보면 PCA 분석에 의해서 변환된 피쳐 0,1의 Variation이 큰 것을 확인할 수 있습니다.

PCA 변환된 피쳐 중 0,1번 피쳐만 사용해서 시각화를 해보면 다음과 같습니다.

 

 

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
model = PCA(n_components=2)
pca_features = model.fit_transform(data)

pca_features

결과

 

xf = pca_features[:,0]
yf = pca_features[:,1]
plt.scatter(xf,yf,c=labels);
plt.show();

그림처럼 2차원으로 줄여도 IRIS 군집화의 특성이 남아 있는 것을 확인할 수 있습니다.

 

 

 

1차원 시각화

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

model = PCA(n_components=1)
pca_features = model.fit_transform(data)

xf = pca_features[:,0]
yf = len(xf)*[0]
plt.scatter(xf,yf);
plt.show();

 

 

2차원에 비해서 -1~4 사이에 분포된 두 개의 클래스 (녹색과 노란색)이 다소 겹치는 부분이 있지만, 전체적으로 봤을 때 1차원으로 변환해도 어느 정도 분류 특성을 유지하고 있는 것을 볼 수 있습니다.

 

다만, 중첩 현상이 발행하는데 이것을 줄여주는 차원 감소 기법으로는 t-SNE라는 방법을 사용할 수 있습니다.



 

 

 

 


출처

https://bcho.tistory.com/1209?category=555440
 

차원 감소(Dimension reduction) 와 PCA 분석

차원 감소와 PCA 분석 조대협 (http://bcho.tistory.com) 차원 감소 (Dimension reduction) 데이타를 분석할때 피쳐가 많으면 데이타 분석이 어렵고, 특히 3개 이상 (3차원)의 피쳐가 존재할 경우 시각화가 어려

bcho.tistory.com

 

 

 

 

 

반응형
LIST

'Deep Learning > 이론' 카테고리의 다른 글

정보 검색 개념  (0) 2021.02.18
BOW(Bag of Words)  (0) 2020.12.17
텍스트 분석(Text Analytics)  (0) 2020.12.14
Word2vec  (0) 2020.11.29
Word Embedding 이론  (0) 2020.11.25
Comments