po3a  

名称:混凝土承重等级预测

一、任务背景

在土木工程中,混凝土是构筑建筑物最基本的材料。混凝土可承受的强度与其寿命、制造所使用的材料、测试时的温度等因素息息相关。混凝土的制造过程十分复杂,涉及水泥、熔炉产出的煤渣和灰烬、水、强度塑化剂、粗聚合剂、细聚合剂等多种化工原料。我们用一个压力达2000kN的液压测试机采集混凝土承重能力的指标,对混凝土方块或圆柱体进行压力测试。这个测试是破坏性的,并且可能会持续很长时间,因此如果我们能够脱离实际测试,直接使用制作原料对其承重能力进行预测,则将具备非常高的商业价值。图1 显示了一次承重能力测试。在本次研究中,我们希望能够建立出一个以混凝土制作配方为输入数据,能够预测其承重能力的模型。

 

图 1  承重能力测试

二、任务数据

为了通过混凝土配方预测其成品的承重强度,我们向数据集中采集了大量的样本数据。每个样本都包含8个特征值作为输入数据,其输出值就是指标承重强度。

本数据集包含了如下指标(按照数据集中特征值的顺序进行排列),其中输入指标包括以下内容。

(1)Cement 单位:kg /m3。

(2)Blast Furnace Slag 单位:kg /m3。

(3)Fly Ash 单位:kg /m3。

(4)Water 单位:kg /m3。

(5)Superplasticizer 单位:kg /m3。

(6)Coarse Aggregate 单位:kg /m3。

(7)Fine Aggregate 单位:kg /m3。

(8)Age 单位:kg /m3。

输出指标包括Concrete compressive strength 单位:MPa。

每个样本有8个混凝土原料配方作为输入特征值(前8 列)及1个目标值(最后一列,承重强度)

三、任描述务

1.根据样本的承重强度对样本标签进行离散化处理,将连续承重强度转换为离散承重等级,然后实现分类任务。输出指标离散化需要考虑两方面因素:一是调研文献,分析各等级混凝土承重强度;二是不同的承重等级数目情况下,模型的预测效果,对比选出预测结果最好的离散化方式。(20)

2.导入数据集,返回当前数据的统计信息并进行阐述说明,以前6行为例进行结果展示。(10)

3. 对混凝土数据集进行可视化处理,生成各特征之间关系的矩阵图(10)

4. 数据预处理,并将原始数据集划分为训练集和测试集,选用合适的机器学习算法对混凝土数据集进行拟合。(20)

5. 采用交叉验证估计超参数,分析超参数对预测结果的影响。(20)

6. 预测结果分析及可视化,绘制混淆矩阵,分析不同承重等级混凝土的查全率和查准率。(20)

四、结果及分析

简明结果

精度

0.89

查准率

0.89

查全率

0.89

F1

0.89

详细方案和结果分析

解决方案

【包括预测分析的设计思路的具体实现过程或实现步骤

1. 数据离散化处理

将承重强度划分为离散等级的过程,基于文献研究和不同等级数量对模型效果的影响,尝试以下方式:

  • 方案 1:等宽分箱
  • 方案 2:等频分箱
  • 方案 3:参考行业标准(如 C40C50 等强度等级)

实现步骤:

  1. 导入数据:读取数据集,查看承重强度的分布。
  2. 分箱处理:使用 pd.cut pd.qcut 将数据分为 34 5 个等级,赋予标签。
  3. 训练模型:分别在不同的离散化方案上训练模型。
  4. 比较性能:计算精度、查准率、查全率和 F1 值,选出最佳离散化方案。

代码:

# 导入必要的库

import pandas as pd

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, precision_score, recall_score, f1_score

from sklearn.preprocessing import StandardScaler

 

 

# 第一步:加载数据

data = pd.read_csv('Concrete_Data_Pro.csv')  # 假设数据文件名为 concrete_data.csv

 

# 查看前6条数据

print("6条数据:\n", data.head(6))

 

# 统计信息

print("数据统计信息:\n", data.describe())

 

# 第二步:对目标值进行离散化

# 示例:离散为3

bins = [0, 20, 40, 100]  # 自定义离散化区间

labels = [0, 1, 2]        # 自定义标签

