클러스터링 전에 스케일 조정하기
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 9번째.
K-means는 거리를 기준으로 그룹화하므로 단위가 큰 쪽이 지배적입니다. 보호소 고양이의 체중은 그램으로, 나이는 년으로 표시해 보세요. 500 g 차이가 10년 차이를 압도합니다.
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).
챌린지
쉬움아파트를 찾는 앱은 임대료와 역까지의 거리를 기준으로 매물 100개를 그룹화합니다. 시작 코드는 원본 열을 클러스터링하며, 모든 그룹이 역에서 약 3 km 떨어진 곳에 모여 있습니다. 달러 단위가 킬로미터 단위를 압도합니다.
StandardScaler를 사용해 두 열의 값을 스케일링하세요.- 대신 스케일링된 행을 클러스터링하세요. 보고서는 각 그룹을 실제 단위로 보여 주므로 그대로 유지하세요.
다른 도시의 경우:
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")
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러