- •Подготовка наборов данных:
- •Загрузите наборы.
- •1.2. Проверьте корректность загрузки.
- •1.3. Постройте диаграмму рассеяния набора данных. Опишите форму данных, и особенности в данных.
- •1.4. Подготовьте наборы данных проведя стандартизация или нормировку данных. Обоснуйте выбор операции.
- •2.1. Проведите исследование оптимального количества кластеров методов локтя. Сделайте выводы, о наиболее подходящем количестве кластеров.
- •2.2. Проведите исследование оптимального количества кластеров методом силуэта. Сделайте выводы, о наиболее подходящем количестве кластеров.
- •2.3. Проведите кластеризацию алгоритмом k-means, с выбранным оптимальным количеством кластеров.
- •2.4. Постройте диаграмму рассеяния результатов кластеризации с выделением разным цветом разных кластеров.
- •2.5. Постройте диаграмму Вороного для результатов кластеризации. На диаграмме отметьте центроиды полученных кластеров.
- •2.7. Рассчитайте для каждого кластера кол-во точек, среднее, ско, минимум и максимум. Сопоставьте результаты с построенными графиками.
- •3.1. Подберите параметры алгоритма dbscan, которые на ваш взгляд дают наилучшие результаты. Опишите процесс (почему и как изменяли параметры) подбора параметров.
- •3.2. Постройте диаграмму рассеяния результатов кластеризации с выделением разным цветом разных кластеров.
- •3.3. Сделайте выводы об успешности кластеризации.
- •4. Иерархическая кластеризация:
- •4.2. Постройте диаграмму рассеяния результатов кластеризации с выделением разным цветом разных кластеров.
- •4.3. Сравните результаты кластеризации с результатами, полученными в п.2 и п.3. Сделайте выводы о том, какой метод кластеризации подходит под каждый из наборов данных.
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
