이웃을 위한 스케일 조정
Coddy Machine Learning 여정의 지도 학습 섹션에 포함된 레슨. 58개 중 9번째.
k-NN은 거리를 측정하므로, 큰 숫자의 특성 하나가 나머지를 압도합니다. 2절에서 경고한 내용이죠. 여기서는 강까지의 거리(미터)가 고도를 압도합니다:
먼저 스케일링하세요. 훈련 행에만 스케일러를 학습시킨 다음 두 데이터 세트를 모두 변환하세요:
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에서 높아졌습니다. 테스트 행은 계속 보이지 않습니다. 스케일러는 해당 행에서 아무것도 학습하지 않습니다.
챌린지
쉬움스마트 미터는 meter.csv에서 전력(와트)과 작동 시간(분)을 바탕으로 작동 중인 가전제품을 추측합니다. 시작 코드는 k를 읽고 원시 특성에 대한 k-NN의 정확도를 출력합니다.
- 훈련 행에
StandardScaler를 학습시키고 두 데이터 세트를 모두 변환합니다. - 변환된 행을 사용해 동일한 k의 k-NN 모델을 학습시키고, 정확도를 소수점 이하 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)}")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러