Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по ОМО 2025 / Baraeva_Elizaveta_lb2.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
1 Мб
Скачать
☆

2.5. Постройте диаграмму Вороного для результатов кластеризации. На диаграмме отметьте центроиды полученных кластеров.

Создадим функцию voronoi, которая принимает обученную модель, подготовленные данные, а также границы графика. Сначала извлекаются центроиды кластеров из модели, затем строится диаграмма Вороного. На графике отображаются точки данных, раскрашенные в соответствии с их кластером, и центроиды, помеченные красными крестами. Далее устанавливаются границы осей, добавляются подписи осей и легенда. Функция вызывается для датасетов blobs и circles. Реализация представлена в Листинге 2.5.1. Диаграммы изображены на Рисунке 2.5.2 и Рисунке 2.5.3.

Листинг 2.5.1 – Реализация построения диаграмм Вороного для результатов кластеризации

def voronoi(data_km, data_norm, minn, maxx):

centroids = data_km.cluster_centers_

ax = plt.gca()

vor = Voronoi(centroids)

voronoi_plot_2d(vor, ax, show_vertices=False)

plt.scatter(data_norm[:, 0], data_norm[:, 1], c=data_km.labels_, edgecolors='black')

plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='X', s=200, label='Центроиды', edgecolors='black')

ax.set_xlim([minn, maxx])

ax.set_ylim([minn, maxx])

plt.xlabel("x")

plt.ylabel("y")

plt.legend()

plt.show()

voronoi(blobs_km, blobs_norm, -0.02, 1.02)

voronoi(circles_km, circles_std, -2.1, 2.1)

Рисунок 2.5.2 – Диаграмма Вороного для датасета blobs

Рисунок 2.5.3 – Диаграмма Вороного для датасета circles

2.6. Постройте для каждого признака диаграмму “box-plot” или “violin-plot”, с разделением по кластерам. Сделайте выводы о разделении кластеров и успешности применения кластеризации K-means к набору данных.

Создадим функцию violin_plot, которая принимает датафрейм с метками кластеров, количество кластеров, размер графика и название анализируемого признака. Сначала она сортирует датафрейм по возрастанию номеров кластеров, затем создает отдельную скрипичную диаграмму для каждого кластера, добавляет заголовок и подписывает оси. Функция вызывается для двух признаков датасетов blobs и circles. Реализация представлена в Листинге 2.6.1. Диаграммы изображены на Рисунке 2.6.2 – Рисунке 2.6.5.

Листинг 2.6.1 – Реализация построения диаграмм violin-plot

def violin_plot(norm_df, n_clust, figsize, attribute):

sorted_df = norm_df.sort_values('cluster')

plt.figure(figsize=figsize)

plt.violinplot([sorted_df[sorted_df['cluster'] == i][attribute] for i in range(n_clust)])

plt.title(f'Распределение {attribute} по кластерам')

plt.xticks([i+1 for i in range(n_clust)], [f'Кластер {i}' for i in range(n_clust)])

plt.ylabel(attribute)

plt.show()

violin_plot(blobs_norm_df, 3, (6, 5), 'x')

violin_plot(blobs_norm_df, 3, (6, 5), 'y')

violin_plot(circles_std_df, 8, (10, 5), 'x')

violin_plot(circles_std_df, 8, (10, 5), 'y')

Рисунок 2.6.2 – Диаграмма распределения x для датасета blobs

Рисунок 2.6.3 – Диаграмма распределения y для датасета blobs

Рисунок 2.6.4 – Диаграмма распределения x для датасета circles

Рисунок 2.6.5 – Диаграмма распределения y для датасета circles

На Рисунке 2.6.2 видно, что кластер 2 четко выделяется, так как его значения x находятся в верхнем диапазоне (0.5-1.0). Кластеры 0 и 1 перекрываются в диапазоне (0-0.5), что может указывать на недостаточно четкое разделение между ними. Форма плотности распределений всех кластеров схожи. Также на Рисунке 2.6.3 ситуация похожая. Кластер 1 четко выделяется, а кластеры 0 и 2 перекрываются в диапазоне. Форма плотности распределений 0 и 1 кластеров схожи. Кластер 3 имеет более плотное распределение.

На Рисунке 2.6.4 видно, что кластеры попарно перекрываются. Кластеры 0 и 7 перекрываются в диапазоне от 0.5 до 2, кластеры 1 и 2 перекрываются в диапазоне от -1 до 0.5, кластеры 3 и 4 перекрываются в диапазоне от -0.5 до 1, кластеры 5 и 6 перекрываются в диапазоне от -2 до -0.5. Это может указывать на недостаточно четкое разделение между ними. Ширина распределения кластеров 0, 2, 4, 6 схожа, также и у кластеров 1, 3, 5, 7. Нормальная форма плотности распределений у кластеров 0 и 6. На Рисунке 2.6.5 видно, что кластеры 1, 3, 5 перекрываются в диапазоне от -1 до 1. Ширина распределения кластеров 0, 1, 3, 5, 6, 7 почти одинаковая, но только у 3 и 7 схожая плотность. Кластеры 2 и 4 имеют одинаковую ширину распределения, но разную плотность.

Я считаю, что для датасета blobs кластеризация K-means применилась успешно, в то время как для датасета circles кластеризация прошла менее успешно из-за большого количества асимметрий и перекрытий.

Соседние файлы в папке Лабы по ОМО 2025