分类预测 | Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测

分类预测 | Matlab实现SSA-XGBOOST麻雀算法优化XGBOOST的多特征分类预测

目录

    • 分类预测 | Matlab实现SSA-XGBOOST麻雀算法优化XGBOOST的多特征分类预测
      • 效果一览
      • 基本介绍
      • 程序设计
      • 参考资料

效果一览

分类预测 | Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测_第1张图片
分类预测 | Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测_第2张图片
分类预测 | Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测_第3张图片
分类预测 | Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测_第4张图片
分类预测 | Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测_第5张图片

基本介绍

Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测,输入多个特征,分四类。

  • 麻雀搜索算法是一种群智能优化算法,主要是受麻雀的觅食行为和反捕食行为的启发而提出的,其仿生原理如下:在麻雀觅食的过程中,分为发现者和加入者,发现者在种群中负责寻找食物并为整个麻雀种群提供觅食区域和方向,而加入者则是利用发现者来获取食物。为了获得食物,麻雀通常可以采用发现者和加入者这两种行为策略进行觅食。
  • XGBoost的核心算法思想基本就是:不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差。当我们训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。最后只需要将每棵树对应的分数加起来就是该样本的预测值。

程序设计

  • 完整程序和数据下载:Matlab实现SSA-XGBoost麻雀算法优化XGBoost的多特征分类预测
%%  判断优化参数个数
if(max(size(ub)) == 1)
   ub = ub .* ones(1, dim);
   lb = lb .* ones(1, dim);  
end

%%  种群初始化
pop_lsat = initialization(pop, dim, ub, lb);
pop_new  = pop_lsat;

%%  计算初始适应度值
fitness = zeros(1, pop);
for i = 1 : pop
   fitness(i) =  fobj(pop_new(i, :));
end

%%  得到全局最优适应度值
[fitness, index]= sort(fitness);
GBestF = fitness(1); 

%%  得到全局最优种群
for i = 1 : pop
    pop_new(i, :) = pop_lsat(index(i), :);
end

GBestX = pop_new(1, :);
X_new  = pop_new;

%%  优化算法
for i = 1: Max_iter

   BestF = fitness(1);
   R2 = rand(1);

   for j = 1 : PDNumber
      if(R2 < ST)
          X_new(j, :) = pop_new(j, :) .* exp(-j / (rand(1) * Max_iter));
      else
          X_new(j, :) = pop_new(j, :) + randn() * ones(1, dim);
      end     
   end
   
   for j = PDNumber + 1 : pop
        if(j > (pop - PDNumber) / 2 + PDNumber)
          X_new(j, :) = randn() .* exp((pop_new(end, :) - pop_new(j, :)) / j^2);
        else
          A = ones(1, dim);
          for a = 1 : dim
              if(rand() > 0.5)
                A(a) = -1;
              end
          end
          AA = A' / (A * A');     
          X_new(j, :) = pop_new(1, :) + abs(pop_new(j, :) - pop_new(1, :)) .* AA';
       end
   end
   
   Temp = randperm(pop);
   SDchooseIndex = Temp(1 : SDNumber); 
   
   for j = 1 : SDNumber
       if(fitness(SDchooseIndex(j)) > BestF)
           X_new(SDchooseIndex(j), :) = pop_new(1, :) + randn() .* abs(pop_new(SDchooseIndex(j), :) - pop_new(1, :));
       elseif(fitness(SDchooseIndex(j)) == BestF)
           K = 2 * rand() -1;
           X_new(SDchooseIndex(j), :) = pop_new(SDchooseIndex(j), :) + K .* (abs(pop_new(SDchooseIndex(j), :) - ...
               pop_new(end, :)) ./ (fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));
       end
   end

%%  边界控制
   for j = 1 : pop
       for a = 1 : dim
           if(X_new(j, a) > ub(a))
              X_new(j, a) = ub(a);
           end
           if(X_new(j, a) < lb(a))
              X_new(j, a) = lb(a);
           end
       end
   end 

%%  获取适应度值
   for j = 1 : pop
    fitness_new(j) = fobj(X_new(j, :));
   end
   
%%  获取最优种群
   for j = 1 : pop
       if(fitness_new(j) < GBestF)
          GBestF = fitness_new(j);
          GBestX = X_new(j, :);
       end
   end
   
%%  更新种群和适应度值
   pop_new = X_new;
   fitness = fitness_new;

%%  更新种群 
   [fitness, index] = sort(fitness);
   for j = 1 : pop
      pop_new(j, :) = pop_new(index(j), :);
   end

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/128163536?spm=1001.2014.3001.5502
[2] https://blog.csdn.net/kjm13182345320/article/details/128151206?spm=1001.2014.3001.5502

你可能感兴趣的:(分类预测,SSA-XGBoost,麻雀算法优化,XGBoost,多特征分类预测,分类预测)