首页 > 其他分享 >12.24

12.24

时间:2024-12-29 13:42:34浏览次数:8  
标签:模型 12.24 查全率 score test 数据 查准率

 

实 验 报 告

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

一、实验背景

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

三、实验任务

1.导入数据集,并采用.head()读取前6条数据,采用.info()返回当前数据的信息。(10分)

通过粗略观察,我们可以看到数据集的大小是1030×9,即其中包含了1030个样本和9个变量(9 列)。每个样本有8个混凝土原料配方作为输入特征值(前8 列)及1个目标值(最后一列,承重能力)。

2. 对混凝土数据集进行可视化处理,生成各特征之间关系的矩阵图,用seaborn工具的pairplot ()方法进行绘图。(10分)

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

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

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

四、实验结果及分析

简明结果

精度

0.616504854368932

查准率

0.6178653925078001

查全率

0.616504854368932

F1值

0.6131203492470739

详细方案和结果分析

解决方案

设计思路

1、数据探索:初步了解数据集的结构和特征,检查数据的完整性和分布。

2、数据预处理:对数据进行标准化处理,以消除不同量纲的影响。

3、特征选择:分析各特征与目标变量的相关性,选择对预测结果影响较大的特征。

4、模型选择:根据目标变量的性质(分类或回归),选择合适的机器学习模型。

5、模型训练与评估:训练模型并使用交叉验证评估模型的泛化能力。

6、结果分析:分析模型的预测结果,评估模型性能。

实现步骤

1、导入数据集:使用pandas读取Excel文件中的数据。

2、数据探索:使用.head()和.info()方法查看数据的基本信息。

3、数据可视化:使用seaborn的pairplot方法展示特征之间的关系。

4、数据预处理:使用StandardScaler对特征进行标准化处理。

5、划分数据集:使用train_test_split将数据集划分为训练集和测试集。

6、模型训练:如果目标变量是分类的,使用RandomForestClassifier。

如果目标变量是回归的,使用RandomForestRegressor。

7、交叉验证:使用cross_val_score评估模型的泛化能力。

8、预测与评估:

对测试集进行预测。

如果是分类问题,使用classification_report和confusion_matrix评估模型。

如果是回归问题,计算MSE、RMSE、MAE和R²分数。

9、结果分析:根据评估指标分析模型性能,讨论可能的改进方向。

结果展示

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

  1. 返回前六条数据结果

 

           图1、数据展示

  1. 数据可视化结果

 

图2. 数据可视化

  1. 混淆矩阵展示

 

图3. 分类混淆矩阵

  1. 精度,查准率,查全率,FI值结果截图

图4. 分类结果

 

 

结果分析

1. 超参数影响分析

在本实验中,我们使用了随机森林模型,其主要超参数包括树的数量(n_estimators)、树的最大深度(max_depth)、以及是否进行特征选择(max_features)。这些超参数对模型性能有显著影响:

  • 树的数量:增加树的数量可以提高模型的稳定性和准确性,但也会增加计算成本。
  • 树的最大深度:限制树的深度可以防止过拟合,但过浅的树可能无法捕捉数据的复杂性。
  • 特征选择:通过随机选择特征子集来构建每棵树,可以增加模型的泛化能力。

2. 精度、查准率、查全率、F1值分析

由于目标变量 yy 是整数类型,我们首先假设这是一个分类问题。以下是对模型性能的分析:

  • 精度(Accuracy):表示模型预测正确的比例。高精度意味着模型在大多数情况下都能正确分类。
  • 查准率(Precision):在所有被预测为正类的样本中,实际为正类的比例。高查准率意味着较少的假阳性。
  • 查全率(Recall):在所有实际为正类的样本中,被正确预测为正类的比例。高查全率意味着较少的假阴性。
  • F1值:查准率和查全率的调和平均,是一个综合考虑查准率和查全率的指标。

3. 可能存在的问题

  • 过拟合:如果模型在训练集上表现很好,但在测试集上表现不佳,可能是过拟合。
  • 欠拟合:如果模型在训练集和测试集上的表现都不好,可能是欠拟合。
  • 数据不平衡:如果某些类别的样本数量远多于其他类别,可能会影响模型的预测性能。

4. 可提升的改进思路

  • 超参数调优:使用网格搜索(Grid Search)或随机搜索(Random Search)来寻找最优的超参数组合。
  • 特征工程:通过创建新的特征或转换现有特征来提高模型性能。
  • 模型集成:结合多个模型的预测结果,如使用投票分类器或堆叠(Stacking)方法。
  • 处理数据不平衡:如果存在类别不平衡,可以考虑过采样少数类、欠采样多数类或使用合成少数类技术(如SMOTE)。
  • 模型选择:尝试其他机器学习算法,如支持向量机、梯度提升树或神经网络,以找到最适合数据的模型。

结论

本实验通过随机森林模型对混凝土的承重等级进行了预测。通过分析超参数的影响、模型的精度、查准率、查全率和F1值,我们对模型的性能有了深入的理解。同时,我们也识别了可能存在的问题,并提出了改进思路,以期在未来的工作中进一步提升模型的预测能力。

