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

简介: 用人工神经网络对混凝土的强度进行建模

1 目的

  在当今的科技时代,人工智能技术已经深入到各个领域,为我们的生活和工作带来了诸多便利。其中,人工神经网络作为深度学习技术的核心,具有强大的数据处理和模式识别能力,被广泛应用于各种预测和分类问题中。今天,我们将探讨如何运用人工神经网络对混凝土的强度进行建模。

2 数据来源

  该演示数据来源于: 机器学习和智能系统中心

3 案例演示

3.1 探索数据

3.1.1 读取数据并查看数据类型

  运行代码:

data<-read.csv("G:\\concrete.csv")                 #数据读取
str(data)                                          #数据类型

  结果展示:

## 'data.frame':    1030 obs. of  9 variables:
##  $ cement      : num  141 169 250 266 155 ...
##  $ slag        : num  212 42.2 0 114 183.4 ...
##  $ ash         : num  0 124.3 95.7 0 0 ...
##  $ water       : num  204 158 187 228 193 ...
##  $ superplastic: num  0 10.8 5.5 0 9.1 0 0 6.4 0 9 ...
##  $ coarseagg   : num  972 1081 957 932 1047 ...
##  $ fineagg     : num  748 796 861 670 697 ...
##  $ age         : int  28 14 28 28 28 90 7 56 28 28 ...
##  $ strength    : num  29.9 23.5 29.2 45.9 18.3 ...

  通过运行结果我们可以看到数据框中9个变量为数值型或整型,全部数据数值范围大概为从0到1000多,由于神经网络的运行最好将输入数据缩放到0附近的狭窄范围,这里采用极大极小值标准化的方法将数值范围缩放为0-1。

3.1.2 定义标准化函数并查看函数效果

  运行代码:

normalize<-function(x){
  return((x-min(x))/(max(x)-min(x)))
  }                                                #极大极小值标准化函数
data1<-as.data.frame(lapply(data,normalize)) #标准化数据
summary(data$strength)                       #标准化前
summary(data1$strength)                      #标准化后

  结果展示:

> summary(data$strength)                       #标准化前
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    2.33   23.71   34.45   35.82   46.13   82.60
> summary(data1$strength)                      #标准化后
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0000  0.2664  0.4001  0.4172  0.5457  1.0000

  以混凝土强度数据为例,测试函数效果,通过运行结果可以看到:混凝土强度范围由2.33-82.60缩放为0-1,说明函数测试效果是可行的。

3.2 模型的建立及优化

3.2.1 建立训练集及测试集

  运行代码:

data1_train<-data1[1:773,]                #训练集
data1_test<-data1[774:1030,]              #测试集

  根据Yeh原始文献示例,将数据划分为一个具有75%案例的训练集和一个具有25%案例的测试集。故将标准化后的数据前773行作为训练集,后257行数据作为测试集。

3.2.2 基于数据训练模型

  运行代码:

library("neuralnet")
data1_model<-neuralnet(strength~cement+slag
                       +ash+water+superplastic+coarseagg+fineagg+age,
                       data=data1_train)  #训练中只有一个单一隐藏节点
plot(data1_model)                         #网络拓扑结构可视化

  结果展示:

  根据运行结果显示,模型误差平方和为5.078,经过4072次迭代。

3.2.3 评估模型性能

  运行代码:

model_results<-compute(data1_model,data1_test[1:8])
predicted_strength<-model_results$net.result #预测值
cor(predicted_strength,data1_test$strength)  #预测强度与真实值的相关性

  结果展示:

##           [,1]
## [1,] 0.8056153

  经过单节点建立的神经网络模型,预测的混凝土强度与真实值之间的相关性大约为0.8057,表示具有一个相当强的线性关系,采用只有一个单一的隐藏节点,已经有个很好的预测效果。考虑到只使用了一个隐藏节点,尝试建立具有5个隐藏节点的神经网络模型进行进一步优化(相关系数每次运行结果具有一定偏差)。

3.2.4 提高模型的性能

  通过修改隐藏层节点个数进行优化。

  运行代码:

data1_model2<-neuralnet(strength~cement+slag+ash+water+superplastic+coarseagg+fineagg+age,
                          data=data1_train,hidden = 5)#隐藏节点个数为5
plot(data1_model2)

  结果展示:

  据报告结果显示,模型的误差由之前的5.078降为1.796。此外,训练步数由4072步上升为35141步。

model_results2<-compute(data1_model2,data1_test[1:8])
predicted_strength2<-model_results2$net.result  #预测值
cor(predicted_strength2,data1_test$strength)    #预测强度与真实值的相关性
##          [,1]
## [1,] 0.930881

  利用相同步骤对预测值和真实值进行比较,这里获得的相关系数达0.9185,与之前具有的单个隐藏节点的结果0.8063相比,有了相当大的优化效果(相关系数每次运行结果具有一定偏差)。

3.2.5 模型拟合效果

  运行代码:

