混凝土的强度预测(R语言 超详细完整代码介绍)神经网络+线性回归

  • 任务背景

在工程领域中,对建筑材料的性能有精确的估计至关重要。这些估计是必需的,以便制定安全准则来管理用于楼宇、桥梁和道路建设中的材料。

估计混泥土的强度是一个特别有趣的挑战。尽管混泥土几乎要用于每一个建设项目,但由于它各种成分的使用以复杂的方式相互作用,所以它的性能变化很大。因此,很难精确地预测它最终产品的强度。

  • 数据分析与预测目标

预测目标

给定一份材料成分清单,要求:

(1)挑选合适的模型预测混泥土强度;

(2)考虑预测值与真实值的相关性,评估模型性能并进行优化

准备数据

混凝土数据集包含了1030 个混凝土案例9个描述混合物成分的特征。这些特征被认为与最终的抗压强度相关,并且它们包含了产品中水泥Cement (单位为kg/m3 ) 高炉矿渣Blast Furnace Slag (单位kg/m3),Fly Ash(单位为kg/m3 ),Water(单位kg/m3 )Superplasticizer(单位为kg/m3 ),粗集料(coarse aggregate)和细集料( fine aggregate)的量(单位为kg/m3 ),老化时间(aging time)(单位为天),混凝土抗压强度(兆帕,兆帕)

  • 数据预处理及分析

 

数据预处理

(1)可以看到图中变量名比较复杂,给变量重命名如下,便于下文使用

 

(2)可以看到数据由0-1000不等,数据是均匀分布或者严重非正太时,可以将其标准化到0-1范围内,对数据规范化处理得

# 数据标准化

对比原始最大值最小值82.60 2.33发现规范化后数据在0~1之间 说明规范化顺利进行

normalize <- function(x) {
   return((x - min(x)) / (max(x) - min(x)))}
# apply normalization to entire data frame
concrete_norm <- as.data.frame(lapply(concrete, normalize))
# confirm that the range is now between zero and one
summary(concrete_norm$strength)

(3)设置随机数划分训练集和测试集

set.seed(1265)
train_sample=sample(1000,800)# 划分训练集和测试集
concrete_train <- concrete_norm[train_sample, ]
concrete_test <- concrete_norm[-train_sample, ]

 

  • 模型构建与评价

神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。

BP网络是一种有监督的前馈运行的神经网络,它由输入层i、隐含层h、输出层k以及各层之间的节点的连接权所组成。它又分为正向和反向传播两种,以下对各层进行详细介绍。

1、 正向传播过程

输入层

输入值一般为样本各分量输入值,输出值一般等于输入值。

隐含层

对于节点j,其输入值为其前一层各节点输出值的加权和:

                                            

输出值

                                                  

式中称为激励函数或者作用函数。一般采用sigmoid函数:

      

式中称为阙值,λ称为温度系数。

隐含层可为一层或者多层,但是随着隐含层的增多,网格的复杂程度也随之增加,学习速度减慢,另外网络的推导能力也有可能下降,即所谓的“over fitting”现象。网络隐含层以及节点数目的选取是BP网络学习算法有待解决的一个问题。

输出层

输出层的输入与输出与隐含层类似,分别为:

        

      

2、 反向传播过程

BP学习算法的误差函数一般定义为实际输出与期望输出的均方误差和。通过使误差函数最小化的过程不断的改变权重,完成从输入到输出的非线性映射。

设网络输入模式样本为,期望输出为 ,均方误差函数为:

 

而对于所有的学习样本,系统的均方误差为:

  

为了达到学习目的,要根据误差函数来相应地调整网络间的连接权值。一般来说经典的BP学习算法采用最快速梯度下降法调整权值,每次调整的增量为:

   

式中0<η<1称为学习率。

从式可推出下列连接权值的修正量公式

     

对于输出节点:

对于隐节点:

 

为了对混凝土中使用的原料和最终产品的强度之间的关系建立模型,我们将使用一个多层前馈神经网络。首先构造两个隐藏结点的多层前馈网络,然后对模型拓扑可视化得

## Step 3: 基于数据训练模型

# 神经网络模型

library(neuralnet)

concrete_model <- neuralnet(formula = strength ~ cement + slag + ash + water + superplastic +

                              coarseagg + fineagg + age,data = concrete_train,hidden=2)

 

# visualize the network topology

plot(concrete_model)

 在这个简单的模型中,对于8个特征中的每一个特征都有一个输人节点,后面跟着-个单一的隐藏节点和一个单一的预测混凝土强度的输出节点。每一个连接的权重也都被描绘出来,偏差项也被描绘出来(通过带有1的节点表示)。

我们可以看出训练的步数为21996和一个称为误差平方和2.69953

模型评估

对于数值预测问题需要度量混凝土强度和真实值之间的相关性,可以用cor()函数

  • 提高模型性能
  • # 生成关于数据集的预测值
    model_results <- compute(concrete_model, concrete_test[1:8])
    # obtain predicted strength values
    predicted_strength <- model_results$net.result
    # 获取两个之间的相关性
    cor(predicted_strength, concrete_test$strength)

     

## Step 5:提高模型的性能

# 隐藏层有5个单元concrete_model2 <- neuralnet(strength ~ cement + slag +                               ash + water + superplastic +coarseagg + fineagg + age,                            
 data = concrete_train, hidden = 5)# 
可视化模型plot(concrete_model2)

# 评估模型的性能

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

predicted_strength2 <- model_results2$net.result

cor(predicted_strength2, concrete_test$strength)

从优化后的模型5个隐藏结点相关性达到0.93,提高后的模型误差从2.69下降到1.62

 

线性回归得到模型为比较

lm.fit <- glm(strength ~ cement + slag +

                ash + water + superplastic +

                coarseagg + fineagg + age,

              data = concrete_train)

summary(lm.fit)

pr.lm<-predict(lm.fit,concrete_test)

MSE.LM<-sum((pr.lm-concrete_test$strength)^2)/nrow(concrete_test)

print(MSE.LM)

 

由图可知, BP方法预测的精度比非线性回归模型预测的要高得多.说明神经网络方法对非线性问题的分析与预测比回归分析方法有更大的优势, 若有更多的数据用于训练网络,则网络的预测能力会更强.并且采用人工神经网络方法预测混凝土强度,可减少混凝土适配次数,减少人力物力

  • 15
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值