Menu
CoddyTech

Biểu đồ dendrogram

Thuộc phần Học không giám sát trong hành trình Machine Learning của Coddy. Bài học 18 trên 51.

Cây mở đầu chương là một biểu đồ phân cụm. Mỗi nhánh nối hai nhóm tại độ cao chúng được gộp lại: nhánh càng cao thì hai nhóm càng cách xa nhau.

Cắt cây bằng một đường thẳng, mỗi nhánh mà đường thẳng cắt qua sẽ trở thành một nhóm. Ở đây có 4 nhóm:

Cây bóng thể thao với một đường nét đứt ở độ cao 1.2. Bên dưới là bốn nhóm: bóng mềm, cricket và bóng chày; quần vợt, bóng bàn và golf; bóng rổ đứng riêng; bóng chuyền, bóng ném và bóng đá

scipy tạo cây, vẽ cây và cắt cây bằng 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)

Lệnh này in ra số nhóm cho mỗi quả bóng, riêng quả bóng rổ:

[2 2 2 1 1 1 3 3 3 4]

Đi tắt qua những cạnh dài nhất: các nhóm bên dưới cách nhau khá xa.

challenge icon

Thử thách

Trung bình

Một hướng dẫn viên về sinh vật biển phân nhóm 16 con cá voi và cá heo theo chiều dài, cân nặng và độ sâu khi lặn. Phần code khởi đầu chuẩn hóa dữ liệu của chúng và đọc độ cao cắt, cut.

  1. Tạo cây phân cấp Ward Z và vẽ cây trên ax: tên các loài vật xoay 90 độ, màu sắc dừng ở độ cao cắt.
  2. Vẽ đường cắt nét đứt màu xám, sau đó hiển thị biểu đồ.
  3. In ra số nhóm.

Với 11 loại quả và độ cao cắt là 3.5:

Cut at 3.5: 3 groups

Một cây có tiêu đề Fruits, tên các loại quả hướng lên trên và một đường nét đứt màu xám ở độ cao 3.5 cắt qua ba nhánh màu: chanh vàng, chanh xanh và dâu tây; cam, bưởi và xoài; nho, anh đào, chuối, táo và lê

Coddy mô tả cây của bạn.

Tự làm thử

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import linkage, dendrogram, fcluster

# 16 cá voi và cá heo: chiều dài cơ thể (m), cân nặng (tấn), độ sâu lặn lớn nhất (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)  # chừa chỗ cho tên bên dưới cây
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học không giám sát

Tự luyện tập: Trình biên dịch Python online