- •Подготовка наборов данных:
- •Загрузите наборы.
- •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. Сделайте выводы о том, какой метод кластеризации подходит под каждый из наборов данных.
4. Иерархическая кластеризация:
4.1. Проведите иерархическую кластеризацию для параметра linkage указанного в вашем варианте, используя количество кластеров, полученных в п.2 или п.3. Постройте дендрограмму. Сделайте выводы, о разделении кластеров и необходимости изменить количество кластеров (если считаете, что необходимо изменить количество кластеров, то повторите кластеризацию с другим количеством кластеров).
Для иерархической кластеризации импортируем AgglomerativeClustering из библиотеки sklearn.cluster. Создадим функцию plot_dendrogram, которая принимает датасет в виде numpy.ndarray и параметры для дендрограммы. Создается модель AgglomerativeClustering с параметрами, позволяющими построить полную дендрограмму (без ограничения на число кластеров). Для каждого шага объединения кластеров подсчитывается, сколько точек в них входит. Формируется linkage_matrix – матрица, которая описывает, какие кластеры объединяются, на каком расстоянии и сколько элементов они содержат. Строится сама дендрограмма с помощью dendrogram из scipy.cluster.hierarchy, а также добавляется подпись по оси x. В конце функция вызывается для двух датасетов blobs и circles. Реализация приведена в Листинге 4.1.1. Дендрограммы представлены на Рисунке 4.1.2 и Рисунке 4.1.3.
Листинг 4.1.1 – Реализация построения дендрограмм
from sklearn.cluster import AgglomerativeClustering from scipy.cluster.hierarchy import dendrogram
def plot_dendrogram(norm, **kwargs): model = AgglomerativeClustering(distance_threshold=0, n_clusters=None).fit(norm) counts = np.zeros(model.children_.shape[0]) n_samples = len(model.labels_) for i, merge in enumerate(model.children_): current_count = 0 for child_idx in merge: if child_idx < n_samples: current_count += 1 else: current_count += counts[child_idx - n_samples] counts[i] = current_count
linkage_matrix = np.column_stack([model.children_, model.distances_, counts]).astype(float) dendrogram(linkage_matrix, **kwargs) plt.xlabel("Количество точек в узле (или индекс точки, если скобки отсутствуют)") plt.show()
plot_dendrogram(blobs_norm, truncate_mode="level", p=3) plot_dendrogram(circles_std, truncate_mode="level", p=3) |
Рисунок 4.1.2 – Дендрограмма датасета blobs
Рисунок 4.1.3 – Дендрограмма датасета circles
Главный критерий – поиск значительного увеличения расстояния между объединяемыми кластерами. На Рисунке 4.1.2 видны 3 больших скачка, значит для этого датасета оптимальное количество кластеров – 3. На Рисунке 4.1.3 видны 3 больших скачка: с 10 до 20, с 7.5 до 17.5, с 5 до 12.5 и 1 поменьше: с 7.5 до 12.5. Для этого датасета оптимальное количество кластеров – 4.
4.2. Постройте диаграмму рассеяния результатов кластеризации с выделением разным цветом разных кластеров.
Создадим функцию hierarchy_clustering, которая принимает датафрейм и метки классов. В ней строится диаграмма рассеяния. До вызова функции используется иерархическая кластеризация. Для датасета blobs количество кластеров равно 3, а для датасета circles кластеризация производится для 8 и 4 кластеров, т.к. в п.2 и п.3 было получено разное количество кластеров. В конце функция вызывается 3 раза. Реализация приведена в Листинге 4.2.1. Диаграммы представлены на Рисунке 4.2.2, Рисунке 4.2.3 и Рисунке 4.2.4.
Листинг 4.2.1 – Реализация иерархической кластеризации и построения диаграмм рассеяния
def hierarchy_clustering(df, clust): plt.scatter(df.iloc[:, 0], df.iloc[:, 1], c=clust) plt.xlabel("x") plt.ylabel("y") plt.show()
blobs_ag_clust = AgglomerativeClustering(n_clusters = 3, linkage = 'ward').fit_predict(blobs_df) circles_ag_clust_8 = AgglomerativeClustering(n_clusters = 8, linkage = 'ward').fit_predict(circles_df) circles_ag_clust_4 = AgglomerativeClustering(n_clusters = 4, linkage = 'ward').fit_predict(circles_df)
hierarchy_clustering(blobs_df, blobs_ag_clust) hierarchy_clustering(circles_df, circles_ag_clust_8) hierarchy_clustering(circles_df, circles_ag_clust_4) |
Рисунок 4.2.2 – Диаграмма рассеяния датасета blobs
Рисунок 4.2.3 – Диаграмма рассеяния датасета circles (8 кластеров)
Рисунок 4.2.4 – Диаграмма рассеяния датасета circles (4 кластера)
