Menu
CoddyTech

PCA

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

PCA는 데이터가 가장 많이 퍼져 있는 방향을 찾고, 그 방향과 직각을 이루는 방향 중 가장 적합한 방향을 찾는 식으로 진행됩니다. 이를 주성분이라고 합니다. 와인 쌍의 경우:

오른쪽 위로 퍼져 있는 구름 형태의 정규화된 와인 쌍. 중심에서 뻗어 나온 빨간색 화살표 두 개가 보이며, 긴 화살표인 주성분 1은 구름의 방향을 따르고, 짧은 화살표인 주성분 2는 구름을 가로지릅니다

각 행을 처음 몇 개의 성분에 투영한 그림자가 새로운 특성이 됩니다:

from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)

13개의 와인 측정값 모두에 대해 다음을 출력합니다: (178, 13) (178, 2).

먼저 스케일을 조정하세요. PCA는 분산을 따라가므로, 수백 단위인 프롤린처럼 단위가 큰 특성이 크기만으로 우위를 차지합니다:

178개 와인의 PCA 지도 두 개. 왼쪽은 스케일 조정 전으로, 세 가지 품종이 하나의 얼룩처럼 겹쳐 있습니다. 오른쪽은 먼저 스케일을 조정한 결과로, 세 개의 뚜렷한 그룹이 보입니다

challenge icon

챌린지

중급

물 연구소에서 세 개의 샘에서 가져온 병을 검사하며, 각 병마다 8가지 측정값이 있습니다. 2D 지도로 샘을 구별할 수 있을까요? draw_springs(ax, points)는 샘에 따라 2D 점에 색을 입힙니다.

  1. X를 스케일링한 다음 PCA로 2개의 구성 요소로 축소해 points에 저장하세요.
  2. 축소 전후의 특성 개수를 출력하세요.
  3. draw_springs로 점을 그린 다음 표시하세요.

측정값이 6개인 다른 연구소의 경우:

From 6 features to 2

제목이 Spring Waters in 2D인 차트. 가로축은 첫 번째 구성 요소, 세로축은 두 번째 구성 요소이며, 알파인 병은 왼쪽 아래, 화산 병은 오른쪽 아래, 해안 병은 위쪽에 있고 범례가 있음

Coddy가 지도를 설명해 줍니다.

직접 해보기

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# 물 분석 실험실: 세 곳의 샘에서 가져온 물병 120개 각각에 대한 측정값 8개
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# 샘별로 한 그룹씩 2D 점을 범례와 함께 산점도로 표시합니다
def draw_springs(ax, points):
    for spring in ["alpine", "volcanic", "coastal"]:
        rows = (waters["spring"] == spring).to_numpy()
        ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")

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

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

비지도 학습의 모든 레슨

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