Файл: Сгенерируйте набор данных и проведите его кластеризацию по методу kmeans с использованием разных метрик. Результаты кластеризации визуализируйте..docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 93

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИфедеральное государственное бюджетное образовательное учреждение высшего образования«Тольяттинский государственный университет»Институт Математики, физики и информационных технологий

(наименование института полностью)

Прикладная математика и информатика

(Наименование учебного структурного подразделения)

09.03.03 «Прикладная информатика

(код и наименование направления подготовки / специальности)

Бизнес-информатика

(направленность (профиль) / специализация)
Практическое задание №3по учебному курсу «Системы искусственного интеллекта 2»(наименование учебного курса)Вариант ____ (при наличии)

Обучающегося

Дё А.А.







(И.О. Фамилия)




Группа

Пибп-1902а













Преподаватель

Раченко Т.А.







(И.О. Фамилия)



Тольятти 2023

Практическое задание 3

Тема 2.5. Возможности библиотеки scikit-learn Python для реализации алгоритма k-means

ЗаданиеСгенерируйте набор данных и проведите его кластеризацию по методу k-means с использованием разных метрик. Результаты кластеризации визуализируйте.Рекомендации по выполнению задания
Алгоритм выполнения:

  1. Сгенерировать набор данных, подвергаемых кластеризации, с использованием функции make_blobs().

  2. Выполнить кластеризацию данных с использованием алгоритма k-means.

  3. Визуализировать результат кластеризации, выделив цветом принадлежность объектов к кластерам и показав центры кластеров.

  4. Повторить кластеризацию с использованием разных метрик (Евклида, Чебышева, расстояния Манхэттена).

  5. Представить текстовое описание выполнения каждого этапа работы
Отчет по работе формируется в двух форматах:

  • .ipynb;

  • .pdf (ipynb, сохраненный в формате .pdf).
Решение:1. Код для генерации набора данных с использованием функции make_blobs():from sklearn.datasets import make_blobs# Генерируем набор данныхX, y = make_blobs(n_samples=1000, centers=4, cluster_std=0.7, random_state=42)# Выводим первые 10 элементов набора данныхprint(X[:10])Результат:[[-3.27093457 -7.56672118][-4.27084979 -7.93638949][ 2.88545668 0.04187451][-0.81286231 6.82810713][ 2.34574388 0.351715 ][-2.48307912 -7.60194311][ 1.46186288 -0.37798209][-3.94458574 -9.70755465][-2.58355651 5.10537263][-3.19296228 -9.15510354]]Функция make_blobs() генерирует набор данных, состоящий из заданного количества точек, распределенных по нескольким кластерам (центрам) со случайными координатами. Параметры функции:- n_samples: число точек в наборе данных- centers: число кластеров (центров)- cluster_std: стандартное отклонение распределения точек внутри каждого кластера- random_state: начальное состояние генератора случайных чисел (для воспроизводимости результатов)2. Для выполнения кластеризации данных с использованием алгоритма k-means необходимо импортировать соответствующий класс из библиотеки sklearn.cluster:from sklearn.cluster import KMeansЗатем мы задаем количество кластеров, которые мы хотим сформировать, и создаем экземпляр класса KMeans с помощью ключевого слова n_clusters:# Задаем количество кластеровk = 4# Создаем экземпляр класса KMeans и указываем количество кластеровkmeans = KMeans(n_clusters=k)Далее мы выполняем алгоритм кластеризации на наших данных с помощью метода fit():# Обучаем модель на наших данныхkmeans.fit(X)Теперь мы можем получить информацию о кластерах, в которые были разделены наши данные, с помощью атрибута labels_:# Выводим метки кластеровprint(kmeans.labels_)Результат:

