- •Распределение классов прочности
- •Визуализация распределения классов прочности бетона
- •Анализ сбалансированных классов
- •Визуализация взаимосвязей между признаками
- •Предобработка данных
- •Разделение данных и масштабирование
- •Визуализация распределения признаков:
- •Метод kNn для классификации прочности бетона
- •Метод дерева решений для классификации прочности бетона
- •Обучение и оценка дерева решений для классификации бетона
- •Обучение и оценка дерева решений
- •Визуализация дерева решений
- •Кривые для оценки качества классификации бетона
- •Визуализация roc-кривых для классификации прочности бетона
Обучение и оценка дерева решений
ОБУЧЕНИЕ МОДЕЛИ С ОПТИМАЛЬНОЙ ГЛУБИНОЙ (11):
Параметры обученного дерева:
Глубина дерева: 11
Количество листьев: 121
Количество узлов: 241
Критерий разделения: gini
МЕТРИКИ КАЧЕСТВА ДЕРЕВА РЕШЕНИЙ
Метрика Значение Описание
Accuracy 0.8026 Точность предсказаний
Precision 0.8011 Точность положительных прогнозов
Recall 0.8026 Полнота обнаружения классов
F1-Score 0.8015 Гармоническое среднее Precision и Recall
ДЕТАЛЬНЫЙ АНАЛИЗ ПО КЛАССАМ ПРОЧНОСТИ:
Отчет классификации по классам:
precision recall f1-score support
Высокая 0.8417 0.8860 0.8632 114.0000
Низкая 0.8256 0.8068 0.8161 88.0000
Средняя 0.7379 0.7103 0.7238 107.0000
accuracy 0.8026 0.8026 0.8026 0.8026
macro avg 0.8017 0.8010 0.8010 309.0000
weighted avg 0.8011 0.8026 0.8015 309.0000
ВИЗУАЛИЗАЦИЯ МАТРИЦЫ ОШИБОК:
СТАТИСТИКА ПРЕДСКАЗАНИЙ:
Всего тестовых образцов: 309
Правильно классифицировано: 248 (80.3%)
Ошибочно классифицировано: 61 (19.7%)
АНАЛИЗ УВЕРЕННОСТИ ПРЕДСКАЗАНИЙ:
Распределение по уверенности модели:
Очень высокая (>0.9): 297 образцов (96.1%)
Высокая (0.7-0.9): 0 образцов (0.0%)
Средняя (0.5-0.7): 12 образцов (3.9%)
Низкая (<0.5): 0 образцов (0.0%)
Точность для уверенных предсказаний (>0.7): 80.1%
Дерево решений с оптимальной глубиной 11 демонстрирует сбалансированные и воспроизводимые результаты: все основные метрики (Accuracy, Precision, Recall, F1-Score) стабильно находятся на уровне ~0.80. Это указывает на отсутствие систематического перекоса в сторону завышенной точности предсказаний (Precision) или полноты охвата классов (Recall)."
Визуализация дерева решений
Программа:
from sklearn.tree import plot_tree
print("\nВИЗУАЛИЗАЦИЯ ДЕРЕВА РЕШЕНИЙ")
if 'tree_model' not in locals() and 'tree_model' not in globals():
print("ОШИБКА: Модель tree_model не найдена!")
print("Сначала обучите модель дерева решений.")
else:
print(f"Модель дерева решений найдена (глубина: {tree_model.get_depth()})")
plt.figure(figsize=(12, 8))
class_names = [str(cls) for cls in le_strength.classes_]
plot_tree(tree_model,
feature_names=features,
class_names=class_names,
filled=True,
rounded=True,
fontsize=10,
max_depth=1)
plt.title('Первое правило дерева решений для классификации прочности бетона',
fontsize=14, fontweight='bold', pad=20)
plt.tight_layout()
plt.show()
print("\nАНАЛИЗ КОРНЕВОГО УЗЛА:")
tree = tree_model.tree_
root_feature_idx = tree.feature[0]
if root_feature_idx >= 0:
root_feature = features[root_feature_idx]
root_threshold = tree.threshold[0]
print(f"Корневой признак: {root_feature}")
print(f"Пороговое значение: {root_threshold:.2f}")
# Если есть scaler, преобразуем порог в исходные единицы
if 'scaler' in locals() or 'scaler' in globals():
original_threshold = root_threshold * scaler.scale_[root_feature_idx] + scaler.mean_[root_feature_idx]
print(f"Порог в исходных единицах: {original_threshold:.1f}")
print(f"\nПРАВИЛО:")
print(f"Если {root_feature} ≤ {root_threshold:.2f}, идти в левую ветвь")
print(f"Если {root_feature} > {root_threshold:.2f}, идти в правую ветвь")
Результат:
АНАЛИЗ КОРНЕВОГО УЗЛА:
Корневой признак: Age (day)
Пороговое значение: -0.39
Порог в исходных единицах: 21.0
ПРАВИЛО:
Если Age (day) ≤ -0.39, идти в левую ветвь
Если Age (day) > -0.39, идти в правую ветвь
