주성분 분석

Beginner

This tutorial is from open-source community. Access the source code

소개

주성분 분석 (PCA) 은 데이터를 단순화하는 통계적 기법입니다. 선형 변환 기법으로 데이터에서 가장 중요한 특징이나 패턴을 찾습니다. PCA 는 차원 축소, 데이터 압축 및 특징 추출을 위해 데이터 분석 및 머신 러닝에서 널리 사용됩니다. 이 실습에서는 파이썬의 scikit-learn 라이브러리를 사용하여 데이터 세트에 PCA 를 적용하고 결과를 시각화할 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.

때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 Labby 에 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 가져오기

이 실습에서 필요한 라이브러리를 가져옵니다. 숫자 연산에는 numpy, 시각화에는 matplotlib, PCA 에는 scikit-learn 을 사용합니다.

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

데이터 생성

이 실습에서는 임의의 데이터 세트를 생성합니다. 데이터 세트는 x, y, z 세 개의 변수를 가집니다. xy는 평균 0, 표준 편차 0.5 인 정규 분포 난수로 정의합니다. z 또한 평균 0, 표준 편차 0.1 인 정규 분포 난수입니다.

e = np.exp(1)
np.random.seed(4)

y = np.random.normal(scale=0.5, size=(30000))
x = np.random.normal(scale=0.5, size=(30000))
z = np.random.normal(scale=0.1, size=len(x))

PCA 수행

다음으로, 데이터 세트에 PCA 를 수행합니다. 먼저 x, y, z를 연결하여 3 차원 배열 Y를 만듭니다. 그런 다음 PCA 클래스의 인스턴스를 만들고 데이터에 맞춥니다. 그런 다음 PCA 객체의 components_ 속성을 사용하여 주요 구성 요소에 액세스할 수 있습니다.

Y = np.c_[x, y, z]
pca = PCA(n_components=3)
pca.fit(Y)
components = pca.components_

PCA 결과 시각화

PCA 결과를 시각화하여 주요 구성 요소를 플롯합니다. 데이터의 3 차원 산점도를 생성하고 각 점을 밀도에 따라 색상으로 표시합니다. 그런 다음 첫 번째 두 개의 주요 구성 요소를 평면으로 플롯합니다. 데이터의 두 가지 다른 보기에 대해 이 프로세스를 반복합니다.

fig = plt.figure(figsize=(10, 5))

## 첫 번째 보기
ax = fig.add_subplot(121, projection="3d", elev=-40, azim=-80)
ax.set_title("View 1")

## 데이터 플롯
density = np.exp(-(x ** 2 + y ** 2))
ax.scatter(x, y, z, c=density, cmap="plasma", marker="+", alpha=0.4)

## 주요 구성 요소 플롯
v1 = components[:, 0]
v2 = components[:, 1]
x_pca_plane = np.array([v1[0], -v1[0], -v1[0], v1[0]])
y_pca_plane = np.array([v1[1], -v1[1], -v1[1], v1[1]])
z_pca_plane = np.array([v1[2], -v1[2], v1[2], v1[2]])
ax.plot_surface(x_pca_plane, y_pca_plane, z_pca_plane, alpha=0.2)

## 두 번째 보기
ax = fig.add_subplot(122, projection="3d", elev=30, azim=20)
ax.set_title("View 2")

## 데이터 플롯
density = np.exp(-(x ** 2 + y ** 2))
ax.scatter(x, y, z, c=density, cmap="plasma", marker="+", alpha=0.4)

## 주요 구성 요소 플롯
v1 = components[:, 0]
v2 = components[:, 1]
x_pca_plane = np.array([v1[0], -v1[0], -v1[0], v1[0]])
y_pca_plane = np.array([v1[1], -v1[1], -v1[1], v1[1]])
z_pca_plane = np.array([v1[2], -v1[2], v1[2], v1[2]])
ax.plot_surface(x_pca_plane, y_pca_plane, z_pca_plane, alpha=0.2)

plt.show()

요약

이 실험에서 파이썬의 scikit-learn 라이브러리를 사용하여 데이터 세트에 PCA 를 수행하는 방법을 배웠습니다. 세 개의 변수를 가진 임의의 데이터 세트를 생성하고 PCA 를 수행한 후 결과를 시각화했습니다. 3 차원 산점도에 데이터를 플롯하고 첫 번째 두 개의 주요 구성 요소에 대한 평면을 추가했습니다. PCA 는 데이터의 차원을 줄이고 가장 중요한 패턴이나 특징을 찾는 강력한 기술입니다.