15

课程名称  机器学习B                 成绩            

班级   2205-2          姓名  万蓓蓓      学号 20223691           

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

一、任务背景

在土木工程中,混凝土是构筑建筑物最基本的材料。混凝土可承受的强度与其寿命、制造所使用的材料、测试时的温度等因素息息相关。混凝土的制造过程十分复杂,涉及水泥、熔炉产出的煤渣和灰烬、水、强度塑化剂、粗聚合剂、细聚合剂等多种化工原料。我们用一个压力达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.46  

查准率

0.77777778

查全率

0.83333333

F1

0.8045977

详细方案和结果分析

解决方案

 设计思路

在本项目中,我们的目标是通过分析混凝土的原料配方来预测其成品的承重强度。这是一个典型的分类问题,因为我们需要将连续的承重强度值离散化为不同的等级。为了实现这一目标,我们将采用以下步骤:

1. 数据预处理:首先,我们需要对数据进行清洗和预处理。这包括处理缺失值、异常值和标准化数据。由于混凝土的原料配方对数值范围非常敏感,标准化处理将帮助模型更好地理解和学习不同原料之间的关系。

2. 特征工程:我们将对数据集中的特征进行分析,以确定哪些特征对预测承重强度最为重要。这可能包括特征选择和特征提取,例如使用主成分分析(PCA)来减少特征维度,同时保留最重要的信息。

3. 离散化处理:由于输出指标是连续的承重强度,我们需要将其离散化为不同的等级。这可以通过调研文献和分析数据分布来确定合适的离散化方法和等级数目。离散化后,我们将使用分类算法来预测混凝土的承重等级。

4. 模型选择与训练:选择合适的机器学习模型对数据进行训练。对于分类问题,常见的模型包括逻辑回归、决策树、随机森林和支持向量机等。我们将尝试多种模型,并使用交叉验证来评估它们的性能。

5. 超参数调优:使用网格搜索(GridSearchCV)等方法对模型的超参数进行调优,以找到最佳的模型参数组合。

6. 模型评估:使用混淆矩阵、查准率、查全率和F1值等指标来评估模型的性能。这将帮助我们了解模型在不同类别上的表现,并进行必要的调整。

 

7. 结果可视化:通过可视化手段,如热力图、混淆矩阵等,直观展示模型的性能和特征之间的关系。

8. 模型部署:一旦模型经过验证并达到满意的性能,我们可以将其部署为一个预测工具,用于实际的混凝土配方设计和质量控制。

 

设计方案

在设计方案中,我们将详细描述如何实现上述设计思路中的每个步骤:

1. 数据预处理:

   - 使用Pandas库读取Excel数据,并检查缺失值和异常值。

   - 使用StandardScaler对数据进行标准化处理,确保每个特征的均值为0,方差为1

2. 特征工程:

   - 对特征进行相关性分析,移除高度相关的特征,以减少多重共线性问题。

   - 如果有必要,可以使用PCA来降低特征维度,同时保留大部分变异信息。

3. 离散化处理:

   - 根据混凝土承重强度的分布,使用quantile-based discretization方法将连续值离散化为5个等级。

   - 评估不同离散化方法对模型性能的影响,选择最佳的离散化策略。

4. 模型选择与训练:

   - 选择逻辑回归作为基础模型,因为它在分类问题中表现稳定,且易于解释。

   - 使用scikit-learn库中的LogisticRegression类来训练模型。

5. 超参数调优:

   - 使用GridSearchCV对逻辑回归的正则化参数C和惩罚项进行调优。

   - 通过比较不同参数组合下的交叉验证分数来选择最佳参数。

6. 模型评估:

   - 使用测试集对模型进行评估,计算混淆矩阵、查准率、查全率和F1值。

   - 分析模型在不同承重等级上的表现,识别模型的优缺点。

7. 结果可视化:

   - 使用seabornmatplotlib库来绘制特征相关性热力图和混淆矩阵。

   - 通过可视化结果,直观展示模型性能和特征之间的关系。

 

8. 模型部署:

   - 将训练好的模型保存为文件,以便在实际应用中进行预测。

   - 开发一个简单的用户界面,允许用户输入混凝土原料配方,并获得预测的承重等级。

 

通过以上步骤,我们可以构建一个强大的预测模型,帮助工程师和研究人员优化混凝土配方,提高混凝土结构的质量和安全性。

 

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
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report, precision_score, recall_score, f1_score

# 1. 离散化处理承重强度
df = pd.read_excel('Data.xlsx')
# 将承重强度分为5个等级
df['Compressive_Strength_Class'] = pd.qcut(df['y'], 5, labels=False) + 1

# 2. 数据集统计信息
print("数据集统计信息:")
print(df.describe()[:6])  # 只展示前6

# 3. 可视化特征关系
print("特征之间关系的热力图:")
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('特征相关性热力图')
plt.show()

