관성
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 6번째.
이 장에서는 k를 선택하는 방법을 다룹니다. 장을 마치면 빵집의 배달을 위한 k를 선택하고 구역을 지도에 표시하게 됩니다:
먼저, 점수입니다. 관성은 각 점에서 해당 중심까지의 거리의 제곱을 모두 더합니다. 점들이 중심에 가까이 모여 있을수록 값이 작아집니다.
KMeans는 값을 inertia_에 저장합니다. 사과 180개에 대해:
for k in [1, 2, 3, 4]:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(X)
print(k, round(km.inertia_))다음이 출력됩니다:
1 1718
2 752
3 230
4 196중심이 많을수록 방사선은 짧아집니다. k가 커질수록 관성은 항상 줄어듭니다. 점마다 중심이 하나씩 있으면 관성은 0이므로, 가장 작다고 해서 가장 좋은 것은 아닙니다.
챌린지
쉬움도자기 공방에서는 몇 가지 크기의 상자에 꽃병을 포장합니다. 각 꽃병은 가장 가까운 크기의 상자에 들어가며, 관성은 꽃병이 얼마나 잘 맞지 않는지 나타냅니다. 프로그램은 도자기 공방에서 허용하는 최대 부적합 정도인 budget을 읽습니다.
- k = 1, 2, 3 등으로 시도합니다.
vases에 KMeans를 맞추고 각 k의 관성을 반올림하여 출력합니다. - 관성이 예산 이내인 첫 번째 k에서 멈추고 출력합니다.
다른 도자기 공방의 경우:
k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3직접 해보기
import numpy as np
from sklearn.cluster import KMeans
# 아래 줄은 변경하지 마세요
rng = np.random.default_rng(8)
# 꽃병의 네 종류: 일반적인 높이와 너비(cm), 그리고 각 종류의 개수
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 꽃병 80개, 각 행에 하나씩: 높이와 너비(cm)
vases = np.round(np.concatenate(parts), 1)
# 도자기 공방에서 허용하는 최대 오차(inertia 기준)
budget = int(input())
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러