本项目是故障预测,不是时序预测,本质还是分类问题
1 数据集介绍
特征文件:
标签文件:共计4个标签,其中大多数都是正常的,其他是3个不正常的类别
2 使用BP网络
2.1 读取数据,然后选择几个使用的特征
feature_index = [1,3,13,14,17];
x=xlsread("data.xlsx");
y=xlsread("10号风机标签.csv");
error_index = find(y~=1);
train_index = [error_index(1),error_index(2),error_index(4),error_index(5),error_index(7),error_index(8)]';
test_index = [error_index(3),error_index(6),error_index(9)]';
y(error_index)
2.2 搭建网络,使用newff函数
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');% 建立模型,传递函数使用purelin,采用梯度下降法训练W1= net. iw{1, 1};%输入层到中间层的权值
B1 = net.b{1};%中间各层神经元阈值W2 = net.lw{2,1};%中间层到输出层的权值
B2 = net. b{2};%输出层各神经元阈值
2.3 训练网络,输出结果图像
结果包含:真实值与预测值,迭代过程图像,混淆矩阵图像
3 使用GA优化BP网络
我们将神经网络参数优化问题看做一个最优化问题,目标函数就是loss,待求解的参数就是w和b,在ga里面,适应度就是目标函数,染色体上每个位置片段就是w和b,在每次迭代时,ga通过染色体的选择、交叉、变异等操作随机的选出适应度最好的那个种群。
3.1 使用ga进行优化
for j=1:sizepopx=individuals.chrom(j,:); %个体individuals.fitness(j)=fun(x,inputnum,hiddennum,outputnum,net,inputn,outputn);%找到最小和最大适应度的染色体及它们在种群中的位置
[newbestfitness,newbestindex]=min(individuals.fitness);
[worestfitness,worestindex]=max(individuals.fitness);
% 代替上一次进化中最好的染色体
if bestfitness>newbestfitnessbestfitness=newbestfitness;bestchrom=individuals.chrom(newbestindex,:);
endindividuals.chrom(worestindex,:)=bestchrom;individuals.fitness(worestindex)=bestfitness;avgfitness=sum(individuals.fitness)/sizepop;trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度end
end
trace= trace(1:end-1,:);
xl=1:sizepop:length(trace);
trace=trace(xl,:);
3.2 结果对比
4 最后的结果对比
bp:
平均绝对误差MAE为:0.25
均方误差MSE为: 0.55
均方根误差RMSE为: 0.74162
分类正确率为: 85Gabp:
隐含层节点数为30时的误差结果如下:
平均绝对误差MAE为:0.2
均方误差MSE为: 0.5
均方根误差RMSE为: 0.70711
分类正确率为: 90详情联系Q 596520206
通过对比,我们发现gabp的结果要好于bp的结果