- •Подготовка наборов данных:
- •Загрузите наборы.
- •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
по дисциплине «Основы машинного обучения»
Тема: Кластеризация
Студентка гр. 2383 |
|
Бараева Е. Н. |
Преподаватель |
|
Жангиров Т. Р. |
Санкт-Петербург
2025
Цель работы.
Изучить методы кластеризации данных (K-Means, DBSCAN, иерархическая), научится анализировать кластеризованные данные, выявлять выбросы, анализировать пересечение, интерпретировать полученные результаты, визуализировать данные. Также сравнить эти методы.
Задание.
Вариант 12W
Подготовка наборов данных:
1.1. Загрузите наборы.
1.2. Проверьте корректность загрузки.
1.3. Постройте диаграмму рассеяния набора данных. Опишите форму данных, и особенности в данных.
1.4. Подготовьте наборы данных проведя стандартизация или нормировку данных. Обоснуйте выбор операции.
K-Means:
2.1. Проведите исследование оптимального количества кластеров методов локтя. Сделайте выводы, о наиболее подходящем количестве кластеров.
2.2. Проведите исследование оптимального количества кластеров методом силуэта. Сделайте выводы, о наиболее подходящем количестве кластеров.
2.3. Проведите кластеризацию алгоритмом K-means, с выбранным оптимальным количеством кластеров.
2.4. Постройте диаграмму рассеяния результатов кластеризации с выделением разным цветом разных кластеров.
2.5. Постройте диаграмму Вороного для результатов кластеризации. На диаграмме отметьте центроиды полученных кластеров.
2.6. Постройте для каждого признака диаграмму “box-plot” или “violin-plot”, с разделением по кластерам. Сделайте выводы о разделении кластеров и успешности применения кластеризации K-means к набору данных.
2.7. Рассчитайте для каждого кластера кол-во точек, среднее, СКО, минимум и максимум. Сопоставьте результаты с построенными графиками.
DBSCAN:
3.1. Подберите параметры алгоритма DBSCAN, которые на ваш взгляд дают наилучшие результаты. Опишите процесс (почему и как изменяли параметры) подбора параметров.
3.2. Постройте диаграмму рассеяния результатов кластеризации с выделением разным цветом разных кластеров.
3.3. Сделайте выводы об успешности кластеризации.
Иерархическая кластеризация:
4.1. Проведите иерархическую кластеризацию для параметра linkage указанного в вашем варианте, используя количество кластеров, полученных в п.2 или п.3. Постройте дендрограмму. Сделайте выводы, о разделении кластеров и необходимости изменить количество кластеров (если считаете, что необходимо изменить количество кластеров, то повторите кластеризацию с другим количеством кластеров).
4.2. Постройте диаграмму рассеяния результатов кластеризации с выделением разным цветом разных кластеров.
4.3. Сравните результаты кластеризации с результатами, полученными в п.2 и п.3. Сделайте выводы о том, какой метод кластеризации подходит под каждый из наборов данных.
Выполнение работы.
Подготовка наборов данных:
Загрузите наборы.
Для загрузки наборов необходимо использовать метод read_csv из библиотеки Pandas. В метод передаем название файла. Реализация данного функционала представлена в Листинге 1.1.1.
Листинг 1.1.1 – Загрузка данных из файла
import pandas as pd df_blobs = pd.read_csv("lab2_blobs.csv") df_circles = pd.read_csv("lab2_circles.csv") |
1.2. Проверьте корректность загрузки.
Вызвав метод head, можно проверить корректность загруженных данных (по умолчанию он возвращает 5 первых строк). Для этого выведем их. Реализация приведена в Листинге 1.2.1, а результат в Таблице 1.2.2 и Таблице 1.2.3.
Листинг 1.2.1 – Вызов метода head
print(df_blobs.head()) print(df_circles.head()) |
Таблица 1.2.2 – Результат вывода первых пяти записей датафрейма df_blobs
|
# x |
y |
0 |
0.9232 |
0.3500 |
1 |
-0.5394 |
0.1214 |
2 |
0.5548 |
1.8120 |
3 |
-0.1227 |
0.3402 |
4 |
0.0411 |
-0.0905 |
Таблица 1.2.3 – Результат вывода первых пяти записей датафрейма df_circles
|
# x |
y |
0 |
0.4192 |
0.9737 |
1 |
-0.3424 |
0.9707 |
2 |
0.5116 |
-0.1549 |
3 |
0.4426 |
-0.0733 |
4 |
-0.3582 |
-0.1086 |
Можно заметить, что перед x стоит #. Для того чтобы ее убрать воспользуемся функцией rename и затем снова проверим вывод. Реализация приведена в Листинге 1.2.4, а результат в Таблице 1.2.5 и Таблице 1.2.6.
Листинг 1.2.4 – Изменение названия столбца функцией rename
df_circles = df_circles.rename(columns={'# x': 'x'}) df_blobs = df_blobs.rename(columns={'# x': 'x'}) |
Таблица 1.2.5 – Результат вывода первых пяти записей датафрейма df_blobs
|
x |
y |
0 |
0.9232 |
0.3500 |
1 |
-0.5394 |
0.1214 |
2 |
0.5548 |
1.8120 |
3 |
-0.1227 |
0.3402 |
4 |
0.0411 |
-0.0905 |
Таблица 1.2.6 – Результат вывода первых пяти записей датафрейма df_circles
|
x |
y |
0 |
0.4192 |
0.9737 |
1 |
-0.3424 |
0.9707 |
2 |
0.5116 |
-0.1549 |
3 |
0.4426 |
-0.0733 |
4 |
-0.3582 |
-0.1086 |
1.3. Постройте диаграмму рассеяния набора данных. Опишите форму данных, и особенности в данных.
Для начала подключим библиотеки Seaborn и Matplotlib. Для каждого графика создадим объект plt.figure. Затем с помощью sns.scatterplot построим диаграммы рассеяния. Передадим датасеты и названия осей. После зададим заголовки и отобразим диаграммы. Реализация представлена в Листинге 1.3.1. Диаграммы изображены на Рисунке 1.3.2 и Рисунке 1.3.3.
Листинг 1.3.1 – Реализация построения диаграмм рассеяния
import seaborn as sns import matplotlib.pyplot as plt plt.figure() sns.scatterplot(data=df_blobs, x='x', y='y') plt.title('Диаграмма рассеяния (blobs)') plt.show()
plt.figure() sns.scatterplot(data=df_circles, x='x', y='y') plt.title('Диаграмма рассеяния (circles)') plt.show() |
Рисунок 1.3.2 – Диаграмма рассеяния датафрейма df_blobs
Рисунок 1.3.3 – Диаграмма рассеяния датафрейма df_circles
Данные на Рисунке 1.3.2 сгруппированы в виде трех отдельных групп точек. Это указывает на кластеризованную структуру данных. В левой нижней группе точки расположены плотнее, чем в двух других. Данные на Рисунке 1.3.3 расположены в виде эллипсов. Можно четко выделить два слоя – внутренний и внешний. Это указывает на нелинейные зависимости в данных. Также во внутреннем круге виден разрыв по вертикали.
