Menu
CoddyTech

압축하고 재구성하기

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

스캔의 구성 요소 점수는 레시피와 같습니다. 평균 스캔에서 시작한 다음, 각 패턴에 해당 점수를 곱해 더합니다. inverse_transform은 이 레시피를 따라 64픽셀로 되돌립니다:

pca = PCA(n_components=10).fit(X)
codes = pca.transform(X)                # 스캔당 숫자 10개
rebuilt = pca.inverse_transform(codes)  # 다시 픽셀 64개

더 많은 숫자를 사용해 재구성한 세 가지 스캔이 있습니다:

0, 3, 5를 각각 숫자 2개, 5개, 10개, 20개로 재구성한 다음 실제 스캔을 보여줍니다. 숫자 2개로 재구성하면 세 가지 모두 비슷하게 흐릿하지만, 20개로 재구성하면 각각 선명하게 읽힙니다.

평균 숫자에 가까운 흐릿한 이미지를 나타내는 숫자는 몇 개뿐입니다. 구성 요소를 하나씩 추가할 때마다 세부 정보가 복원됩니다. 64개 대신 20개의 숫자만으로도 이미 선명하게 읽을 수 있습니다.

challenge icon

챌린지

중급

스마트 펜은 각 숫자를 k개의 PCA 숫자로 전송하고, 프로그램은 이를 읽습니다. 무엇이 손실될까요?

  1. X에 대해 k개의 구성 요소로 PCA를 학습합니다. 모든 스캔을 압축한 다음 rebuilt로 재구성합니다.
  2. 아래 줄을 출력합니다. 오차는 X와의 절대 차이의 평균입니다.
  3. 가장 최근 스캔인 X[-1]을 axs[0]에 그리고, 재구성한 결과를 axs[1]에 그립니다. 둘 다 gray_r를 사용합니다. 표시합니다.

7의 경우:

Sent: 7 numbers per scan instead of 64
Average pixel error: 1.739

그리고 다음과 같이 그립니다. 그런 다음 Coddy가 두 패널을 설명합니다.

나란히 놓인 8×8 그림 두 개: 펜의 가장 최근 스캔인 8과 7개의 숫자로 재구성한, 더 흐릿한 8

직접 해보기

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

# 64픽셀로 이루어진 스캔 1,797개; 펜의 최신 스캔은 마지막 행에 있습니다
digits = load_digits()
X = digits.data
k = int(input())

# 아래 줄은 변경하지 마세요
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")

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

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

비지도 학습의 모든 레슨

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