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

2.2. Проведите исследование оптимального количества кластеров методом силуэта. Сделайте выводы, о наиболее подходящем количестве кластеров.

Создадим функцию silhouette_method, которая принимает датасет и строит график. Внутри функции создается массив значений коэффициента силуэта. В цикле до 10 для каждого значения создаётся модель KMeans с соответствующим числом кластеров. Параметр n_init=5 означает, что алгоритм запустится 5 раз с разными начальными центрами кластеров. После обучения и предсказания модели на данных с помощью метода fit_predict, добавляем значение коэффициента силуэта через функцию silhouette_score в список sil_list. После цикла строится график. По оси x откладывается количество кластеров, по y – соответствующие значения коэффициента силуэта. В конце функция вызывается для датафреймов df_blobs и df_circles. Реализация представлена в Листинге 2.2.1. Графики изображены на Рисунке 2.2.2 и Рисунке 2.2.3.

Листинг 2.2.1 – Реализация метода силуэта

def silhouette_method(data):

sil_list = []

for i in range(1, 10):

temp_km = KMeans(i + 1, n_init=5)

temp_clust = temp_km.fit_predict(data)

sil_list.append(silhouette_score(data, temp_clust))

plt.plot(list(range(2, 11)), sil_list)

plt.ylabel('Среднее значение коэффициента силуэта')

plt.xlabel('Количество кластеров')

plt.xticks(list(range(1, 11)))

plt.grid()

plt.show()

silhouette_method(blobs_norm)

silhouette_method(circles_std)

Рисунок 2.2.2 – График метода силуэта для датафрейма df_blobs

Рисунок 2.2.3 – График метода силуэта для датафрейма df_circles

На Рисунке 2.2.2 видно, что максимум находится в точке 3. В то время как на Рисунке 2.2.3 максимальные значения находятся в интервале от 7 до 10. Учитывая предыдущий пункт, как мне кажется, следует взять количество кластеров равным 8.

2.3. Проведите кластеризацию алгоритмом k-means, с выбранным оптимальным количеством кластеров.

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

Листинг 2.3.1 – Кластеризация алгоритмом K-means

blobs_km = KMeans(n_clusters=3)

blobs_clust = blobs_km.fit_predict(blobs_norm)

circles_km = KMeans(n_clusters=8)

circles_clust = circles_km.fit_predict(circles_std)

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

Для каждого датасета подготовленные данные преобразуются в датафрейм. Далее добавляется колонка cluster с метками, полученными в результате кластеризации. После этого строится диаграмма рассеяния, где каждый кластер выделен своим цветом. Реализация представлена в Листинге 2.4.1. Диаграммы изображены на Рисунке 2.4.2 и Рисунке 2.4.3.

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

blobs_norm_df = pd.DataFrame(blobs_norm, columns=['x', 'y'])

blobs_norm_df['cluster'] = blobs_clust

sns.scatterplot(blobs_norm_df, x='x', y='y', hue='cluster', palette='tab10')

plt.show()

circles_std_df = pd.DataFrame(circles_std, columns=['x', 'y'])

circles_std_df['cluster'] = circles_clust

sns.scatterplot(circles_std_df, x='x', y='y', hue='cluster', palette='tab10')

plt.show()

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

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

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