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()