# 4. 数据预处理和模型拟合
X = df.drop(['y', 'Compressive_Strength_Class'], axis=1)
y = df['Compressive_Strength_Class']
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)

# 5. 模型拟合
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

# 6. 交叉验证和超参数分析
param_grid = {'C': [0.1, 1, 10, 100], 'penalty': ['l1', 'l2']}
grid_search = GridSearchCV(LogisticRegression(max_iter=1000), param_grid, cv=5)
grid_search.fit(X_train, y_train)
print("最佳参数:", grid_search.best_params_)

# 7. 预测结果分析和可视化
y_pred = grid_search.predict(X_test)
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues')
plt.title('混淆矩阵')
plt.xlabel('预测标签')
plt.ylabel('真实标签')
plt.show()

# 计算精度、查准率、查全率和F1
precision = precision_score(y_test, y_pred, average=None, labels=np.unique(y_test))
recall = recall_score(y_test, y_pred, average=None, labels=np.unique(y_test))
f1 = f1_score(y_test, y_pred, average=None, labels=np.unique(y_test))

print("查准率:", precision)
print("查全率:", recall)
print("F1值:", f1)

# 输出分类报告
print("分类报告:")
print(classification_report(y_test, y_pred))

 

 

 

 

 

 

 

 

结果展示

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

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

 

 

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

 

1. 数据展示

数据集概要信息描述

变量数量:数据集包含9个变量(ah)和一个目标变量(y)。

记录数量:数据集共有100条记录。

变量类型:

a, b, c, d, e, f, g, h:这些变量看起来像是连续的数值型变量,可能代表某种物理量或测量值。

y:目标变量,也是一个连续的数值型变量。

数据范围:

a:范围从135.0540.0

b:范围从0.0359.4

c:范围从0.0174.74

d:范围从145.0228.0

e:范围从0.023.4

f:范围从801.01130.0

g:范围从613.0895.3

h:范围从3365

y:范围从8.0681.75

 

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

 

2. 数据可视化

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

 

 

 

3. 分类混淆矩阵

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

 

4. 分类结果

 

结果分析

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

 

 

 预测结果分析

1. 超参数影响:

   - 超参数对模型性能有显著影响。例如,在逻辑回归中,正则化参数C的值会影响模型的惩罚强度,太小可能导致过拟合,太大可能导致欠拟合。通过交叉验证,我们找到了一个合适的C值,使得模型在训练集和测试集上都有很好的泛化能力。

2. 精度(Accuracy):

   - 精度为0.46,意味着模型正确预测的比例为46%。这个值可能表明模型在某些类别上表现不佳,需要进一步分析查准率和查全率来确定哪些类别需要改进。

3. 查准率(Precision):

   - 查准率为0.77777778,表明模型预测为正类别的样本中,实际为正类别的比例较高。这表明模型在预测正类别时较为准确,但可能存在较多的负类别样本被误判为正类别。

 

4. 查全率(Recall):

   - 查全率为0.83333333,意味着模型能够较好地识别出所有的正类别样本。这是一个相对较好的指标,表明模型在检测正类别样本时具有较高的敏感性。

5. F1值(F1 Score):

   - F1值为0.8045977,是查准率和查全率的调和平均数,它在两者之间取得平衡。F1值提供了一个综合指标来评估模型的性能,尤其是在类别不平衡的情况下。

可能存在的问题

1. 类别不平衡:

   - 如果数据集中某些承重等级的样本数量远多于其他等级,可能导致模型偏向于预测多数类,从而影响查准率和查全率。

2. 特征选择:

   - 可能存在一些不重要的特征,这些特征对模型的预测能力贡献较小,甚至可能引入噪声。

 

3. 模型选择:

   - 可能需要尝试更多的模型来找到最适合当前数据集的模型。不同的模型可能在不同类型的数据和问题上表现不同。

 可提升的改进思路

1. 数据增强:

   - 对于少数类的样本,可以通过过采样或欠采样技术来平衡类别分布,提高模型的泛化能力。

2. 特征工程:

   - 进一步分析特征与目标变量之间的关系,可能通过特征选择或特征转换来提高模型性能。

3. 模型调优:

   - 尝试更多的模型和超参数组合,使用自动化的超参数调优工具如RandomizedSearchCVBayesian Optimization

4. 集成学习:

   - 使用集成学习方法,如随机森林或梯度提升树,这些方法通常能够提高模型的稳定性和准确性。

5. 深度学习:

   - 如果数据量足够大,可以考虑使用深度学习模型,如神经网络,它们能够捕捉更复杂的非线性关系。

6. 结果解释:

   - 使用特征重要性或其他解释性工具来理解模型的预测过程,这有助于进一步调整模型和特征。

 

通过这些分析和改进思路,可以进一步提升模型的性能,使其更准确地预测混凝土的承重等级。

 

 

 

 

 

 

 

 

 

posted @ 2025-01-06 23:21  恋恋恋白  阅读(20)  评论(0)    收藏  举报