특성으로서의 클러스터
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 40번째.
직선 모델은 휘어질 수 없습니다. 세 마을의 전화 신호는 각 마을 기지국에서 멀어질수록 약해지지만, 위치만으로는 그 형태가 드러나지 않습니다:
k-means는 마을을 찾습니다. km.transform은 각 행에서 모든 중심까지의 거리를 구하고, .min(axis=1)은 가장 가까운 거리를 선택합니다:
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X_train)
near_train = km.transform(X_train).min(axis=1)
near_test = km.transform(X_test).min(axis=1)
X_train2 = np.column_stack([X_train, near_train])
X_test2 = np.column_stack([X_test, near_test])열 하나를 추가한 것만으로 선형 모델의 테스트 R 제곱 값이 0.000에서 0.886으로 상승합니다.
스케일러처럼 학습 행에만 k-means를 적합한 다음, 두 데이터 세트를 모두 변환하세요.
챌린지
중급축제의 음향팀은 사람들이 서 있는 곳의 소음이 얼마나 큰지 알고 싶어 합니다. 시작 코드는 crowd.csv를 분할하고, k를 읽은 다음 위치만 사용한 점수를 출력합니다.
- 훈련 위치에
k개의 클러스터로 k-means를 학습시킵니다. - 두 데이터 세트 모두에서 각 행의 가장 가까운 중심까지의 거리를 세 번째 열로 추가합니다.
- 새로운 테스트 R 제곱과 향상된 값을 소수점 3자리까지 출력합니다.
다른 축제에서 k = 4인 경우:
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637직접 해보기
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans
# 축제 참가자 250명: 서 있던 위치 (m)와 그곳의 소음 수준 (dB)
crowd = pd.read_csv("crowd.csv")
X = crowd[["x_m", "y_m"]].to_numpy()
y = crowd["sound_db"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())
# 훈련 열에 선형 회귀 모델을 학습시키고 테스트 열에 대한 R 제곱값을 반환합니다
def test_r2(A_train, A_test):
model = LinearRegression().fit(A_train, y_train)
return model.score(A_test, y_test)
before = test_r2(X_train, X_test)
print(f"Position only: R squared {before:.3f}")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러