Menu
CoddyTech

클러스터링 전에 스케일 조정하기

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

K-means는 거리를 기준으로 그룹화하므로 단위가 큰 쪽이 지배적입니다. 보호소 고양이의 체중은 그램으로, 나이는 년으로 표시해 보세요. 500 g 차이가 10년 차이를 압도합니다.

보호소 고양이 120마리를 나타낸 차트 두 개. 가로축은 나이(년), 세로축은 체중(그램)입니다. 왼쪽은 원시 데이터로 군집화한 결과로, 성묘가 체중 기준으로 나뉘어 어린 고양이와 나이 든 고양이가 뒤섞여 있습니다. 오른쪽은 스케일링 후 군집화한 결과로, 새끼 고양이, 성묘, 노령묘가 나이 기준으로 나뉘어 있습니다.

k-NN에서처럼 먼저 표준화하여 각 특성이 동일한 비중을 갖도록 합니다:

X_scaled = StandardScaler().fit_transform(X)
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X_scaled)

make_pipeline(StandardScaler(), KMeans(...))는 두 작업을 하나의 모델에서 모두 수행합니다. 그런 다음 각 그룹의 원래 행을 평균 내어 실제 단위로 읽습니다: X[km.labels_ == c].mean(axis=0).

challenge icon

챌린지

쉬움

아파트를 찾는 앱은 임대료와 역까지의 거리를 기준으로 매물 100개를 그룹화합니다. 시작 코드는 원본 열을 클러스터링하며, 모든 그룹이 역에서 약 3 km 떨어진 곳에 모여 있습니다. 달러 단위가 킬로미터 단위를 압도합니다.

  1. StandardScaler를 사용해 두 열의 값을 스케일링하세요.
  2. 대신 스케일링된 행을 클러스터링하세요. 보고서는 각 그룹을 실제 단위로 보여 주므로 그대로 유지하세요.

다른 도시의 경우:

38 flats: $1820 a month, 0.9 km out
33 flats: $1130 a month, 4.2 km out
29 flats: $2760 a month, 1.5 km out

직접 해보기

import pandas as pd
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 아파트 한 채당 한 행: 월세는 달러 단위, 역까지의 거리는 km 단위
flats = pd.read_csv("flats.csv")
X = flats[["rent", "station_km"]]

# 원본 열을 그대로 군집화합니다: 수정하세요
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)

# 각 그룹의 결과를 실제 단위로 보고하세요. 가장 큰 그룹부터 표시하세요
sizes = pd.Series(km.labels_).value_counts()
for c in sizes.index:
    group = flats[km.labels_ == c]
    print(f"{sizes[c]} flats: ${round(group['rent'].mean())} a month, {group['station_km'].mean():.1f} km out")
quiz icon실력 점검

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

비지도 학습의 모든 레슨

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