아이리스 데이터셋에 대한 주성분 분석

Beginner

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

소개

이 실습에서는 파이썬 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 는 데이터셋의 차원을 줄이고 가장 중요한 특징을 식별하는 데 사용할 수 있는 강력한 기술입니다.