IIS_2023_1/ilbekov_dmitriy_lab_4/lab4.py

42 lines
1.5 KiB
Python
Raw Normal View History

2023-10-22 20:34:25 +04:00
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from sklearn.metrics import silhouette_score
# Загрузка данных
data = pd.read_csv("F1DriversDataset.csv")
# Выбор признаков для кластеризации
features = ['Championships', 'Race_Entries', 'Race_Starts', 'Pole_Positions', 'Race_Wins', 'Podiums', 'Fastest_Laps']
X = data[features]
# Применение алгоритма K-means
k = 3 # количество кластеров
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)
# Оценка качества кластеризации (Индекс силуэта)
silhouette_avg = silhouette_score(X, kmeans.labels_)
print("Средний индекс силуэта: ", silhouette_avg, "\n")
# Анализ полученных кластеров
cluster_centers = kmeans.cluster_centers_
labels = kmeans.labels_
for i in range(k):
cluster_indices = np.where(labels == i)[0]
cluster_size = len(cluster_indices)
print(f"Кластер {i+1}: {cluster_size} гонщиков")
print("Средние значения признаков:")
for j, feature in enumerate(features):
print(f"{feature}: {cluster_centers[i][j]}")
print()
# Визуализация результатов кластеризации
plt.scatter(X['Championships'], X['Race_Wins'], c=kmeans.labels_)
plt.xlabel('Championships')
plt.ylabel('Race_Wins')
plt.title('K-means Clustering of F1 Drivers')
plt.show()