R语言学习#3-用神经网络对混凝土强度进行建模

用神经网络对混凝土强度进行建模

实验目的

根据过去案例的历史数据,包括混凝土成分的多个主要特征、强度结果等数据样本,建立神经网络模型,用于预测新样本的抗压强度

实验要求

1、利用已发生的1030条数据样本,8个条件属性包括水泥cement、矿渣slag、灰ash、水water、超塑化剂superplasticizer、粗料集coarse aggregate、细料集fine aggregate、老化时间aging time;1个结论属性:抗压强度。建立神经网络预测模型;

2、对于新样本,根据混凝土成分的特征,预测输出抗压强度。(kg/cm2)

实验原理

基于R语言与数据样本,建立神经网络模型。对模型进行训练、评估和优化,以及部署预测

实验仪器、设备、材料或软件等

1、Windows环境

2、R 3.6.3 安装

3、Rstudio 安装

已装跳过

实验内容及步骤

数据预处理

载入数据文件

concrete <- read.csv(“concrete.csv”)

查看数据字段定义

str(concrete)

文件中的数据都很大,需要进行归一化处理

定义“标准化函数”(归一化)

normalize <- function(x){ return((x - min(x)) / (max(x) - min(x)))}

标准化训练数据集

concrete_norm <- as.data.frame(lapply(concrete, normalize))

对比标准化前后的数据情况

summary(concrete_norm$strength)

summary(concrete$strength)

分析出训练集和测试集

concrete_train <- concrete_norm[1:773,]

concrete_test <- concrete_norm[774:1030,]

使用留出法,比例为3:1.

训练模型

安装升级网络算法包

install.packages("neuralnet”)

加载算法库

library(neuralnet)

建模
  • 生成模型

concrete_model <-neuralnet(strength~cement+slag+ash+water+superplastic+coarseagg+fineagg+age, data=concrete_train)

  • 查看模型

plot(concrete_model)

模型一共有三层,第一层有八个神经元、第二层和第三层都只有一个神经元,误差平方和为5.666757;迭代次数为1560.

评估模型
  • 使用测试数据集进行测试

model_results <- compute(concrete_model,concrete_test[1:8])

  • 取出预测的强度结论结果值

predicted_strength <- model_results$net.result

  • 计算精确度

cor(predicted_strength,concrete_test$strength)

    精确度为0.7214244.

优化模型
  • 建模(增加隐藏层神经元个数)

concrete_model2<- neuralnet(strength ~ cement+slag+ash+water+superplastic+coarseagg+fineagg+age,data=concrete_train,hidden=3)

  • 查看模型

plot(concrete_model2)

模型一共有三层,第一层有八个神经元、第二层较于优化前的模型增加了两个神经元,共三个神经元,第三层仍然是一个神经元,误差平方和为2.029324;迭代次数为20132.这些数值较于之前有明显的增加。

  • 使用测试数据集进行预测

model_results2 <- compute(concrete_model2, concrete_test[1:8])

  • 取出预测的强度结论结果值(展示部分)

predicted_strength2 <- model_results2$net.result

  • 计算准确度

cor(predicted_strength2,concrete_test$strength)

可见,优化后的模型精确度有所提高,为0.823141。

实际预测
  • 读取新数据

concrete_new <- read.csv("concrete-new.csv")

  • 标准化

concrete_new_norm <- as.data.frame(concrete_new)

concrete_new_norm$cement=(concrete_new_norm$cement-102)/(540-102)

concrete_new_norm$slag=(concrete_new_norm$slag-0)/(359.4-0)

concrete_new_norm$ash=(concrete_new_norm$ash-0)/(200.1-0)

concrete_new_norm$water=(concrete_new_norm$water-121.8)/(247-121.8)

concrete_new_norm$superplastic=(concrete_new_norm$superplastic-0)/(32.2-0)

concrete_new_norm$coarseagg=(concrete_new_norm$coarseagg-801)/(1145-801)

concrete_new_norm$fineagg=(concrete_new_norm$fineagg-594)/(992.6-594)

concrete_new_norm$age=(concrete_new_norm$age-1)/(365-1)

  • 预测-归一化

model_results_new <- compute(concrete_model2,concrete_new_norm)

predicted_strength_new <- model_results_new$net.result

predicted_strength_new

归一化的结果为0.8232523,较于优化后的结果有微小提高。

  • 还原抗压强度数据值-反归一化

final_results=predicted_strength_new*(82.6-2.33)+2.33

final_results

反归一化后的值为68.412254。

结果分析

模型架构:

  • 原始模型(concrete_model)包含了一个具有8个神经元的输入层,一个具有8个神经元的隐藏层,以及一个具有1个神经元的输出层。模型的均方误差(误差平方和)较高,迭代次数也相对较低。
  • 优化后的模型(concrete_model2)增加了隐藏层的神经元数量,共三层,具有更多的参数,从而提高了模型的容量。这使得模型更复杂,适应性更强,均方误差较低,但需要更多的迭代次数。

模型评估:

  • 原始模型的精确度为0.7214,而优化后的模型精确度为0.8231。优化后的模型表现更好,但还有改进的空间。
  • 在模型评估中,还可以考虑其他指标,如均方根误差(RMSE)或平均绝对误差(MAE),以更全面地了解模型的性能。

实际预测:

  • 成功地用新数据进行了预测,并对结果进行了反归一化。预测结果为68.41,这是一个有希望的预测结果。

进一步改进:

  • 尝试不同的神经网络架构和超参数,以找到更好的模型性能。
  • 考虑使用交叉验证来更全面地评估模型的性能。
  • 如果有更多的特征可用,可以尝试添加它们以改进模型的性能。

考虑使用更大规模的数据集,如果可能的话,以提高模型的泛化能力。

end

此次实验仓促,之后会改进。(少点事情啊喂!w(゚Д゚)w

数据:

链接:https://pan.baidu.com/s/1oYU7UYjUJRgJea4TEwyQWQ?pwd=8iz7
提取码:8iz7
 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值