소개
이 실습에서는 파이썬 scikit-learn 을 사용하여 아이리스 데이터셋에 주성분 분석 (PCA) 을 수행합니다. PCA 는 데이터셋의 차원을 줄이면서 가능한 한 많은 분산을 유지하는 기술입니다. 간단히 말하면, 데이터셋에서 가장 중요한 특징을 식별하고 덜 중요한 특징을 제거하는 데 도움이 됩니다. 아이리스 데이터셋은 머신러닝 분야에서 유명한 데이터셋으로, 세 가지 다른 종류의 아이리스 꽃의 물리적 특성에 대한 정보를 포함합니다.
VM 팁
VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 Notebook 탭으로 전환하여 연습을 위한 Jupyter Notebook에 접근합니다.
때때로 Jupyter Notebook 이 완전히 로드되기까지 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사를 자동화할 수 없습니다.
학습 중 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 신속하게 해결해 드리겠습니다.
필요한 라이브러리 가져오기
필요한 라이브러리 - numpy, matplotlib.pyplot, scikit-learn 의 decomposition 및 datasets 모듈을 가져오겠습니다.
import numpy as np
import matplotlib.pyplot as plt
from sklearn import decomposition
from sklearn import datasets
데이터셋 로드
다음으로, scikit-learn 의 load_iris() 함수를 사용하여 아이리스 데이터셋을 로드합니다. 그런 다음 특징 (X) 과 대상 (y) 변수를 분리합니다.
iris = datasets.load_iris()
X = iris.data
y = iris.target
데이터셋 시각화
PCA 를 수행하기 전에 먼저 matplotlib 을 사용하여 3 차원으로 데이터셋을 시각화해 보겠습니다. 이를 통해 아이리스 꽃의 서로 다른 종류가 데이터셋에서 어떻게 분포되어 있는지 파악할 수 있습니다.
fig = plt.figure(1, figsize=(4, 3))
plt.clf()
ax = fig.add_subplot(111, projection="3d", elev=48, azim=134)
ax.set_position([0, 0, 0.95, 1])
plt.cla()
for name, label in [("Setosa", 0), ("Versicolour", 1), ("Virginica", 2)]:
ax.text3D(
X[y == label, 0].mean(),
X[y == label, 1].mean() + 1.5,
X[y == label, 2].mean(),
name,
horizontalalignment="center",
bbox=dict(alpha=0.5, edgecolor="w", facecolor="w"),
)
y = np.choose(y, [1, 2, 0]).astype(float)
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.nipy_spectral, edgecolor="k")
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
ax.zaxis.set_ticklabels([])
plt.show()
PCA 수행
이제 데이터셋을 시각화했으므로, 이제 PCA 를 수행해 보겠습니다. 이를 위해 scikit-learn 의 PCA() 함수를 사용할 것입니다. 데이터셋을 4 차원 (4 개의 특징) 에서 3 차원으로 줄이려고 하므로, 구성 요소의 수를 3 으로 설정합니다.
pca = decomposition.PCA(n_components=3)
pca.fit(X)
X = pca.transform(X)
축소된 데이터셋 시각화
마지막으로, 축소된 데이터셋을 3 차원으로 시각화해 보겠습니다. matplotlib 을 사용하여 이전 단계 (3 단계) 와 동일한 코드를 사용하지만, 이번에는 원본 데이터셋 대신 축소된 데이터셋 (X) 을 플롯합니다.
fig = plt.figure(1, figsize=(4, 3))
plt.clf()
ax = fig.add_subplot(111, projection="3d", elev=48, azim=134)
ax.set_position([0, 0, 0.95, 1])
plt.cla()
for name, label in [("Setosa", 0), ("Versicolour", 1), ("Virginica", 2)]:
ax.text3D(
X[y == label, 0].mean(),
X[y == label, 1].mean() + 1.5,
X[y == label, 2].mean(),
name,
horizontalalignment="center",
bbox=dict(alpha=0.5, edgecolor="w", facecolor="w"),
)
y = np.choose(y, [1, 2, 0]).astype(float)
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.nipy_spectral, edgecolor="k")
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
ax.zaxis.set_ticklabels([])
plt.show()
요약
이 실습에서는 파이썬 scikit-learn 을 사용하여 아이리스 데이터셋에 주성분 분석 (PCA) 을 수행하는 방법을 배웠습니다. 데이터셋을 로드하고 3 차원으로 시각화한 후, 차원을 줄이기 위해 PCA 를 적용하고, 마지막으로 축소된 데이터셋을 다시 3 차원으로 시각화했습니다. PCA 는 데이터셋의 차원을 줄이고 가장 중요한 특징을 식별하는 데 사용할 수 있는 강력한 기술입니다.