Menu
CoddyTech

Дендрограммы

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 18 из 51.

Дерево в начале главы — это дендрограмма. Каждая скобка соединяет две группы на высоте, на которой они объединились: чем выше её ветви, тем дальше друг от друга они находились.

Разрежьте дерево линией, и каждая ветвь, которую пересекает линия, станет группой. Здесь их 4:

Дерево спортивных мячей с пунктирной линией на высоте 1.2. Под ним четыре группы: софтбол, крикет и бейсбол; теннис, настольный теннис и гольф; баскетбол отдельно; волейбол, гандбол и футбол

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]

Разрежьте самые длинные рёбра: группы ниже находятся далеко друг от друга.

challenge icon

Задание

Средне

Морской гид группирует 16 китов и дельфинов по длине, весу и глубине погружения. В стартовом коде масштабируются их параметры и считывается высота отсечения cut.

  1. Построй дерево Уорда Z и отобрази его на ax: поверни названия животных на 90 градусов, а цвета ограничь высотой отсечения.
  2. Нарисуй высоту отсечения серой пунктирной линией, затем отобрази график.
  3. Выведи количество групп.

Для 11 фруктов и высоты отсечения 3.5:

Cut at 3.5: 3 groups

Дерево под названием «Фрукты»: названия листьев направлены вверх, а серая пунктирная линия на высоте 3.5 пересекает три цветные ветви: лимон, лайм и клубника; апельсин, грейпфрут и манго; виноград, вишня, банан, яблоко и груша

Coddy опишет твоё дерево.

Попробуйте сами

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

# 16 китов и дельфинов: длина тела (м), вес (тонны), максимальная глубина погружения (м)
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")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение без учителя

Потренируйтесь самостоятельно: Онлайн-компилятор Python