代码

# 导入必要的库
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score, precision_score, recall_score, f1_score

# 1. 导入数据集并读取前6条数据,返回数据信息
data = pd.read_excel('BP_R_Data.xlsx')
print(data.head(6))
print(data.info())

# 2. 数据可视化处理
sns.pairplot(data)
plt.show()

# 3. 数据预处理,并将原始数据集划分为训练集和测试集
X = data.drop(['y'], axis=1)
y = data['y']
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)

# 4. 选择机器学习算法进行拟合
rf = RandomForestClassifier(random_state=42)
rf.fit(X_train, y_train)

# 交叉验证
scores = cross_val_score(rf, X_scaled, y, cv=5)
print("交叉验证分数:", scores)

# 5. 预测结果分析及可视化
y_pred = rf.predict(X_test)

# 绘制混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
sns.heatmap(conf_matrix, annot=True, fmt='d')
plt.title('Confusion Matrix')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.show()

# 分类报告
print(classification_report(y_test, y_pred))

# 计算分类模型的性能指标
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("精度 (Accuracy):", accuracy)
print("查准率 (Precision):", precision)
print("查全率 (Recall):", recall)
print("F1值 (F1 Score):", f1)

# 保存模型,如果需要的话
# from joblib import dump, load
# dump(rf, 'random_forest_model.joblib')

 

 

标签:模型,12.24,查全率,score,test,数据,查准率
From: https://www.cnblogs.com/zzqq1314/p/18638664

相关文章

  • 12.24随笔 java实战2019年考题(1)
    距离期末考试还有三天,我最后把建民老师发的2019年考题进行一次上手解答,看看自己大概能拿到多少分。先建表房产基本信息表CREATETABLEhouse_basic_info(house_idVARCHAR(20)PRIMARYKEY,room_typeENUM('四室两厅','四室一厅','三室两厅','三室一厅','两室两厅','两......
  • 12.24
    软件构造课上,对之前编写的代码进行了最后的调试和优化,经过反复的测试,终于达到了预期的效果,我心中的成就感油然而生。软件企业文化课上,老师邀请了一位企业的高管来做讲座,他分享了自己在软件行业多年的经验和感悟,让我对这个行业的企业文化有了更深刻的理解和认识。人机交互课上,我们......
  • Diary - 2024.12.24
    今天作业有点多了,oi时间约等于0。不懂阿,这个数学作业有点太难了,感觉是给mo同学做的。学oi的大家拼尽全力仍无法战胜其中一道,太难了。今天语文课内知识又考炸了,咳咳。放乐观点(。感觉这个学期的语文老师也是有点抽象的。一周只需要考试写作文,评讲就能用掉三四天,然后剩下......
  • 2024.12.24 周四
    2024.12.24周四Q1.1100Youaregivenanarray$a$of$n$positiveintegersandascore.Ifyourscoreisgreaterthanorequalto$a_i$,thenyoucanincreaseyourscoreby$a_i$andremove$a_i$fromthearray.Foreachindex$i$,outputthemaximumnum......
  • 日志 12.24
    DS题,主题平衡树和可并堆。T2未知来源模拟赛题题意简述:给一棵有根树,树上权值形成排列,对\(i\in[1,n]\)依次执行:选择子树内(包括i自己)的一个j,并交换\(a_i,a_j\)。问是否能在n次操作之后使\(\foralli:a_i=i\),如有须构造方案。容易注意到,有解的必要条件是每个置换环所有......
  • Diary - 2024.12.24
    今天摆完了有点。待补:Solution-LuoguP11398众数Solution-LuoguP11401[Code+#8初赛]普勒亚Solution-Codeforces2041KTrophicBalanceSpeciesLuoguP11408[RMI2020]树咖/Arboras代码想想LuoguP11417[Sloi2024]D1T1精卫的线性(?),而且还有代码整理一......
  • 2024.12.24 LGJ Round
    A有\(n\)个人,血量为\(a_i\),\(m\)次攻击,每次随机选一个血量不为\(0\)的人使其血量减\(1\),问期望使多少人血量归零。\(n\le15,a_i,m\le200\)。设\(dp_{i,s}\)表示前\(i\)次攻击\(s\)集合里的人已经死了,此时的贡献。转移的话,枚举一个在此时全部死掉的一个人,再把这......
  • 12.24随笔
    这里是12.24随笔题目留档:给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。示例1:输入:coins=[1,2,5],a......
  • 24.12.24
    好像用了快一天看了看这辈子也用不到的东西呢。感觉在场上不如直接暴力呢。插头dp轮廓线dp网格图状压dp的一种方式,即逐格dp。以我的脑子只会限制四联通下的轮廓线。限制跨了多行还是压整行逐行dp罢。轮廓线:已决策状态和未决策状态的分界线压的(应该)是已决策状态......
  • 12.24
    【已解决】JavaScript---items="${arraylist}"var="student"无法获取到值,null错误第一、bean层只写数据结构1、定义成员变量,私有的属性2、重写tostring方法3、写带全部参数的构造方法4、写无参构造方法5、写get、set方法注意#变量名和方法名的拼写错误,检查再三......