Загрузка данных


import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.cluster import AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
import scipy.cluster.hierarchy as shc

# Загружаем набор данных ирисов
iris = load_iris()

# Используем любые два признака из четырёх
# Возьмём длину чашелистика и ширину чашелистика
X = iris.data[:, :2]

# Масштабируем данные
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Строим дендрограмму
plt.figure(figsize=(10, 6))
plt.title('Дендрограмма для набора ирисов Фишера')
dendrogram = shc.dendrogram(shc.linkage(X_scaled, method='ward'))
plt.xlabel('Объекты')
plt.ylabel('Расстояние')
plt.show()

# Выполняем иерархическую кластеризацию
cluster = AgglomerativeClustering(
    n_clusters=3,
    metric='euclidean',
    linkage='ward'
)

labels = cluster.fit_predict(X_scaled)

print("Метки кластеров:")
print(labels)

# Визуализация результата
plt.figure(figsize=(7, 5))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='rainbow', s=50)

plt.title('Иерархическая кластеризация ирисов Фишера')
plt.xlabel('Длина чашелистика')
plt.ylabel('Ширина чашелистика')
plt.grid(True)
plt.show()