Menu
CoddyTech

관성

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

이 장에서는 k를 선택하는 방법을 다룹니다. 장을 마치면 빵집의 배달을 위한 k를 선택하고 구역을 지도에 표시하게 됩니다:

도시의 배달 지점을 나타낸 지도. 동쪽 방향은 km 단위로 가로축에, 북쪽 방향은 미터 단위로 세로축에 표시되어 있으며, 45곳, 40곳, 25곳의 지점으로 이루어진 세 구역으로 나뉘고 각 구역의 한가운데에는 검은색 별표가 있음

먼저, 점수입니다. 관성은 각 점에서 해당 중심까지의 거리의 제곱을 모두 더합니다. 점들이 중심에 가까이 모여 있을수록 값이 작아집니다.

세 그룹에 속한 사과 36개가 각각 가는 회색 선으로 해당 그룹의 검은색 별 중심에 연결되어 있습니다. 관성은 각 선의 길이를 제곱한 뒤 모두 더합니다

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이므로, 가장 작다고 해서 가장 좋은 것은 아닙니다.

challenge icon

챌린지

쉬움

도자기 공방에서는 몇 가지 크기의 상자에 꽃병을 포장합니다. 각 꽃병은 가장 가까운 크기의 상자에 들어가며, 관성은 꽃병이 얼마나 잘 맞지 않는지 나타냅니다. 프로그램은 도자기 공방에서 허용하는 최대 부적합 정도인 budget을 읽습니다.

  1. k = 1, 2, 3 등으로 시도합니다. vases에 KMeans를 맞추고 각 k의 관성을 반올림하여 출력합니다.
  2. 관성이 예산 이내인 첫 번째 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())

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

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

비지도 학습의 모든 레슨

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