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

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

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

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

Добавлен: 05.12.2023

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

Скачиваний: 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 1

3 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 1

2 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 3

3 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 2

0 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 0

0 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 3

1 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 0

1 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 2

1 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 3

2 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 0

2 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 1

0 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 2

3 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 1

1 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 0

1 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 3

3 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 1

0 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 2

3 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 1

1 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 0

2 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 2

0 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 1

1 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 1

0 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 0

2 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 1

3 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 0

1 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 1

1 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 3

2 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 2

2 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 0

3 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 0

3 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 0

3 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 KMeans

import 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 DistanceMetric
dist = 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(). После выполнения кластеризации для каждой метрики была получена принадлежность каждой точки к одному из четырех кластеров.