podkorytova_yulia_lab_4
This commit is contained in:
parent
b26c54a7e4
commit
b27537157a
39
podkorytova_yulia_lab_4/README.md
Normal file
39
podkorytova_yulia_lab_4/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Лабораторная работа 4. Кластеризация
|
||||||
|
### Задание на лабораторную:
|
||||||
|
Использовать метод кластеризации по варианту для данных из курсовой работы, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо он подходит для решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
**Вариант 0 (20).**
|
||||||
|
Алгоритм кластеризации: K-means.
|
||||||
|
|
||||||
|
**Набор данных:** "Moscow tutors". Ссылка: https://www.kaggle.com/datasets/vadimantipov/moscow-tutors
|
||||||
|
|
||||||
|
**Задача:** разбить репетиторов на 3 группы со схожими характеристиками (стоимость занятия, оценка, количество отзывов и опыт).
|
||||||
|
|
||||||
|
***
|
||||||
|
### Как запустить лабораторную работу:
|
||||||
|
Для запуска лабораторной работы необходимо открыть файл `lr4.py`, нажать на ПКМ и в выпадающем списке выбрать опцию "Run".
|
||||||
|
***
|
||||||
|
### Технологии:
|
||||||
|
**Pandas** - это библиотека на языке Python, которая предоставляет удобные и эффективные инструменты для обработки и анализа данных. Она предоставляет высокоуровневые структуры данных, такие как DataFrame, которые позволяют легко и гибко работать с табличными данными.
|
||||||
|
|
||||||
|
**Matplotlib** - это библиотека визуализации данных на языке программирования Python, которая предоставляет широкий спектр инструментов для создания различных типов графиков, диаграмм и визуализаций данных.
|
||||||
|
|
||||||
|
**Scikit-learn (Sklearn)** - это библиотека для языка программирования Python, которая предоставляет инструменты для разработки и применения различных алгоритмов машинного обучения, включая классификацию, регрессию, кластеризацию, снижение размерности и многое другое. Scikit-learn также предлагает функции для предобработки данных, оценки моделей и выбора наилучших параметров.
|
||||||
|
***
|
||||||
|
### Что делает лабораторная работа:
|
||||||
|
В лабораторной работе решается задача кластеризации методом K-means на наборе данных о московских репетиторах.
|
||||||
|
Сначала загружаются данные из файла `tutors.csv`, пустые значения убираются из выборки.
|
||||||
|
После выполняется кластеризация методом K-means для выбранных столбцов выборки, происходит получение меток и центров кластеров.
|
||||||
|
Результатом лабораторной работы являются разбитые на кластеры данные и оценка качества кластеризации, выведенные в консоль, и график, на котором каждая точка данных помечена цветом, соответствующим ее кластеру, а центры кластеров обозначены красными крестиками.
|
||||||
|
***
|
||||||
|
### Пример выходных данных:
|
||||||
|
***Кластеры и оценка кластеризации***
|
||||||
|
![](consoleRes.jpg)
|
||||||
|
|
||||||
|
***График***
|
||||||
|
![](plotRes.jpg)
|
||||||
|
***
|
||||||
|
**Вывод**: результатом лабораторной работы стали 3 группы репетиторов, полученные методом кластеризации K-means.
|
||||||
|
Группы были сформированы на основе схожих характеристик по стоимости занятия, оценке репетитора, количеству отзывов и опыту работы.
|
||||||
|
Оценка качества кластеризации была получена при помощи коэффициента силуэта, который показал результат *0.59*,
|
||||||
|
так как коэффициент может варьироваться от -1 до 1, можно сказать, что оценка высокая и метод K-means подходит для решения поставленной задачи.
|
BIN
podkorytova_yulia_lab_4/consoleRes.JPG
Normal file
BIN
podkorytova_yulia_lab_4/consoleRes.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
44
podkorytova_yulia_lab_4/lr4.py
Normal file
44
podkorytova_yulia_lab_4/lr4.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import pandas as pd
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from sklearn.cluster import KMeans
|
||||||
|
from sklearn.metrics import silhouette_score
|
||||||
|
|
||||||
|
data = pd.read_csv('tutors.csv', index_col=0)
|
||||||
|
data = data.dropna()
|
||||||
|
features = ['Price', 'Score', 'Reviews_number', 'Experience']
|
||||||
|
X = data[features].values
|
||||||
|
|
||||||
|
# метод K-means
|
||||||
|
kmeans = KMeans(n_clusters=3)
|
||||||
|
kmeans.fit(X)
|
||||||
|
|
||||||
|
# получение меток кластеров
|
||||||
|
labels = kmeans.labels_
|
||||||
|
data['Cluster'] = labels
|
||||||
|
|
||||||
|
# получение центров кластеров
|
||||||
|
cluster_centers = kmeans.cluster_centers_
|
||||||
|
|
||||||
|
# подсчет значений в каждом кластере
|
||||||
|
cluster_counts = data['Cluster'].value_counts()
|
||||||
|
|
||||||
|
for cluster in sorted(data['Cluster'].unique()):
|
||||||
|
cluster_data = data[data['Cluster'] == cluster]
|
||||||
|
print(f"-----Cluster № {cluster + 1} -----")
|
||||||
|
print(f"Number of tutors: {cluster_counts[cluster]}")
|
||||||
|
print("Cluster centers:")
|
||||||
|
for f, c in zip(features, cluster_centers[cluster]):
|
||||||
|
print(f"{f} - {c:.2f}")
|
||||||
|
print()
|
||||||
|
|
||||||
|
# оценка качества с помощью коэффициента силуэта
|
||||||
|
silhouette = silhouette_score(X, labels)
|
||||||
|
print(f"Коэффициент силуэта: {silhouette:.2f}")
|
||||||
|
|
||||||
|
# отображение результатов на графике
|
||||||
|
plt.scatter(data['Score'], data['Price'], c=labels)
|
||||||
|
plt.scatter(cluster_centers[:, 1], cluster_centers[:, 0], marker='x', color='red')
|
||||||
|
plt.xlabel('Score')
|
||||||
|
plt.ylabel('Price')
|
||||||
|
plt.title('K-means clustering')
|
||||||
|
plt.show()
|
BIN
podkorytova_yulia_lab_4/plotRes.JPG
Normal file
BIN
podkorytova_yulia_lab_4/plotRes.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 96 KiB |
88700
podkorytova_yulia_lab_4/tutors.csv
Normal file
88700
podkorytova_yulia_lab_4/tutors.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user