데이터과학 삼학년

Ch.6 Dimensionality Reduction: Squashing the Data Pancake with PCA 본문

Feature Engineering

Ch.6 Dimensionality Reduction: Squashing the Data Pancake with PCA

Dan-k 2020. 5. 6. 15:29
반응형

PCA (주성분 분석)

데이터의 분산을 최대로 보존하면서 데이터와 직교하는 새 기저(축)을 찾아 이에 투영(Projection)시켜 차원을 줄이는 방법

 

Feature Extraction

변수추출(Feature Extraction)은 기존 변수를 조합해 새로운 변수를 만드는 기법으로, 단순히 일부 중요 변수만을 빼내는 변수선택(Feature Selection)과는 대비됩니다. 변수추출에는 기존 변수 가운데 일부만 활용하는 방식이 있고, 모두 쓰는 방식이 있는데 PCA는 후자에 해당합니다. 아울러 PCA는 기존 변수를 선형결합(linear combination)해 새로운 변수를 만들어 냅니다.

 

Chapter 6. Dimensionality Reduction: Squashing the Data Pancake with PCA

In [1]:
from sklearn import datasets
from sklearn.decomposition import PCA
 

Example 6-1. Principal component analysis of the scikit-learn digits dataset

In [2]:
# 데이터 로드
digits_data = datasets.load_digits()
n = len(digits_data.images)

# 각 이미지는 8 * 8 배열로 표현된다.
# PCA에 대한 입력으로 사용하기 위해 이 배열을 평평하게 만든다.
image_data = digits_data.images.reshape((n, -1))
image_data.shape
Out[2]:
(1797, 64)
In [3]:
# 각 이미지가 나타내는 숫자의 레이블 확인
labels = digits_data.target
labels
Out[3]:
array([0, 1, 2, ..., 8, 9, 8])
In [4]:
# PCA 변환기를 데이터셋에 피팅
# 주성분의 수는 전체 분산의 최소 80%를 설명하는 수준에서 자동으로 선택된다.
pca_transformer = PCA(n_components=0.8)
pca_images = pca_transformer.fit_transform(image_data)
pca_transformer.explained_variance_ratio_
Out[4]:
array([0.14890594, 0.13618771, 0.11794594, 0.08409979, 0.05782415,
       0.0491691 , 0.04315987, 0.03661373, 0.03353248, 0.03078806,
       0.02372341, 0.02272697, 0.01821863])
In [5]:
pca_transformer.explained_variance_ratio_[:3].sum()
Out[5]:
0.4030395858767508
In [6]:
%matplotlib notebook
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
In [7]:
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for i in range(100):
    ax.scatter(pca_images[i,0], pca_images[i,1], pca_images[i,2], marker=r'${}$'.format(labels[i]), s=64)
    
ax.set_xlabel('Principal component 1')
ax.set_ylabel('Principal component 2')
ax.set_zlabel('Principal component 3')
 
 
 
Out[7]:
Text(0.5,0,'Principal component 3')

 

 

출처 : https://ratsgo.github.io/machine%20learning/2017/04/24/PCA/

728x90
반응형
LIST
Comments