덴드로그램
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 18번째.
이 장의 첫 번째 트리는 덴드로그램입니다. 각 괄호는 두 그룹이 합쳐진 높이에서 이들을 연결합니다. 다리가 높을수록 두 그룹은 더 멀리 떨어져 있었습니다.
선을 그어 자르면, 선이 지나가는 가지마다 그룹이 됩니다. 여기서는 4개입니다:
scipy는 트리를 만들고, 그린 다음, fcluster로 자릅니다:
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
Z = linkage(scaled, "ward")
dendrogram(Z, labels=names, leaf_rotation=90, color_threshold=1.2, ax=ax)
ax.axhline(1.2, color="gray", linestyle="--")
groups = fcluster(Z, t=1.2, criterion="distance")
print(groups)이것은 각 공에 대한 그룹 번호를 출력합니다. 농구공만 있습니다:
[2 2 2 1 1 1 3 3 3 4]가장 긴 변들을 가로질러 자르세요. 아래 그룹들은 서로 멀리 떨어져 있습니다.
챌린지
중급해양 안내서는 고래와 돌고래 16마리를 길이, 무게, 잠수 깊이에 따라 그룹으로 나눕니다. 시작 코드는 데이터를 표준화하고 자르는 높이인 cut을 읽습니다.
- 워드 트리
Z를 만들고ax에 그립니다. 동물 이름은 90도 회전하고, 색상은 자르는 높이에서 멈춥니다. - 자르는 위치를 회색 점선으로 표시한 다음, 그래프를 보여줍니다.
- 그룹 수를 출력합니다.
과일 11개와 자르는 높이 3.5를 사용하면 다음과 같습니다.
Cut at 3.5: 3 groupsCoddy가 트리를 설명합니다.
직접 해보기
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster
# 16마리의 고래와 돌고래: 몸길이 (m), 무게 (tonnes), 최대 잠수 깊이 (m)
whales = pd.read_csv("whales.csv")
names = list(whales["animal"])
scaled = StandardScaler().fit_transform(whales[["length_m", "weight_t", "dive_m"]])
cut = float(input())
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.3) # 트리 아래에 이름을 표시할 공간
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러