- •Распределение классов прочности
- •Визуализация распределения классов прочности бетона
- •Анализ сбалансированных классов
- •Визуализация взаимосвязей между признаками
- •Предобработка данных
- •Разделение данных и масштабирование
- •Визуализация распределения признаков:
- •Метод kNn для классификации прочности бетона
- •Метод дерева решений для классификации прочности бетона
- •Обучение и оценка дерева решений для классификации бетона
- •Обучение и оценка дерева решений
- •Визуализация дерева решений
- •Кривые для оценки качества классификации бетона
- •Визуализация roc-кривых для классификации прочности бетона
Визуализация взаимосвязей между признаками
Программа:
plt.figure(figsize=(15, 10))
class_order = ['Низкая', 'Средняя', 'Высокая']
import warnings
warnings.filterwarnings('ignore', category=FutureWarning)
plt.subplot(2, 3, 1)
sns.boxplot(data=df, x='Strength_Class', y='Cement', order=class_order)
plt.title('Цемент по классам прочности')
plt.xticks(rotation=45)
plt.xlabel('Класс прочности')
plt.ylabel('Цемент (кг/м³)')
plt.subplot(2, 3, 2)
sns.boxplot(data=df, x='Strength_Class', y='Water', order=class_order)
plt.title('Вода по классам прочности')
plt.xticks(rotation=45)
plt.xlabel('Класс прочности')
plt.ylabel('Вода (кг/м³)')
plt.subplot(2, 3, 3)
sns.boxplot(data=df, x='Strength_Class', y='Age (day)', order=class_order)
plt.title('Возраст по классам прочности')
plt.xticks(rotation=45)
plt.xlabel('Класс прочности')
plt.ylabel('Возраст (дни)')
plt.yscale('log')
plt.subplot(2, 3, 4)
sns.boxplot(data=df, x='Strength_Class', y='Superplasticizer', order=class_order)
plt.title('Суперпластификатор по классам прочности')
plt.xticks(rotation=45)
plt.xlabel('Класс прочности')
plt.ylabel('Суперпластификатор (кг/м³)')
plt.subplot(2, 3, 5)
sns.boxplot(data=df, x='Strength_Class', y='Blast Furnace Slag', order=class_order)
plt.title('Доменный шлак по классам прочности')
plt.xticks(rotation=45)
plt.xlabel('Класс прочности')
plt.ylabel('Доменный шлак (кг/м³)')
plt.subplot(2, 3, 6)
sns.boxplot(data=df, x='Strength_Class', y='Fly Ash', order=class_order)
plt.title('Зола-унос по классам прочности')
plt.xticks(rotation=45)
plt.xlabel('Класс прочности')
plt.ylabel('Зола-унос (кг/м³)')
plt.suptitle('РАСПРЕДЕЛЕНИЕ КОМПОНЕНТОВ БЕТОНА ПО КЛАССАМ ПРОЧНОСТИ',
fontsize=14, fontweight='bold', y=1.02)
plt.tight_layout()
plt.show()
warnings.filterwarnings('default')
Результат:
Предобработка данных
Программа:
from sklearn.preprocessing import LabelEncode
print("ПРЕДОБРАБОТКА ДАННЫХ")
concrete_clean = df.dropna()
print(f"Размер датасета после удаления пропусков: {concrete_clean.shape}")
le_strength = LabelEncoder()
concrete_clean['Strength_Class_encoded'] = le_strength.fit_transform(concrete_clean['Strength_Class'])
print(f"\nЗакодированные значения Strength_Class:")
strength_mapping = dict(zip(le_strength.classes_, range(len(le_strength.classes_))))
for cls, code in strength_mapping.items():
print(f" '{cls}' → {code}")
features = ['Cement', 'Blast Furnace Slag', 'Fly Ash', 'Water',
'Superplasticizer', 'Coarse Aggregate', 'Fine Aggregate', 'Age (day)']
X = concrete_clean[features]
y = concrete_clean['Strength_Class_encoded']
print(f"\nПризнаки для моделирования:")
for i, feature in enumerate(features, 1):
print(f" {i}. {feature}")
print(f"\nЦелевая переменная: Strength_Class_encoded")
print(f"Размерность данных: X{X.shape}, y{y.shape}")
Результат:
Закодированные значения Strength_Class:
'Высокая' → 0
'Низкая' → 1
'Средняя' → 2
Признаки для моделирования:
1. Cement
2. Blast Furnace Slag
3. Fly Ash
4. Water
5. Superplasticizer
6. Coarse Aggregate
7. Fine Aggregate
8. Age (day)
Целевая переменная: Strength_Class_encoded
Размерность данных: X(1030, 8), y(1030,)
