您的位置:首页 > 理论基础 > 计算机网络

运用主成分分析法预测病毒(未完善)

2016-03-06 10:57 525 查看
clear

load data.mat;

inputName = A; %输入数据的变量名

dataNum = 2; %所需预测元素的列数

[n,m] = size(inputName);%导入数据

X0 = inputName(n:-1:1,:);

Time = (1:n)’;

figure(‘name’,’病毒预测情况’,’numbertitle’,’off’);

plot(Time,X0(:,2),Time,X0(:,3)*200,’linewidth’,1.5);

grid on;

h=legend(‘病毒数’,’评价’);

set(h,’fontsize’,16);

title(‘病毒数与当次评价’);

xlabel(‘时间序号’,’fontsize’,16);

ylabel(‘病毒数与评价’,’fontsize’,16);

set(gca,’fontsize’,16);

figure(‘name’,’木马和病毒数随时间的变化情况’,’numbertitle’,’off’);

[AX]=plot(Time,X0(:,4));

grid on;

%set(GET(AX(1),’Ylabel’),’String’,’涨跌额’,’fontsize’,16);

title(‘木马随时间的变化情况’,’fontsize’,16);

xlabel(‘时间序号’,’fontsize’,16);

%第二步 利用主成分分析法

%对样本初始化

Time0=1:20;

nT0=length(Time0);

StdX0=std(X0(Time0,:));

MeanX0=mean(X0(Time0,:));

X=(X0(Time0,:)-ones(nT0,1)*MeanX0)./(ones(nT0,1)*StdX0);

%求原标准样本集的特征协方差阵

R=cov(X);

%求协方差矩阵R的全部特征值和对应的特征向量,并根据特征值由大至小进行排序

[A,L]=eig(R);

Lambda=diag(L);

[Lambda,Num1]=sort(Lambda,’descend’);

A=A(:,Num1);

%得到方差由大到小排序的主成分,其中方差的大小即为特征值

Y=X*A;

%计算超过0.85的方差累积序号

cumEnergy= cumsum(Lambda);

Energy = cumEnergy(m);

nE = find(cumEnergy/Energy>0.85,1);

%对样本进行标准化

Time0=1:20 %总共的数据数

nT0=length(Time0);

StdX0=std(X0(Time0,:));

MeanX0=mean(X0(Time0,:));

X=(X0(Time0,:)-ones(nT0,1)*MeanX0)./(ones(nT0,1)*StdX0);

%利用MatLab自带的函数princomp计算主成分

[A,Y] = princomp(X);

%将第t天的y1,y2作为BP神经网络的输入,第t+1天的病毒数x2作为BP神经网络的输出

%训练神经网络

%利用BP神经网络进行训练

YChoose = X*A(:,1:nE);

P = YChoose(Time0,:)’; %得到输入量

T = [X(Time0(2:end),dataNum)’,(X0(nT0,dataNum)-MeanX0(dataNum))/StdX0(dataNum)]; %得到输出量,把4都改成了2

%创建BP神经网络

net = newff(minmax(P),[nE,20,1],{‘tansig’,’tansig’,’tansig’},’trainlm’,’learngdm’,’msereg’);

net = init(net);%初始化

%训练神经网络

net.performFcn=’sse’; %设置性能函数

net.trainParam.goal = 0.01; %训练速度

net.trainParam.show = 20; %两次之间的训练次数,默认25

net.trainParam.epochs=5000; %最大训练次数,默认是100

net.trainParam.mc = 0.95; %神经网络的动量因子

[net,tr] = train(net,P,T); %对网络进行训练

%将训练好的神经网络检验剩下的50组数据

YOut = sim(net,P); %输出训练后的神经网络的输出

%对输出进行反归一化

x2 = StdX0(dataNum)*MeanX0(dataNum); %4替换为2

figure(‘name’,’实际病毒与预测病毒的比较’,’numbertitle’,’off’);

plot(Time0+1,X0(Time0+1,dataNum),Time0+1,x2,’linewidth’,1.5); %4改成了2

grid on;

h=legend(‘实际病毒数’,’预测病毒数’);

set(h,’fontsize’,16);

title(‘实际病毒数与预测病毒数比较’);

xlabel(‘时间序号’,’fontsize’,16);

ylabel(‘病毒感染数’,’fontsize’,16);

set(gca,’fontsize’,16);

%对后面4组数据进行测试

Time1 = 20:23; %预测数据的列数

nT1 = length(Time1);

X1 = (X0(Time1,:)-ones(nT1,1)*MeanX0)./(ones(nT1,1)*StdX0); %归一化

YChoose1 = X1*A(:,1:nE);

P1 = YChoose1(1:nT1,:)’; %得到输出量

YOut1 = sim(net,P1); %输出训练后神经网络的输出

x21 = StdX0(2)*YOut1+MeanX0(2); %对输出进行反归一化

figure(‘name’,’实际病毒与预测病毒的比较’,’numbertitle’,’off’);

plot(Time1+1,X0(Time1+1,2),Time1+1,x21,’linewidth’,1.5); %4改成了2

grid on;

h=legend(‘实际病毒数’,’预测病毒数’);

set(h,’fontsize’,16);

title(‘实际病毒数与预测病毒数比较’);

xlabel(‘时间序号’,’fontsize’,16);

ylabel(‘病毒感染数’,’fontsize’,16);

set(gca,’fontsize’,16);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息