![]() |
【原创】基于遗传算法的投影寻踪模型Matlab源码
投影寻踪是数据挖掘领域的一种重要方法,下面的源码使用遗传算法用于投影寻踪最佳投影向量的优化。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系。
%% “投影寻踪+遗传算法优化”的主仿真程序 % GreenSim团队原创作品,转载请注明 % [color=red]欢迎访问GreenSim——算法仿真团队→[url=http://blog.sina.com.cn/greensim]http://blog.sina.com.cn/greensim[/url][/color] %% 第一步:仿真参数设置 clear clc close all load Q5.txt DD=Q5;%导入D矩阵 [n,p]=size(DD); np=15; %训练样本的个数,前面1~np个样本用于建立模型,剩下的样本用于预测 if np>=n error('用于预测的样本个数不能大于或等于样本总数,请重新设置'); end year=1:np;%选择参与计算的样本,默认选择全部 Factor=1:p;%选择部分指标,默认选择全部 D=DD(year,Factor); K=50; %迭代次数 N=30; %种群规模 Pm=0.3; %变异概率 LB=-ones(1,p); %决策变量的下界 UB=ones(1,p); %决策变量的上界 Alpha=0.1; %窗口半径系数,典型取值0.1b %% 调用遗传算法优化投影寻踪模型的程序 [BESTX,BESTY,ALLX,ALLY]=GAUCP(K,N,Pm,LB,UB,D,Alpha) %% 以下均为整理输出结果 %所有数据都在workspace里,最值得关注的三个数据是 % Z 投影指标值,和参考文献里的符号是一致的 % Best_a 最佳投影向量,参考文献里也是用的符号a,这里加了个前缀Best,表示最佳 % BESTY 投影寻踪模型中的目标函数的变化情况,文献中的模型是最大化模型,这里按照惯例,对其加了个负号成为最小化模型 Best_a=(BESTX{K})';%方向向量 disp('最佳投影向量为'); disp(Best_a); d=zeros(np,p); DDjmax=max(DD); DDjmin=min(DD); for i=1:np d(i,:)=(DD(i,:)-DDjmin)./(DDjmax-DDjmin); end Z=zeros(np,1); for i=1:np Z(i)=abs(sum(Best_a.*d(i,:))); end Z=abs(Z); %% figure(2)%投影散布图 plot(year,abs(Z),'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5); %axis([1,12,0,2.5]);%图形边界根据需要显示 grid on xlabel('Year','FontName','Times New Roman','FontSize',12); ylabel('Projective Value','FontName','Times New Roman','Fontsize',12); %% figure(3) [newZ,I]=sort(Z); newyear=year(I); plot(year,abs(newZ),'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5); %axis([1,12,0,2.5]);%图形边界根据需要显示 grid on xlabel('Year','FontName','Times New Roman','FontSize',12); ylabel('Projective Value','FontName','Times New Roman','Fontsize',12); %% n2=n-np; d2=zeros(n2,p); for i=1:n2 d2(i,:)=(DD(i+np,:)-DDjmin)./(DDjmax-DDjmin); end Z2=zeros(n2,1); for i=1:n2 Z2(i)=abs(sum(Best_a.*d2(i,:))); end Z2=abs(Z2); disp('预测样本的投影预测值为'); disp(Z2); %% figure(4)%投影散布图 plot([Z;Z2],'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5); hold on plot((np+1):n,Z2,'bo','LineWidth',1,'MarkerEdgeColor','r','MarkerFaceColor','r','MarkerSize',5); legend('训练样本投影值','预测样本投影值'); %axis([1,12,0,2.5]);%图形边界根据需要显示 grid on xlabel('Year','FontName','Times New Roman','FontSize',12); ylabel('Projective Value','FontName','Times New Roman','Fontsize',12); |
所有时间均为北京时间。现在的时间是 19:53。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.