Menu
CoddyTech

PCA로 차원 축소하기

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

64픽셀은 숫자에 필요한 것보다 많습니다. PCA는 구성 요소의 개수 대신 분산의 비율을 목표로 삼을 수 있습니다:

첫 n개 구성 요소가 보존하는 숫자 분산 비율을 나타내는 상승 곡선으로, 처음에는 가파르다가 평평해집니다. 90%의 점선은 21개 구성 요소에서 곡선과 만납니다

n_components=0.9는 90%를 담는 데 필요한 최소한의 구성 요소를 유지합니다:

pca = PCA(n_components=0.9)
X_small = pca.fit_transform(X)
print(pca.n_components_, X_small.shape)

이것은 21 (1797, 21)을 출력합니다. 숫자는 3분의 1이지만 그림 대부분을 차지합니다.

여기에는 스케일러가 없습니다. 모든 픽셀이 0부터 16까지의 잉크라는 동일한 단위를 공유합니다. 스케일링하면 거의 비어 있는 가장자리 픽셀이 큰 특징으로 부풀려집니다.

challenge icon

챌린지

중급

스캔 데이터를 축소할 시간입니다. 프로그램은 유지할 분산의 비율을 읽습니다. 예를 들어 0.8입니다.

  1. 원본 픽셀에서 해당 비율을 유지하는 데 PCA가 필요한 성분의 수를 출력한 다음, 스케일링된 픽셀에서 필요한 수를 출력합니다.
  2. 더 적은 수의 성분이 필요한 버전을 유지합니다. 그 이름과 축소된 데이터의 형태를 출력합니다.

0.6의 경우:

Raw pixels: 7 components
Scaled pixels: 11 components
Keep: raw pixels, shape (1797, 7)

이제부터 프로젝트는 분산의 80%를 유지합니다.

직접 해보기

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Look at the Digits에서 가져옴: 64픽셀 스캔 이미지 1,797개, 잉크 값은 0부터 16까지
digits = load_digits()
X = digits.data
y = digits.target

# 유지할 분산의 비율, 예: 0.8
share = float(input())

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

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

비지도 학습의 모든 레슨

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