运用主成分分析法预测病毒(未完善)
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);
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);
相关文章推荐
- 使用spark和spark mllib进行股票预测
- 从SVD到PCA——奇妙的数学游戏
- 2010年天灾预测年度报告简表
- 基于神经网络的预测模型
- 2008年11月【51CTO版】软考考前冲刺预测卷
- 独立思考者模型:识别媒体与砖家的谎言
- 大盘分析
- 灰色系统模型GM(1,1)的R语言实现
- 2045的世界?吓人...!!
- 知道得越多,越难改变观点
- 足球预测算法分析之埃罗预测
- 基于随机森林的煤与瓦斯突出预测方法研究
- 正则表达式---零宽度正预测先行断言 (?=X)
- 卡尔曼滤波算法原理
- h264码流分析
- 关于神经网络的学习
- pca 主成分分析
- Kaggle Titanic Competition-第二部分
- 主成分分析和因子分析的区别
- 话务预测(4) HMM