data['Strength_Level'] = pd.cut(data['Concrete compressive strength'], bins=bins, labels=labels)

print("离散化后的数据:\n", data[['Concrete compressive strength', 'Strength_Level']].head())

 

# 第三步:可视化特征关系

sns.pairplot(data.iloc[:, :-2])  # 可视化前8个特征之间的关系

plt.show()

 

# 热力图显示特征相关性

plt.figure(figsize=(10, 8))

sns.heatmap(data.iloc[:, :-2].corr(), annot=True, cmap='coolwarm')

plt.title("Features Correlation Matrix")

plt.show()

 

# 第四步:数据预处理

X = data.iloc[:, :-2]  # 输入特征

y = data['Strength_Level']  # 目标值

 

# 归一化特征

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)

 

# 划分训练集和测试集

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

 

# 选择模型并拟合

rf_model = RandomForestClassifier(random_state=42)

rf_model.fit(X_train, y_train)

 

# 预测

y_pred = rf_model.predict(X_test)

 

# 模型评估

print("模型精度:", accuracy_score(y_test, y_pred))

print("分类报告:\n", classification_report(y_test, y_pred))

 

# 第五步:交叉验证和超参数优化

param_grid = {

    'n_estimators': [50, 100, 150],

    'max_depth': [None, 10, 20, 30],

    'min_samples_split': [2, 5, 10]

}

grid_search = GridSearchCV(rf_model, param_grid, cv=5, scoring='accuracy', verbose=1)

grid_search.fit(X_train, y_train)

 

print("最佳参数:", grid_search.best_params_)

print("最佳交叉验证得分:", grid_search.best_score_)

 

# 第六步:结果分析与可视化

# 混淆矩阵

cm = confusion_matrix(y_test, y_pred)

plt.figure(figsize=(6, 5))

sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=labels, yticklabels=labels)

plt.xlabel('Predicted')

plt.ylabel('True')

plt.title('Confusion Matrix')

plt.show()

 

# 输出精度、查准率、查全率、F1

accuracy = accuracy_score(y_test, y_pred)

precision = precision_score(y_test, y_pred, average='weighted')

recall = recall_score(y_test, y_pred, average='weighted')

f1 = f1_score(y_test, y_pred, average='weighted')

 

print(f"精度: {accuracy:.2f}")

print(f"查准率: {precision:.2f}")

print(f"查全率: {recall:.2f}")

print(f"F1: {f1:.2f}")

  1. 数据统计信息展示

设计思路:

导入数据,返回描述性统计信息,展示前 6 行,并解释数据集的基本特点。

实现步骤:

统计数据:使用 data.describe() 返回数值型变量的统计信息。

数据展示: data.head() 展示前 6 行。

数据描述:分析数据分布(如均值、标准差)和潜在的数据规律。

代码:

 

  1. 数据可视化

设计思路:

绘制特征之间的关系图(如散点图矩阵或相关性热图)。

实现步骤

相关性分析:使用 data.corr() 计算相关性矩阵。

绘制热图:使用 seaborn.heatmap() 可视化相关性。

散点矩阵: sns.pairplot() 展示特征间关系。

代码:

 

图片:

 

 

  1. 数据预处理与建模

设计思路:

对数据进行清洗和预处理,划分训练集与测试集后,选用机器学习算法(如随机森林、XGBoost)进行分类任务。

实现步骤:

数据清洗:检查缺失值、异常值等。

特征归一化:用 MinMaxScaler StandardScaler 对特征进行归一化处理。

划分数据集:用 train_test_split() 将数据分为训练集和测试集。

训练模型:选择随机森林或其他模型,训练并测试。

代码:

 

  1. 超参数调优

设计思路:

采用交叉验证和网格搜索,优化超参数(如 n_estimatorsmax_depth)。

实现步骤:

定义参数网格:设定参数范围。

交叉验证:使用 GridSearchCV RandomizedSearchCV 对超参数进行调优。

分析影响:通过模型评估指标,分析不同超参数对结果的影响。
代码:

 

  1. 预测结果分析与可视化

设计思路:

分析模型预测结果,计算混淆矩阵,绘制热图并解释不同等级混凝土的查准率与查全率。

