PCA
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 26번째.
PCA는 데이터가 가장 많이 퍼져 있는 방향을 찾고, 그 방향과 직각을 이루는 방향 중 가장 적합한 방향을 찾는 식으로 진행됩니다. 이를 주성분이라고 합니다. 와인 쌍의 경우:
각 행을 처음 몇 개의 성분에 투영한 그림자가 새로운 특성이 됩니다:
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는 분산을 따라가므로, 수백 단위인 프롤린처럼 단위가 큰 특성이 크기만으로 우위를 차지합니다:
챌린지
중급물 연구소에서 세 개의 샘에서 가져온 병을 검사하며, 각 병마다 8가지 측정값이 있습니다. 2D 지도로 샘을 구별할 수 있을까요? draw_springs(ax, points)는 샘에 따라 2D 점에 색을 입힙니다.
X를 스케일링한 다음 PCA로 2개의 구성 요소로 축소해points에 저장하세요.- 축소 전후의 특성 개수를 출력하세요.
draw_springs로 점을 그린 다음 표시하세요.
측정값이 6개인 다른 연구소의 경우:
From 6 features to 2Coddy가 지도를 설명해 줍니다.
직접 해보기
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")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러