Menu
CoddyTech

클러스터와 알려진 레이블 비교

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

레이블은 있지만 k-means가 이를 본 적이 없다면, 무엇을 찾았는지 확인하세요. pd.crosstab은 클러스터와 레이블의 각 쌍을 셉니다.

labels = KMeans(n_clusters=3, n_init=10, random_state=0).fit_predict(X)
print(pd.crosstab(labels, kind))

길이와 카페인 함량을 기준으로 군집화한 3종류의 커피콩 150개: 군집마다 행 하나, 종류마다 열 하나:

군집이 행에, 커피 종류가 열에 있는 3x3 개수 표: 아라비카, 리베리카, 로부스타. 군집 0에는 로부스타 원두 49개가 있고, 군집 1에는 아라비카 48개, 리베리카 3개, 로부스타 1개가 있으며, 군집 2에는 리베리카 47개와 아라비카 2개가 있습니다

각 군집은 대부분 한 가지 종류로 이루어져 있습니다. 콩 6개만 다른 군집에 들어갔습니다. 그리고 k-means는 레이블을 전혀 보지 않았습니다.

하지만 군집은 클래스가 아닙니다. 가까운 일치는 클래스들이 데이터에서 차이가 난다는 뜻입니다. 일치도가 낮은 것은 발견 사항이지 버그가 아닙니다.

challenge icon

챌린지

중급

k-means 군집은 붓꽃 종을 찾아낼까요? 시작 코드는 꽃의 특성을 스케일링하고, 이름을 species에 저장한 뒤, k를 입력받아 군집화합니다.

  1. 군집과 종을 교차표로 나타내세요.
  2. 각 종에 대해 전체 개수 중 하나의 군집에 속하는 가장 큰 개수를 출력하세요.
  3. 단일 종만 포함하는 군집의 개수를 세세요.

다른 정원에서 k = 3인 경우:

setosa: 48 of 50 share a cluster
versicolor: 41 of 50 share a cluster
virginica: 33 of 50 share a cluster
Clusters with one species: 0 of 3

직접 해보기

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

# 스케일링된 붓꽃 150개와 각 붓꽃의 품종명(k-means에는 숨김)
iris = load_iris()
X = StandardScaler().fit_transform(iris.data)
species = iris.target_names[iris.target]

k = int(input())
labels = KMeans(n_clusters=k, n_init=10, random_state=0).fit_predict(X)

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

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

비지도 학습의 모든 레슨

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