Menu
CoddyTech

패턴으로서의 성분

Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 30번째.

PCA는 무엇을 살펴봤을까요? 각 성분은 픽셀당 하나씩 총 64개의 가중치로 이루어져 있으며, components_에는 성분마다 한 행씩 들어 있습니다.

pca = PCA(n_components=4).fit(X)
print(pca.components_.shape)

이 코드는 (4, 64)를 출력합니다. 한 행을 8×8로 재구성하면 그림이 됩니다. cmap="gray_r"는 회색을 반전한 것으로, 큰 가중치는 어둡게, 음수 가중치는 밝게 표시합니다:

ax.imshow(pca.components_[0].reshape(8, 8), cmap="gray_r")

숫자 이미지의 처음 네 개 구성 요소를 8×8 그림으로 나타낸 모습. 가중치가 0에 가까운 부분은 회색, 큰 부분은 어둡게, 음수인 부분은 밝게 표시됨

구성 요소 1은 4와 6의 잉크가 있는 곳에서 어둡기 때문에, 지도에서 오른쪽에 위치합니다. 스캔의 잉크가 어두운 픽셀에 놓이면 높은 점수를 받습니다.

challenge icon

챌린지

중급

서예 선생님은 사람들이 숫자 하나를 쓰는 다양한 방식을 보고 싶어 합니다. 프로그램은 숫자를 읽고, 시작 코드는 각 숫자의 스캔 데이터를 X에 저장합니다.

  1. X에 3개의 구성 요소로 PCA를 맞춥니다.
  2. 구성 요소 i를 axs[i]에 cmap="gray_r"를 사용해 8×8 그림으로 그리고, 제목을 Component 1부터 Component 3까지 지정합니다.
  3. 차트를 표시합니다.

숫자 2에 대해서는 다음과 같이 그립니다. 그런 다음 Coddy가 패널을 설명합니다.

손으로 쓴 숫자 2의 구성 요소를 8×8 그림으로 나타낸 세 패널. 제목은 각각 Component 1, Component 2, Component 3이며, 각 패널에는 어둡고 밝은 획이 있습니다

직접 해보기

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

# 입력에서 읽어 온 한 숫자의 각 스캔: 행마다 64픽셀
d = int(input())
digits = load_digits()
X = digits.data[digits.target == d]

# 아래 줄을 변경하지 마세요
fig, axs = plt.subplots(1, 3)

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

비지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러