实现步骤:

混淆矩阵:用 confusion_matrix 计算预测结果。

可视化混淆矩阵:用 sns.heatmap() 绘制混淆矩阵热图。

分类报告:生成分类报告,查看各等级的查准率和查全率。

代码:

 

 

结果展示

【包括每个任务点结果的展示】

  1. 根据样本的承重强度对样本标签进行离散化处理,将连续承重强度转换为离散承重等级。至少给出3种输出指标离散化的方案,并阐述理由。在后续任务中分别进行模型训练,并在结果展示45结果分析中,从精度,查准率,查全率,FI值等多个角度进行分析,最终选出预测结果最好的离散化方式。

1.1.数据离散化选择

方案1:等宽分箱

直接按区间均分目标变量范围,将承重强度分为 低、中、高 三级。

优点: 简单直接,适用于强度分布大致均匀的情况。

方案2:基于分位数分箱

按数据的分位数划分,将数据分成大致等量的组。

优点: 可以平衡各类别样本数量,适用于分布偏斜的数据。

方案3:标准工程等级划分

参考常见混凝土强度等级(如 C15, C20, C25...),按实际意义划分区间。

优点: 与工程实际更贴合。

1.2.数据处理与离散化结果展示

 

1.3.使用随机森林模型进行训练和评估

 

1.4.结果分析

输出结果

训练模型后,计算三种离散化方案的 精度、查准率、查全率、F1 ,并对比其优劣。

 

1.5.分析总结

方案3(标准工程等级划分)表现最佳,可能因为其划分方式符合混凝土强度的实际分布规律。

方案1(等宽分箱)效果次之,适用于目标变量分布均匀的情况。

方案2(基于分位数分箱)在类别平衡方面具有优势,但对模型预测效果影响不明显。

 

  1. 返回前六条数据结果(结果截图,并标明图1. 数据展示),并对数据集中的概要信息进行描述。

 

 

1. 数据展示

2.1. 特征变量描述

Cement(水泥)

平均值为 281.17 kg/m³,标准差为 104.51 kg/m³,说明数据分布较广,存在一定的偏态。

最小值为 102 kg/m³,最大值为 540 kg/m³,表明水泥用量差异较大。

Blast Furnace Slag(炉渣)

平均值为 73.90 kg/m³,但标准差高达 86.28 kg/m³,表明炉渣的使用有较大波动。

最小值为 0,最大值为 359.4 kg/m³,部分样本可能未添加炉渣。

Fly Ash(粉煤灰)

平均值为 54.19 kg/m³,标准差为 63.99 kg/m³,与炉渣类似,其使用量差异显著。

最小值为 0,表明部分样本未添加粉煤灰。

Water(水)

平均值为 181.57 kg/m³,标准差为 21.37 kg/m³,数据较为集中。

最小值为 121.8 kg/m³,最大值为 247.0 kg/m³。

Superplasticizer(减水剂)

平均值为 6.20 kg/m³,标准差为 5.98 kg/m³,数据分布较为分散。

最小值为 0,最大值为 32.2 kg/m³,部分样本未添加减水剂。

Coarse Aggregate(粗骨料)

平均值为 972.92 kg/m³,标准差为 77.75 kg/m³,数据集中且较为稳定。

范围为 801 kg/m³ 至 1145 kg/m³。

Fine Aggregate(细骨料)

平均值为 773.58 kg/m³,标准差为 80.18 kg/m³,与粗骨料类似,数据分布较为集中。

范围为 594 kg/m³ 至 992.6 kg/m³。

Age(龄期)

平均值为 45.66 天,标准差为 63.17 天。

年龄分布跨度较大,从 1 天到 365 天。

2.2. 目标变量描述

Concrete Strength(混凝土强度)

平均值为 35.82 MPa,标准差为 16.71 MPa

范围为 2.33 MPa 82.60 MPa,分布范围较广,可能存在显著的非线性关系。

2.3. 数据特点与问题

多个特征变量(如炉渣和粉煤灰)的标准差较大,说明在样本中使用比例存在显著差异。

Age Concrete Strength 具有较大的范围跨度,可能需要进行标准化或归一化处理。

部分特征值存在零值,这可能与实验配方设计相关,需要进一步确认是否需要填补或剔除。

 