par(mfrow = c(3,1))                       #创建3×1画布
t<-c(1:257)
k1<-data1_test[c(9)]                      #原始数据
k2<-predicted_strength                    #单节点
k3<-predicted_strength2                   #多节点
mmm<-data.frame(t,k1,k2,k3)
names(mmm)<-c("index","k1","k2","k3")
mmm1<-mmm[order(mmm[,3],decreasing = F),] #按单节点升序排列
plot(mmm1$k2,type="l",col="red",lwd=2,main="单节点模型")
points(mmm1$k1,type = "p",pch=8,cex=1)
mmm2<-mmm[order(mmm[,4],decreasing = F),] #按多节点升序排列
plot(mmm2$k3,type="l",col="green",lwd=2,main="多节点模型")
points(mmm2$k1,type = "p",pch=8,cex=1)
mmm2<-mmm[order(mmm[,4],decreasing = F),] #按多节点升序排列
plot(mmm2$k3,type="l",col="blue",lwd=2,main="单节点及多节点对比")
lines(mmm1$k2,col="red",lwd=2)
points(mmm2$k1,type = "p",pch=4,cex=1,col="blue")
points(mmm1$k1,type = "p",pch=8,cex=1,col="red")
abline(h=0.6,lty=2)
abline(h=0.08,lty=2)
legend("topleft",
       legend=c("多节点","单节点"),
       col=c("blue","red"),
       lty = c(1,1),
       pch=c(4,8),
       lwd=2)

  结果展示:

  根据结果显示,模型拟合整体效果较好,单节点和多节点神经网络模型在标准化混凝土强度数据中,0.08-0.5之间两种模型拟合效果大致相同,超过0.5后存在一定偏差。

相关文章
|
3月前
|
数据采集 量子技术 双11
【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 建模方案及代码实现
本文提供了2023年第十三届MathorCup高校数学建模挑战赛C题的详细建模方案及代码实现,针对电商物流网络中的包裹应急调运与结构优化问题,提出了包括时间序列分析在内的多种数学模型,并探讨了物流网络的鲁棒性。
64 2
【2023 年第十三届 MathorCup 高校数学建模挑战赛】C 题 电商物流网络包裹应急调运与结构优化问题 建模方案及代码实现
WK
|
2月前
|
机器学习/深度学习 自然语言处理 算法
PSO算法和人工神经网络有什么不同
PSO算法(粒子群优化)与人工神经网络(ANN)在原理、应用及优化方式上差异显著。PSO模拟鸟群行为,通过粒子协作在解空间中搜索最优解;而ANN模仿大脑神经元结构,通过训练学习输入输出映射,适用于模式识别、图像处理等领域。PSO主要用于优化问题,实时性高,结果直观;ANN则在处理复杂非线性关系方面更强大,但结构复杂,训练耗时长,结果解释性较差。实际应用中需根据需求选择合适技术。
WK
26 0
|
4月前
|
机器学习/深度学习 分布式计算 MaxCompute
ODPS问题之什么是Join/Inner Join
ODPS问题之什么是Join/Inner Join
|
4月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于负相关误差函数的4集成BP神经网络matlab建模与仿真
**算法预览:** 图像显示无水印的2022a版MATLAB运行结果 **软件版本:** MATLAB 2022a **核心代码片段:** 省略展示 **理论概述:** NCL集成BP网络利用负相关提升泛化,结合多个弱模型减少错误关联。通过λ参数控制模型间负相关程度,λ&gt;0增强集成效果,提高预测准确性和系统稳健性。
|
4月前
|
机器学习/深度学习 数据采集 算法
Python实现人工神经网络回归模型(MLPRegressor算法)并基于网格搜索(GridSearchCV)进行优化项目实战
Python实现人工神经网络回归模型(MLPRegressor算法)并基于网格搜索(GridSearchCV)进行优化项目实战
136 0
|
4月前
|
机器学习/深度学习 算法 数据可视化
Python基于librosa和人工神经网络实现语音识别分类模型(ANN算法)项目实战
Python基于librosa和人工神经网络实现语音识别分类模型(ANN算法)项目实战
147 0
|
5月前
|
机器学习/深度学习 算法
基于RBF神经网络的自适应控制器simulink建模与仿真
使用MATLAB2022a,开发了一个基于RBF神经网络的自适应控制器Simulink S函数,进行了控制仿真。核心程序展示了RBF网络的权重和参数调整。测试结果显示了控制效果。RBF网络是一种三层前馈网络,利用高斯函数处理非线性系统。自适应控制器通过在线调整参数应对系统变化。网络学习分为自组织和有导师两个阶段,通过误差信号调整权重,确保系统稳定性。
|
6月前
|
机器学习/深度学习 传感器 芯片
LabVIEW利用人工神经网络辅助进行结冰检测
LabVIEW利用人工神经网络辅助进行结冰检测
41 0
|
5月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch代码实现神经网络
这段代码示例展示了如何在PyTorch中构建一个基础的卷积神经网络(CNN)。该网络包括两个卷积层,分别用于提取图像特征,每个卷积层后跟一个池化层以降低空间维度;之后是三个全连接层,用于分类输出。此结构适用于图像识别任务,并可根据具体应用调整参数与层数。

热门文章

最新文章