Файл: Сгенерируйте набор данных и проведите его кластеризацию по методу kmeans с использованием разных метрик. Результаты кластеризации визуализируйте..docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 35
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное бюджетное образовательное учреждение высшего образования
«Тольяттинский государственный университет»
Институт Математики, физики и информационных технологий
(наименование института полностью) |
Прикладная математика и информатика |
(Наименование учебного структурного подразделения) |
09.03.03 «Прикладная информатика |
(код и наименование направления подготовки / специальности) |
Бизнес-информатика |
(направленность (профиль) / специализация) |
Практическое задание №3
по учебному курсу «Системы искусственного интеллекта 2»
(наименование учебного курса)
Вариант ____ (при наличии)
Обучающегося | Дё А.А. | |
| (И.О. Фамилия) | |
Группа | Пибп-1902а | |
| | |
Преподаватель | Раченко Т.А. | |
| (И.О. Фамилия) | |
Тольятти 2023
Практическое задание 3
Тема 2.5. Возможности библиотеки scikit-learn Python для реализации алгоритма k-means
Задание
Сгенерируйте набор данных и проведите его кластеризацию по методу k-means с использованием разных метрик. Результаты кластеризации визуализируйте.
Рекомендации по выполнению задания
Алгоритм выполнения:
-
Сгенерировать набор данных, подвергаемых кластеризации, с использованием функции make_blobs(). -
Выполнить кластеризацию данных с использованием алгоритма k-means. -
Визуализировать результат кластеризации, выделив цветом принадлежность объектов к кластерам и показав центры кластеров. -
Повторить кластеризацию с использованием разных метрик (Евклида, Чебышева, расстояния Манхэттена). -
Представить текстовое описание выполнения каждого этапа работы
Отчет по работе формируется в двух форматах:
-
.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(). После выполнения кластеризации для каждой метрики была получена принадлежность каждой точки к одному из четырех кластеров.