[3 3 0 1 0 3 0 3 1 3 1 2 0 2 0 0 0 3 2 1 3 0 2 1 2 1 2 2 0 1 3 1 2 2 1 0 13 2 2 0 2 2 1 3 3 2 1 2 3 1 0 2 0 3 2 1 0 2 2 1 2 1 2 2 3 1 3 3 1 2 2 1 12 3 2 2 2 2 3 2 3 2 0 3 2 2 0 2 0 3 1 1 2 2 0 0 3 3 3 3 2 0 1 3 1 0 1 1 33 2 0 1 1 2 3 1 3 2 0 2 3 3 2 0 0 1 3 2 3 1 1 3 1 0 1 2 1 0 2 1 1 0 1 3 20 1 3 3 1 3 2 0 3 2 0 2 2 1 1 2 3 1 1 0 3 2 3 1 1 3 2 1 3 1 0 3 2 2 2 1 00 0 3 1 3 3 3 3 1 0 3 0 0 1 2 2 2 1 1 1 3 3 2 3 0 3 2 0 1 0 2 1 3 3 2 0 31 1 0 2 2 1 0 0 3 0 0 2 2 2 3 0 0 1 0 3 2 0 3 2 0 0 0 0 2 3 2 1 3 3 1 3 01 0 1 0 0 0 1 3 2 2 3 3 0 0 1 3 1 1 1 0 1 0 3 0 0 3 1 3 3 1 1 0 2 3 2 3 21 1 0 2 1 1 0 3 1 2 2 2 0 2 3 0 3 0 2 0 0 1 1 2 0 1 0 1 0 0 0 1 0 2 1 3 32 3 0 1 1 1 0 1 2 0 1 2 0 3 0 0 0 2 2 3 2 0 0 1 1 2 0 0 0 2 2 2 3 0 2 3 02 1 0 3 2 3 2 0 3 2 3 2 2 0 0 2 2 1 3 3 1 1 1 0 2 0 1 1 2 1 0 3 3 3 0 3 10 1 1 1 1 3 2 2 1 2 1 0 2 2 3 1 2 1 3 3 1 3 2 2 1 3 2 0 3 0 1 3 2 3 2 0 23 1 1 1 2 2 0 0 0 1 3 1 1 3 1 0 3 1 2 0 2 3 3 3 0 0 0 0 2 1 3 2 3 1 2 1 11 0 1 1 0 2 1 1 2 2 0 3 0 0 1 0 1 2 2 2 2 2 0 0 3 0 1 3 0 2 1 1 3 2 2 2 01 0 1 0 0 3 2 1 1 2 0 3 2 3 2 2 0 2 1 0 3 1 3 0 1 3 2 3 2 1 1 3 2 0 0 2 33 3 1 2 2 2 2 3 0 3 1 3 1 0 2 3 1 1 1 2 2 0 2 2 0 0 0 3 1 1 1 1 0 3 3 2 10 2 3 2 0 3 2 1 3 1 0 3 3 3 1 3 0 2 1 3 3 2 1 2 1 2 1 1 1 0 2 3 1 0 0 0 23 1 2 2 3 2 0 2 0 2 1 0 0 3 2 0 2 2 3 0 3 1 2 1 0 0 2 1 2 3 1 0 3 3 1 2 11 1 3 2 3 3 1 2 3 3 1 2 3 2 0 0 2 1 0 3 1 0 0 0 3 1 0 2 0 1 2 3 2 1 2 3 02 2 3 2 2 3 0 2 0 3 1 0 2 0 1 3 0 0 0 0 0 2 2 3 1 1 3 3 3 1 2 1 2 2 1 0 20 0 2 1 2 1 2 3 1 2 2 1 0 0 3 2 0 3 1 3 0 2 3 2 3 1 1 0 0 0 0 1 0 3 0 0 11 1 3 3 0 3 2 0 2 0 0 0 1 3 0 2 0 0 2 1 3 2 2 0 0 1 1 1 2 2 0 0 3 0 1 2 10 1 3 2 2 1 2 3 3 0 2 0 1 0 2 0 0 3 2 2 2 0 0 3 3 2 2 3 1 1 3 0 2 0 3 1 02 1 0 0 3 3 2 0 1 3 0 2 0 3 1 3 0 2 3 2 2 2 1 3 2 2 1 0 0 2 1 1 1 2 3 3 13 1 2 3 3 0 0 2 1 3 0 3 0 1 1 1 0 2 2 0 1 1 2 3 3 3 3 2 2 1 3 2 1 2 2 1 01 1 3 3 0 2 3 2 2 0 2 0 1 3 1 2 0 1 3 2 0 1 2 2 3 0 3 1 0 3 3 2 2 3 2 3 11 2 3 3 3 2 0 0 1 2 2 1 0 1 2 0 2 1 1 0 0 3 0 3 1 0 3 2 0 0 2 1 3 2 2 1 32 0 2 1 3 1 1 3 1 2 0 3 0 3 2 3 2 3 0 3 2 1 3 0 0 2 0 3 0 1 0 3 0 0 2 0 22 1 3 0 3 3 1 0 2 2 1 1 1 3 0 2 1 3 0 2 0 2 2 3 1 0 1 0 1 2 2 3 2 0 1 0 03 1 3 2 0 2 0 3 2 3 2 1 3 2 1 0 2 2 0 0 2 1 0 0 3 0 2 3 1 0 3 1 1 3 2 1 03 1 2 2 1 2 1 0 0 3 1 2 3 2 3 1 1 0 2 2 1 2 3 1 3 0 2 3 0 0 2 2 3 0 3 1 03 2 0 1 1 1 3 1 2 0 3 2 3 2 3 2 2 2 0 0 1 2 2 2 0 0 2 3 3 1 3 3 2 0 0 2 2]Мы также можем получить информацию о координатах центров кластеров с помощью атрибута cluster_centers_:# Выводим координаты центров кластеровprint(kmeans.cluster_centers_)Результат:[[-1.89957564 3.09255568][ 1.98045588 0.95089609][-2.74572633 -8.38645411][-3.11550118 -4.24537538]]3. Для визуализации результатов кластеризации мы можем использовать библиотеку matplotlib. В следующем коде мы используем метод KMeans для кластеризации и затем строим график, выделяя каждый кластер отдельным цветом и показывая центры кластеров.from sklearn.cluster import KMeansimport matplotlib.pyplot as plt# Кластеризуем данные на 4 кластераkmeans = KMeans(n_clusters=4, random_state=42).fit(X)# Получаем метки кластеров и центры кластеровlabels = kmeans.labels_centers = kmeans.cluster_centers_# Строим график, выделяя каждый кластер отдельным цветом и показывая центры кластеровplt.scatter(X[:,0], X[:,1], c=labels)plt.scatter(centers[:,0], centers[:,1], marker='*', color='r', s=300)plt.show() 4. # Кластеризация с использованием Евклидовой метрикиfrom sklearn.cluster import KMeans
kmeans_euclidean = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init=10, random_state=42)y_kmeans_euclidean = kmeans_euclidean.fit_predict(X)# Кластеризация с использованием метрики Чебышеваfrom sklearn.neighbors import DistanceMetricdist = DistanceMetric.get_metric('chebyshev')X_dist = dist.pairwise(X)kmeans_chebyshev = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init=10, random_state=42)y_kmeans_chebyshev = kmeans_chebyshev.fit_predict(X_dist)# Кластеризация с использованием метрики Манхэттенаdist = DistanceMetric.get_metric('manhattan')X_dist = dist.pairwise(X)kmeans_manhattan = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init=10, random_state=42)y_kmeans_manhattan = kmeans_manhattan.fit_predict(X_dist)5. Этап 1. На этапе генерации набора данных была использована функция make_blobs() из библиотеки sklearn.datasets. Эта функция позволяет создать набор данных с заданным количеством кластеров, центрами и стандартным отклонением. В этом случае было сгенерировано 200 объектов, распределенных на 4 кластера. Этап 2. На втором этапе была выполнена кластеризация данных с помощью алгоритма k-means, используя библиотеку sklearn.cluster. В данном случае был выбран параметр количества кластеров равный 4. Для инициализации начальных центров кластеров был использован метод k-means++, а максимальное количество итераций было установлено 300, а количество запусков — 10 для получения наилучшего результата. Этап 3. На третьем этапе была осуществлена визуализация результатов кластеризации с помощью библиотеки matplotlib. На графике было показано распределение всех точек в координатной плоскости, выделив разными цветами принадлежность каждой точки к одному из кластеров. Также были показаны центры кластеров, вычисленные в результате кластеризации. Этап 4. На четвертом этапе была повторена кластеризация данных с использованием разных метрик, таких как Евклидова, Чебышева и Манхэттена. Для расчета расстояний была использована библиотека sklearn.neighbors.DistanceMetric.get_metric(). После выполнения кластеризации для каждой метрики была получена принадлежность каждой точки к одному из четырех кластеров.