CS(布谷鸟搜索)算法MATLAB源码逐行中文注解
以优化SVM算法的参数c和g为例,对CS算法MATLAB源码进行了逐行中文注解。 完整程序和示例文件地址: 链接: 密码:pkdn
tic % 计时 %% 清空环境导入数据 clear clc close all load wndspd % 示例数据为风速(时间序列)数据,共144个样本 % 训练/测试数据准备(用前3天预测后一天),用前100天做测试数据 train_input(1,:)=wndspd(1:97); train_input(2,:)=wndspd(2:98); train_input(3,:)=wndspd(3:99); train_output=[wndspd(4:100)]; test_input(1,:)=wndspd(101:end-3); test_input(2,:)=wndspd(102:end-2); test_input(3,:)=wndspd(103:end-1); test_output=[wndspd(104:end)]; [input_train,rule1]=mapminmax(train_input); [output_train,rule2]=mapminmax(train_output); input_test=mapminmax(apply,test_input,rule1); output_test=mapminmax(apply,test_output,rule2); %% CS-SVR time=20; n=20; % n为巢穴数量 pa=0.25; % 被宿主发现的概率 dim = 2; % 需要寻优的参数个数 Lb=[0.01,0.01]; % 设置参数下界 Ub=[100,100]; % 设置参数上界 % 随机初始化巢穴 nest=zeros(n,dim); for i=1:n % 遍历每个巢穴 nest(i,:)=Lb+(Ub-Lb).*rand(size(Lb)); % 对每个巢穴,随机初始化参数 end fitness=ones(1,n); % 目标函数值初始化 [fmin,bestnest,nest,fitness]=get_best_nest(nest,nest,fitness,input_train,output_train,input_test,output_test); % 找出当前最佳巢穴和参数 %% 迭代开始 for t=1:time new_nest=get_cuckoos(nest,bestnest,Lb,Ub); % 保留当前最优解,寻找新巢穴 [~,~,nest,fitness]=get_best_nest(nest,new_nest,fitness,input_train,output_train,input_test,output_test); % 找出当前最佳巢穴和参数 new_nest=empty_nests(nest,Lb,Ub,pa); % 发现并更新劣质巢穴 % 找出当前最佳巢穴和参数 [fnew,best,nest,fitness]=get_best_nest(nest,new_nest,fitness,input_train,output_train,input_test,output_test); if fnew<fmin, fmin=fnew; bestnest=best ; end end %% 打印参数选择结果 bestobjfun=fmin; bestc=bestnest(1); bestg=bestnest(2); disp(打印参数选择结果); str=sprintf(Best c = %g,Best g = %g,bestc,bestg); disp(str) %% 利用回归预测分析最佳的参数进行SVM网络训练 cmd_cs_svr=[-s 3 -t 2, -c ,num2str(bestnest(1)), -g ,num2str(bestnest(2))]; model_cs_svr=svmtrain(output_train,input_train,cmd_cs_svr); % SVM模型训练 %% SVM网络回归预测 [output_test_pre,acc]=svmpredict(output_test,input_test,model_cs_svr); % SVM模型预测及其精度 test_pre=mapminmax(reverse,output_test_pre,rule2); test_pre = test_pre; err_pre=wndspd(104:end)-test_pre; figure(Name,测试数据残差图) set(gcf,unit,centimeters,position,[0.5,5,30,5]) plot(err_pre,*-); figure(Name,原始-预测图) plot(test_pre,*r-);hold on;plot(wndspd(104:end),bo-); legend(预测,原始) set(gcf,unit,centimeters,position,[0.5,13,30,5]) result=[wndspd(104:end),test_pre]; MAE=mymae(wndspd(104:end),test_pre) MSE=mymse(wndspd(104:end),test_pre) MAPE=mymape(wndspd(104:end),test_pre) %% 显示程序运行时间 toc
下一篇:
二类线性分类模型-感知机