用matlab实现bp神经网络的miv分析

用matlab实现bp神经网络的miv分析本文用MATLAB实现了BP神经网络的MIV变量筛选算法

BP神经网络的MIV变量筛选

我个人理解的MIV算法,就是说在神经网络之前,无数遍尝试输入自变量并得到了一大堆输出结果,然后你把这些数据输进神经网络里面让它帮你找出各个自变量的影响程度,最后得出的miv值,绝对值越大,影响因素越重要。

算法

MIV被认为是在神经网络中评价变量相关的最好指标之一(这句话是我抄的,我也不知道谁给它安的这么大的称号,国内的paper也没有看到这句话的源头,引用——周莹. 基于MIV特征筛选和BP神经网络的滚动轴承故障诊断技术研究[D]. 北京交通大学, 2011.)。
具体的过程是,首先训练一个BP神经网络,然后把训练数据的自变量每个增加10%或者减小10%,则得到两个新的训练数据自变量,用这个数据预测两组结果,假设B1和B2,那么求出B1和B2的差值,这个差值就被称为IV,然后取个平均数,就是mean-IV即MIV值,依次算出各个自变量的MIV值,就能确定他们的影响程度了。

代码

话不多说,其MATLAB实现代码如下:

clear clc
load zx.txt %导入数据
jg=zx; %利用数据训练 BP 神经网络
p=[jg(:,1),jg(:,2),jg(:,3),jg(:,4),jg(:,5),jg(:,6)];
t=jg(:,7);
p=p'; t=t';
%% MIV增加或者减少自变量 p=p'; [m,n]=size(p); yy_temp=p; % p_increase为增加10%的矩阵 p_decrease为减少10%的矩阵
for i=1:n
    p=yy_temp;
    pX=p(:,i);
    pa=pX*1.1;
    p(:,i)=pa;
    aa=['p_increase'  int2str(i) '=p;'];
    eval(aa);
end

for i=1:n
    p=yy_temp;
    pX=p(:,i);
    pa=pX*0.9;
    p(:,i)=pa;
    aa=['p_decrease' int2str(i) '=p;'];
    eval(aa);
end

%% 利用原始数据训练一个正确的神经网络 nntwarn off; p=yy_temp; p=p'; % bp网络建立
net=newff(minmax(p),[12,1],{
  
  'tansig','purelin'},'traingdm');
% 初始化bp网络
net=init(net);
% 网络训练参数设置
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=2000;
% bp网络训练
net=train(net,p,t);

%% 变量筛选 MIV算法的差值计算 % 转置后sim
for i=1:n
    eval(['p_increase',num2str(i),'=transpose(p_increase',num2str(i),');'])
end

for i=1:n
    eval(['p_decrease',num2str(i),'=transpose(p_decrease',num2str(i),');'])
end
% result_in为增加10%后的输出 result_de为减少10%后的输出
for i=1:n
    eval(['result_in',num2str(i),'=sim(net,','p_increase',num2str(i),');'])
end

for i=1:n
    eval(['result_de',num2str(i),'=sim(net,','p_decrease',num2str(i),');'])
end

for i=1:n
    eval(['result_in',num2str(i),'=transpose(result_in',num2str(i),');'])
end

for i=1:n
    eval(['result_de',num2str(i),'=transpose(result_de',num2str(i),');'])
end

for i=1:n
    IV= ['result_in',num2str(i), '-result_de',num2str(i)];
    eval(['MIV_',num2str(i) ,'=mean(',IV,')'])

end

总结与反思

程序中读取的txt内容我只用了如下:
1 1 1 1 1 1 6
1 3 4 2 4 2 16
两组数据,得出的结果自然不是很好,但是我设置了更多的数据之后,随着不同的神经网络参数,即便是同样函数也会出现前后不同的重要度。当我试了随机生成很多组数列,以sum各组前三个数据作为函数,后三个作为噪声数据,迭代次数为2000次时,得出的结果非常符合实际情况,但是当迭代10000次时,后三个的重要度居然大于前三个数据,这很让我诧异。所以我觉得MIV方法也不一定就是最好的方法,这个称号来的有些突然,多训练几次网络,使用不同的灵敏度参数验证,才是可靠的保障。

今天的文章用matlab实现bp神经网络的miv分析分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66835.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注