Merge pull request 'podkorytova_yulia_lab_4 is ready' (#139) from podkorytova_yulia_lab_4 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/139
This commit is contained in:
commit
4973adb1f2
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