Menu
CoddyTech

Dendrogramy

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 18 z 51.

Drzewo otwierające rozdział to dendrogram. Każda klamra łączy dwie grupy na wysokości, na której się połączyły: im dłuższe jej ramiona, tym bardziej były od siebie oddalone.

Przetnij go linią, a każda gałąź, którą linia przecina, stanie się grupą. Tutaj: 4:

Drzewo piłek sportowych z przerywaną linią na wysokości 1.2. Poniżej cztery grupy: softball, krykiet i baseball; tenis, tenis stołowy i golf; sama koszykówka; siatkówka, piłka ręczna i piłka nożna

scipy buduje drzewo, rysuje je i przecina za pomocą 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)

To wypisuje numer grupy dla każdej piłki, a piłka do koszykówki jest sama:

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

Przetnij najdłuższe odcinki: poniższe grupy są daleko od siebie.

challenge icon

Wyzwanie

Średni

Przewodnik morski grupuje 16 wielorybów i delfinów według długości, masy i głębokości nurkowania. Kod początkowy skaluje ich dane i odczytuje wysokość cięcia, cut.

  1. Zbuduj drzewo metodą Warda Z i narysuj je na ax: obróć nazwy zwierząt o 90 stopni, a kolory zatrzymaj na wysokości cięcia.
  2. Narysuj cięcie jako szarą przerywaną linię, a następnie wyświetl wykres.
  3. Wypisz liczbę grup.

Dla 11 owoców i cięcia na wysokości 3.5:

Cut at 3.5: 3 groups

Drzewo zatytułowane Fruits, z nazwami liści biegnącymi ku górze i szarą przerywaną linią na wysokości 3.5 przecinającą trzy kolorowe gałęzie: cytryna, limonka i truskawka; pomarańcza, grejpfrut i mango; winogrono, wiśnia, banan, jabłko i gruszka

Coddy opisuje twoje drzewo.

Spróbuj swoich sił

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

# 16 wielorybów i delfinów: długość ciała (m), masa (tonnes), maksymalna głębokość nurkowania (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)  # miejsce na nazwy pod drzewem
ax.set_title("Whales and Dolphins")
ax.set_ylabel("Merge height")

# Wpisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online