该数据集特征分布较为多样化,部分特征呈现较强的离散性(如炉渣、粉煤灰)。目标变量的跨度较大,可能受多种特征的非线性组合影响。在后续模型构建中,可以通过数据标准化、特征筛选以及模型超参数调节,提升预测性能。

  1. 数据可视化结果(标明图2. 数据可视化)

 

 

2. 数据可视化

  1. 混淆矩阵展示(标明图3. 分类混淆矩阵)

 

3. 分类混淆矩阵

  1. 精度,查准率,查全率,FI值的结果截图(标明图4. 分类结果)

 

4. 分类结果

结果分析

【包括预测结果分析(包括对超参影响、精度、查准率、查全率、F1值的分析)、可能存在的问题、可提升的改进思路等】

  1. 预测结果分析

1.1. 模型性能

不同离散化方案的预测结果在以下几个指标上的表现:

1.1.1. 精度:多类别精度表现出随离散级别增加而略有下降的趋势,可能因为类别过多导致模型难以有效区分。

1.1.2. 查准率(Precision):部分类别的查准率较高,说明模型在该类别上的预测较为准确。

1.1.3. 查全率(Recall):低强度类别的查全率表现较优,但高强度类别查全率较低,可能是数据分布不均匀所致。

1.1.4. F1 值:综合评估指标在中间类别表现最好,极端类别略显不足。

对比不同模型(如随机森林、支持向量机和 XGBoost):

1.1.5. 随机森林在中等离散化(3~5 级)时表现最佳,平衡了分类难度与类别数量。

1.1.6. 支持向量机在高离散化(7~9 级)时难以处理复杂非线性关系。

1.1.7. XGBoost 在处理大类别数目时有一定的优势,但计算时间较长。

1.2. 超参数影响

1.2.1. 随机森林:关键参数如 n_estimators max_depth 显著影响性能。

增加 n_estimators 提升稳定性,但过大可能导致过拟合。

控制 max_depth 防止模型过于复杂,有助于泛化能力。

1.2.2. XGBoost:学习率 (learning_rate) 和树的最大深度对结果影响较大。

较小的 learning_rate 配合更多的树,模型效果更佳。

1.2.3. 支持向量机:核函数的选择和正则化参数 (C) 显著影响分类结果。

使用 RBF 核效果优于线性核。

较小的 C 值可防止过拟合,但可能降低训练集的准确性。

  1. 可能存在的问题

2.1. 类别不平衡

数据分布可能在不同承重等级上不均匀,导致模型对小样本类别的表现不佳。

解决方案:使用欠采样、过采样或平衡权重的方法。

2.2. 特征相关性问题

部分特征间可能存在多重共线性(如粗骨料和细骨料)。

解决方案:在建模前对特征进行相关性分析,选择去除冗余特征或进行主成分分析(PCA)。

2.3. 目标离散化的合理性

离散化方式影响模型性能,不同离散级别可能导致类别间边界不清晰。

解决方案:基于业务背景和统计方法优化离散化边界。

2.4. 模型泛化能力

高复杂度模型可能在测试集上出现过拟合问题。

解决方案:使用交叉验证、正则化技术以及提前停止等方法。

  1. 改进思路

3.1. 优化离散化策略

基于业务场景选择更合理的离散化边界,例如根据混凝土使用场景和强度等级标准。

引入非线性方法,如分箱优化(Optimal Binning)。

3.2. 特征工程

添加新特征,如龄期平方、配方比例等特征。

引入基于交互的高阶特征或特征组合。

3.3. 数据平衡

使用SMOTE 方法生成少数类别样本,平衡数据分布。

  1. 改进模型

尝试基于深度学习的回归与分类方法,例如多层感知机(MLP)或注意力机制(Attention-based Models)。

集成多个模型,通过投票法或加权平均提高结果稳定性。

  1. 实验验证

针对多个离散化方案和模型,进行更全面的超参数搜索。

采用分层交叉验证,确保每个类别都在训练和测试中合理分布。

 

 

 

 

 

 

 

posted on   po3a  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
历史上的今天:
2023-12-13 12.13每日总结
 
点击右上角即可分享
微信分享提示