Menu
CoddyTech

이웃을 위한 스케일 조정

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

k-NN은 거리를 측정하므로, 큰 숫자의 특성 하나가 나머지를 압도합니다. 2절에서 경고한 내용이죠. 여기서는 강까지의 거리(미터)가 고도를 압도합니다:

집 160채를 나타낸 지도 두 개. 가로축은 강까지의 거리, 세로축은 고도이며, 침수 또는 건조 상태를 표시합니다. 스케일링 전: 거리만으로 지도가 세로 줄무늬로 나뉘며 정확도는 0.6입니다. 스케일링 후: 침수된 집들이 강 근처의 낮은 모서리에 모이며 정확도는 0.925입니다

먼저 스케일링하세요. 훈련 행에만 스케일러를 학습시킨 다음 두 데이터 세트를 모두 변환하세요:

scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_s, y_train)
print(model.score(X_test_s, y_test))

이는 0.925를 출력하며, 0.6에서 높아졌습니다. 테스트 행은 계속 보이지 않습니다. 스케일러는 해당 행에서 아무것도 학습하지 않습니다.

challenge icon

챌린지

쉬움

스마트 미터는 meter.csv에서 전력(와트)과 작동 시간(분)을 바탕으로 작동 중인 가전제품을 추측합니다. 시작 코드는 k를 읽고 원시 특성에 대한 k-NN의 정확도를 출력합니다.

  1. 훈련 행에 StandardScaler를 학습시키고 두 데이터 세트를 모두 변환합니다.
  2. 변환된 행을 사용해 동일한 k의 k-NN 모델을 학습시키고, 정확도를 소수점 이하 3자리까지 출력합니다.
  3. 성능 향상 폭을 출력합니다.

다른 가정에서 k = 5인 경우:

Unscaled accuracy: 0.65
Scaled accuracy: 0.875
Scaling gains 0.225

직접 해보기

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

# 가전제품을 한 번 사용할 때마다 한 행: 전력은 와트 단위, 작동 시간은 분 단위, 가전제품의 종류
meter = pd.read_csv("meter.csv")
X = meter[["watts", "minutes"]]
y = meter["appliance"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())

# 원본 특성에 k-NN 적용
raw_model = KNeighborsClassifier(n_neighbors=k)
raw_model.fit(X_train, y_train)
raw = raw_model.score(X_test, y_test)
print(f"Unscaled accuracy: {round(raw, 3)}")

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

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

지도 학습의 모든 레슨

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