⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pca.m

📁 PCA主元分析后用神经网络预测
💻 M
字号:
clear,clc;
load bp_test1_withoutchoose1.mat;
origin_data=bp;
sum1=sum(origin_data,1);
[a,b]=size(origin_data);
std=zeros(a,b);

%for i=1:b
    %std(:,i)=0.1+(0.8*(origin_data(:,i)-min(origin_data(:,i))))/(max(origin_data(:,i))-min(origin_data(:,i)));
%end;
for i=1:a
    for j=1:b
        std(i,j)=origin_data(i,j)/sum1(j);
    end;
end;

fprintf('相关系数矩阵:\n')
std=CORRCOEF(origin_data);
fprintf('特征向量及特征值:\n')
[vec,val]=eig(std);
newval=diag(val);
[y,i]=sort(newval);
fprintf('特征根排序:\n')
for z=1:length(y)
    newy(z)=y(length(y)+1-z)
end
fprintf('%g\n',newy)
rate=y/sum(y)
fprintf('\n贡献率:\n')
newrate=newy/sum(newy)
sumrate=0;
newi=[]
for k=length(y):-1:1
    sumrate=sumrate+rate(k)
    newi(length(y)+1-k)=i(k)
    if sumrate>0.95 break
    end
end
fprintf('主成份数:%g\n\n',length(newi))
fprintf('主成份载荷:\n')
for p=1:length(newi)
    for q=1:length(y)
        result(q,p)=sqrt(newval(newi(p)))*vec(q,newi(p))
end
end
disp(result)
%norm_data=origin_data*result;
norm_data=result;

load bp_test1_withoutchoose.mat;
origin_data=bp;
origin_data1(:,1:length(newi))=norm_data;
origin_data1(:,length(newi)+1:length(newi)+2)=origin_data(:,15:16)
[row,column]=size(origin_data1);
i=column
train_data=origin_data1(1:(row-30),:);
test_data=origin_data1((row-29):row,:);
%[r,c]=size(train_data);
p1=train_data;
t1=train_data(:,i);
p=p1';
t=t1';
%隐单元数目
n1=10;
%for i=1;28
    net=newff(minmax(p),[n1,1],{'tansig','tansig'},'trainbr');%traingdx,trainlm,trainrp,trainbr
    net.trainParam.epochs=1000; 
    net.trainParam.lr=0.1; %学习速率
    net.trainParam.goal=0.001; 
    net=train(net,p,t);
    %y=sim(net,p);
%end;
%将测试集验证建立的BP网络
%[r,c]=size(test_data);
p2=test_data;
t2=test_data(:,i);
p=p2';
t=t2';
y=sim(net,p);

Y_predict_recovery=y;
T_reality_recovery=origin_data1((row-29):row,i);
%plot(t,'k:+');hold on,plot(y,'r:.');legend('实际值','预测值');
plot(T_reality_recovery,'k:+');hold on,plot(Y_predict_recovery,'r:.');legend('实际值','预测值');
ylabel('粗选A/S');
hold on
figure;
relative_error=(Y_predict_recovery'-T_reality_recovery)./T_reality_recovery;
plot(relative_error,'g:*');


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -