Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab2_3352_ГарееваКР.docx
Скачиваний:
0
Добавлен:
24.01.2026
Размер:
1.07 Mб
Скачать

Применение k-Means

Программа:

kmeans = KMeans(n_clusters=optimal_k, random_state=42, n_init=10)

clusters = kmeans.fit_predict(X_scaled)

df_clean['Cluster'] = clusters

print(f"Кластеризация завершена. Создано {optimal_k} кластера.")

print("Распределение по кластерам:")

cluster_counts = df_clean['Cluster'].value_counts().sort_index()

for cluster, count in cluster_counts.items():

print(f"Кластер {cluster}: {count} записей ({count/len(df_clean)*100:.1f}%)")

Результат: Распределение по кластерам:

Кластер 0: 585 записей (59.6%)

Кластер 1: 331 записей (33.7%)

Кластер 2: 65 записей (6.6%)

Наблюдения:

K-means кластеризация выявила три чётких группы бетонных смесей: стандартные (59.6%), экономичные (33.7%) и высокопрочные (6.6%). Это распределение соответствует реальной структуре строительного рынка. Кластеризация позволяет автоматически классифицировать рецептуры, что полезно для оптимизации производства и контроля качества бетона.

Графики для визуализации результатов кластеризации

Программа:

# Визуализация результатов кластеризации

fig, axes = plt.subplots(2, 2, figsize=(15, 12))

# Цемент vs Прочность с кластерами

scatter1 = axes[0,0].scatter(df_clean['Cement'], df_clean['Comp_Strength'],

c=df_clean['Cluster'], cmap='viridis', alpha=0.7)

axes[0,0].set_xlabel('Цемент (кг/м³)')

axes[0,0].set_ylabel('Прочность (МПа)')

axes[0,0].set_title('Кластеризация: Цемент vs Прочность')

plt.colorbar(scatter1, ax=axes[0,0])

# Цемент/Вода vs Прочность с кластерами

scatter2 = axes[0,1].scatter(df_clean['Cement/Water'], df_clean['Comp_Strength'],

c=df_clean['Cluster'], cmap='plasma', alpha=0.7)

axes[0,1].set_xlabel('Отношение Цемент/Вода')

axes[0,1].set_ylabel('Прочность (МПа)')

axes[0,1].set_title('Кластеризация: Цемент/Вода vs Прочность')

plt.colorbar(scatter2, ax=axes[0,1])

# Возраст vs Прочность с кластерами

scatter3 = axes[1,0].scatter(df_clean['Age'], df_clean['Comp_Strength'],

c=df_clean['Cluster'], cmap='cool', alpha=0.7)

axes[1,0].set_xlabel('Возраст (дни)')

axes[1,0].set_ylabel('Прочность (МПа)')

axes[1,0].set_title('Кластеризация: Возраст vs Прочность')

plt.colorbar(scatter3, ax=axes[1,0])

# Вода vs Прочность с кластерами

scatter4 = axes[1,1].scatter(df_clean['Water'], df_clean['Comp_Strength'],

c=df_clean['Cluster'], cmap='spring', alpha=0.7)

axes[1,1].set_xlabel('Вода (кг/м³)')

axes[1,1].set_ylabel('Прочность (МПа)')

axes[1,1].set_title('Кластеризация: Вода vs Прочность')

plt.colorbar(scatter4, ax=axes[1,1])

plt.tight_layout()

plt.show()

Результаты:

Анализ характристик кластеров

Программа:

print("ХАРАКТЕРИСТИКИ КЛАСТЕРОВ:")

cluster_stats = df_clean.groupby('Cluster')[features].mean()

display(cluster_stats.round(2))

Результаты:

Cement

Water

Age

Cement/Water

Comp_Strength

Cluster

0

216.49

185.49

30.17

1.17

26.70

1

366.84

171.46

34.30

2.15

47.04

2

327.20

214.47

240.77

1.53

43.12

Наблюдения:

- Экономичный подход (59.6%): Минимальный цемент, стандартные сроки, прочность 27 МПа

- Высокотехнологичный подход (33.7%): Максимальный цемент, оптимальное водоцементное отношение, прочность 47 МПа за месяц

- Временной подход (6.6%): Умеренный цемент, но длительное твердение (240 дней), прочность 43 МПа

Практическая ценность: Кластеризация позволяет производителям выбирать стратегию в зависимости от требований проекта (срочность/бюджет/прочность) и прогнозировать результат.