一、背景描述
题目详见2020年 第十七届华为杯研究生数学建模竞赛B题,下面简单介绍一下题目:
汽油燃烧产生的尾气排放对大气环境有重要影响,因此降低汽油中的硫等物质的含量的同时,并尽量保持其辛烷值是世界各国追求的目标,这就需要在生产汽油的过程中控制好各个操作变量的关系和取值范围。但是由于工厂实际生产汽油所采集到的操作变量数据具有高度的非线性和相互强耦联的关系,且这些数据往往数量庞大,难以处理。因此对其进行数据预处理和建模分析,并优化操作变量十分重要。因此希望找到一种数学模型,从与辛烷值有关的几百种影响因素中找到一些影响因素较大的,并找到某种操作方法,来降低辛烷值损失。
本文介绍的一种解题思路如下:数据预处理+相关性分析+神经网络。
适用题目和应用场景:数据量大,维度多,多输入单输出的数据样本。
二、相关性分析
本章介绍三大相关性系数:Pearson、Kendall和Spearman。可以根据具体问题选择某一种或者多种相关性分析方法进行计算。
2.1 Pearson
皮尔逊相关也称为积差相关(或积矩相关)是英国统计学家皮尔逊于20世纪提出的一种计算直线相关的方法。Pearson相关系数用来衡量两个数据集合是否在一条线上面,它用来衡量定距变量间的线性关系。如衡量国民收入和居民储蓄存款、身高和体重、高中成绩和高考成绩等变量间的线性相关关系。适用于有关联的数据。
matlab代码:
Answer = corr(A,B,‘type’,‘Pearson’);其中,A和B是待计算的两个变量,Answer是A和B的相关性结果。
2.2 Kendall
Kendall相关系数是一个用来测量两个随机变量相关性的统计值。适用于计算分类对象,包括有序(费肥胖等级)和无序(血型)的数据。
matlab代码:
Answer = corr(A,B,‘type’,‘Kendall’);其中,A和B是待计算的两个变量,Answer是A和B的相关性结果。
2.3 Spearman
Spearman秩相关系数是一种无参数(与分布无关)检验方法,用于度量变量之间联系的强弱。适用于交叉学科。
matlab代码:
Answer = corr(A,B,‘type’,‘Spearman’);其中,A和B是待计算的两个变量,Answer是A和B的相关性结果。
三、BP神经网络
3.1 介绍
BP(Back Propagation)神经网络,即误差反向传播算法。是一种有导师的学习算法核心思想就是将每次输出层的输出列向量与目标列向量比较,作差可以得到一个误差,将这个误差沿着各层的顺序反向传递回去,改变各层的权值和阈值,反复这个过程直到输出向量与目标列向量的差值在设定范围内,即完成了训练过程。记录这个网络数据,以便后续调用。
3.2 参数配置
在matlab中,由newff()[21]函数可以创建一个级联前向BP神经网络,格式为:
net = newff(PR,[S1,S2,…,SN],{TF1,TF2,…,TFN},BTF,BLF,PF)。其中PR表示的是输入数据中最大和最小元素组成的两列的矩阵,Si表示的是各层的节点数,TFi是对应的Si层的传递函数,BTF为整个网络的训练函数;BLF和PF表示权值和性能函数,设为默认值即可。
matlab代码:
net=newff(minmax(Q),[8,8,1],{'tansig','tansig','logsig'},'trainlm');%Q表示训练数据
此外还有一些其他的模型参数可以设置:
net.trainParam.epochs=500; %训练次数
net.trainParam.goal=0.1; %目标误差
net.trainParam.lr=0.09; %学习率
net.trainParam.time=180; %学习时间
net=train(net,Q,W);sim(net,Q) %W表示模板数据,train是训练函数
3.3 模型输出结果
利用sim函数进行模型测试:testData代表测试数据;
Out = sim(net,testData);
判断Out中的数据,绝对值越接近1,表示模型计算越准确。
下图中红框内的数据表示测试数据代入网络后,与期望值的接近程度,越接近1表示仿真效果越好。
上述sim是数据化的显示方式,还可以利用nntraintool来生成网络构建结果:其中下图的上部分表示25层输入,1层输出,中间表示隐层和隐层节点数;Epoch表示训练次数,Time是训练时间;Algorithms选项卡中表示这次训练用到的训练算法;点击Plots部分的三个选项卡,可以分别绘制该络的模型表现、训练状态和回归曲线。
本文只是提供一种数据处理的思路,欢迎大家一起交流 ~ ~