Menu
CoddyTech

엘보 방법

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

k에 대한 관성도를 그래프로 그려 보세요. 새로운 중심이 실제 그룹을 나눌 때마다 관성도는 급격히 떨어지고, 그다음에는 완만해집니다. 꺾이는 지점인 엘보가 적절한 k입니다:

k from 1 to 8의 두 관성도 곡선. 왼쪽은 사과로, k = 3까지 급격히 떨어진 뒤 거의 평평해지며 3에 점선이 그어져 있습니다. 오른쪽은 그룹이 없는 점들로, 꺾이는 지점이 없는 매끄러운 곡선입니다

대략적인 기준: 중심을 하나 더 추가해도 관성이 4분의 1 미만으로만 줄어들면 멈추세요. 사과의 경우 감소율은 56%, 그다음 69%, 그리고 겨우 15%였습니다. 따라서 k = 3입니다:

ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")

굴곡이 없는 완만한 곡선은 뚜렷한 그룹이 없다는 뜻입니다. 다음 수업에서는 두 번째 판단 기준을 소개합니다.

challenge icon

챌린지

쉬움

식물 앱은 빛과 물의 필요량에 따라 실내 식물을 관리 계획으로 분류합니다. 시작 코드에는 k from 1 to 8의 관성값, 차트, 그리고 cutoff가 들어 있습니다.

  1. k = 1부터 올라가면서, 다음 k가 관성값을 cutoff보다 적게 줄이는 지점에서 멈추세요. 해당 k를 출력하세요.
  2. k에 따른 관성값을 점으로 표시하고, 해당 k에 수직 점선을 그린 다음, 그래프를 표시하세요.

다른 앱의 cutoff가 0.25인 경우:

Care plans: 3

k from 1 to 8의 Elbow: Care Plans라는 제목의 관성 곡선. 각 k에 점이 있으며, k = 3까지 급격히 하락한 다음 거의 평평해지고, 3에 수직 점선이 그어져 있습니다.

그러면 Coddy가 차트를 설명합니다.

직접 해보기

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# 아래 줄은 변경하지 마세요
rng = np.random.default_rng(17)
# 식물 종류 4가지: 각각의 일반적인 빛과 물 필요량, 그리고 개체 수
kinds = [(8.5, 2, 35), (2.5, 7.5, 30), (5, 5, 30), (8, 8, 25)]
parts = []
for l, w, n in kinds:
    parts.append(np.column_stack([rng.normal(l, 0.8, n), rng.normal(w, 0.8, n)]))
# 실내 식물 120개, 각 행에 하나씩: 빛과 물 필요량을 1부터 10까지의 점수로 표시
plants = np.clip(np.round(np.concatenate(parts), 1), 1, 10)

# Inertia에서 가져온 k = 1부터 8까지의 관성 값
ks = list(range(1, 9))
inertias = []
for k in ks:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(plants)
    inertias.append(km.inertia_)

cutoff = float(input())
fig, ax = plt.subplots()
ax.set_title("Elbow: Care Plans")
ax.set_xlabel("k")
ax.set_ylabel("Inertia")

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

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

비지도 학습의 모든 레슨

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