首页 > 编程语言 >基于GOA蚱蜢优化算法的KNN分类器最优特征选择matlab仿真

基于GOA蚱蜢优化算法的KNN分类器最优特征选择matlab仿真

时间:2023-04-18 16:13:40浏览次数:36  
标签:KNN 特征选择 蝗虫 分类器 算法 适应度 zeros 最优

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

 

2.算法涉及理论知识概要

       蝗 虫 优 化 算 法 ( Grasshopper Optimization Algorithm, GOA) 是一种新型的元启发式算法,由 Mirjalili 等人于2017年提出。该算法受幼虫和成年蝗虫大范围移动与寻找食物源的聚集行为启发,具有操作参数少,公式简单的特点。针对基准测试函数优化问题的实验结果表明,GOA的收敛性优于粒子群算法。

 

2.1 GOA蚱蜢优化

蝗虫优化算法的基本实现步骤

1.初始化最大迭代次数N,种群大小n,变量范围,控制参数的最大值最小值等参数。

2.初始化种群位置,计算初始的个体适应度,并得到最优蝗虫位置与适应度。

3.开始循环(K=1):使用公式(2)、(3)更新参数。使用公式(1)更新蝗虫个体的位置,并检查是否越界。

4.计算每个蝗虫的适应度,更新到目前为止找到的最优食物源(即最优个体位置与适应度)。

5.重复执行步骤3和4,直到满足最大迭代次数,结束循环(K=N)。

6.返回最优的参数取值和最优的适应度值。

1 蝗虫群的位置移动

 

 

 

        式中,d dd是表示变量维度,i , j i, ji,j表示蝗虫个体编号,u b d 、 l b d ub_d、lb_dubd、lbd分别表示变量的上限与下限,T d T_dT d表示最优的蝗虫个体位置,d i j d_{ij}dij是两个蝗虫个体之间的欧式距离,c是控制参数,用于平衡算法的全局探索和局部开发。函数s ( ) s( )s()表示两个蝗虫个体之间的交互力影响。

控制参数 c cc 一般设计为线性递减,使得算法具有动态与不确定搜索能力:

 

 

 

        式中,c m a x 、 c m i n c_{max}、c_{min}c max 、cmin分别表示递减区间的最大值与最小值,t tt表示当前的迭代次数,T m a x T_{max}T max表示最大迭代次数。

2 蝗虫个体之间的相互影响

 

 

 

2.2 KNN分类器

        何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:分析一个人时,我们不妨观察和他最亲密的几个人。同理的,在判定一个未知事物时,可以观察离它最近的几个样本,这就是KNN(k最近邻)的方法。简单来说,KNN可以看成:有那么一堆你已经知道分类的数据,然后当一个新数据进入的时候,就开始跟训练数据里的每个点求距离,然后挑出离这个数据最近的K个点,看看这K个点属于什么类型,然后用少数服从多数的原则,给新数据归类。

 

        k值通常是采用交叉检验来确定(以k=1为基准),交叉验证(将样本数据按照一定比例,拆分出训练用的数据和验证用的数据,比如6:4拆分出部分训练数据和验证数据),从选取一个较小的K值开始,不断增加K的值,然后计算验证集合的方差,最终找到一个比较合适的K值。

 

        增大k的时候,一般错误率会先降低,因为有周围更多的样本可以借鉴了,分类效果会变好。但注意,当K值更大的时候,错误率会更高。这也很好理解,比如说你一共就35个样本,当你K增大到30的时候,KNN基本上就没意义了。

 

       所以选择K点的时候可以选择一个较大的临界K点,当它继续增大或减小的时候,错误率都会上升。

 

3.MATLAB核心程序

 

GrassHopperPositions=round(initialization(N,dim,ub,lb));
GrassHopperFitness = zeros(1,N);
 
fitness_history=zeros(N,Max_iter);
position_history=zeros(N,Max_iter,dim);
Convergence_curve=zeros(1,Max_iter);
Trajectories=zeros(N,Max_iter);
 
 
cMax=2.079;
cMin=0.00004;
........................................................................
 
[sorted_fitness,sorted_indexes]=sort(GrassHopperFitness);
 
for newindex=1:N
    Sorted_grasshopper(newindex,:)=GrassHopperPositions(sorted_indexes(newindex),:);
end
 
TargetPosition=Sorted_grasshopper(1,:);
TargetFitness=sorted_fitness(1);
 
 
l=2; 
while l<Max_iter+1
    
    c=cMax-l*((cMax-cMin)/Max_iter); 
    
    for i=1:size(GrassHopperPositions,1)
        temp= GrassHopperPositions';
        for k=1:2:dim
            S_i=zeros(2,1);
            for j=1:N
                if i~=j
                    Dist=distance(temp(k:k+1,j), temp(k:k+1,i)); 
                    
                    r_ij_vec=(temp(k:k+1,j)-temp(k:k+1,i))/(Dist+eps);
                    xj_xi=2+rem(Dist,2);
                    
                    s_ij=((ub(k:k+1) - lb(k:k+1))*c/2)*S_func(xj_xi).*r_ij_vec; 
                    S_i=S_i+s_ij;
                end
            end
            S_i_total(k:k+1, :) = S_i;
            
        end
...........................................................................
        fitness_history(i,l)=GrassHopperFitness(1,i);
        position_history(i,l,:)=GrassHopperPositions(i,:);
        
        Trajectories(:,l)=GrassHopperPositions(:,1);
        if GrassHopperFitness(1,i)<TargetFitness
            TargetPosition=GrassHopperPositions(i,:);
            TargetFitness=GrassHopperFitness(1,i);
        end
    end
        
    Convergence_curve(l)=TargetFitness;
    disp(['In GOA iteration #', num2str(l), ' , target''s objective = ', num2str(TargetFitness)])
    
    l = l + 1;
end
if (flag==1)
    TargetPosition = TargetPosition(1:dim-1);
end

 

  

 

标签:KNN,特征选择,蝗虫,分类器,算法,适应度,zeros,最优
From: https://www.cnblogs.com/51matlab/p/17330014.html

相关文章

  • Pytorch实现分类器
    本文实现两个分类器:softmax分类器和感知机分类器Softmax分类器Softmax分类是一种常用的多类别分类算法,它可以将输入数据映射到一个概率分布上。Softmax分类首先将输入数据通过线性变换得到一个向量,然后将向量中的每个元素进行指数函数运算,最后将指数运算结果归一化得到一个概......
  • 【故障诊断】基于KNN、SVM、RF、DT、ET多种算法实现制冷系统故障诊断附Matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 《Ubuntu安装rknn toolkit》
    1.Ubuntu安装rknntoolkitUbuntu版本是18.04,最好是这个版本,其他版本安静环境的时候会出现版本不匹配问题下载安装anacondawgethttps://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2022.05-Linux-x86_64.shbashAnaconda3-2022.05-Linux-x86_64.sh安装过程中......
  • sklearn.linear_model.LogisticRegression-逻辑回归分类器
    语法格式class sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto'......
  • Java语言在Spark3.2.4集群中使用Spark MLlib库完成朴素贝叶斯分类器
    一、贝叶斯定理贝叶斯定理是关于随机事件A和B的条件概率,生活中,我们可能很容易知道P(A|B),但是我需要求解P(B|A),学习了贝叶斯定理,就可以解决这类问题,计算公式如下:  P(A)是A的先验概率P(B)是B的先验概率P(A|B)是A的后验概率(已经知道B发生过了)P(B|A)是B的后验概率(已经知道A发生过了)二......
  • [博客入坑]CS231N assignment 1 _ KNN 知识 & 详细解析
    从零开始的全新博客我之前一直在语雀上更新文章,但是一会不更发现居然需要VIP才能发博客了:不过考虑到自己确实有一会没写博客了,之前对神经网络在课上学过,也鼓捣过pytorch,但是深感自己没有系统学习过.第一次接触这种公开课,希望也能有种从零开始的感觉,让自己面对这......
  • python机器学习案例系列教程——K最近邻算法(KNN)、kd树
    全栈工程师开发手册(作者:栾鹏)python数据挖掘系列教程K最近邻简介K最近邻属于一种估值或分类算法,他的解释很容易。我们假设一个人的优秀成为设定为1、2、3、4、5、6、7、8、9、10数值表示,其中10表示最优秀,1表示最不优秀。我们都知道近朱者赤,近墨者黑,我们想看一个人是什么样的,看......
  • python机器学习案例系列教程——文档分类器,朴素贝叶斯分类器,费舍尔分类器
    全栈工程师开发手册(作者:栾鹏)python数据挖掘系列教程github地址:https://github.com/626626cdllp/data-mining/tree/master/Bayes贝叶斯分类过程概述:首先有一批已知分类的数据集。对每个输入对象提取特征,根据输入对象的特征属性和输入对象的所属分类,计算分类与特征属性之间的概率......
  • 机器学习建模中--先“特征选择”还是先“划分数据集”?
    应该先进行“特征选择”,再“划分数据集”。这样可以避免数据泄露。测试集就应该当做“看不见的数据”,只能在最后用一次,按照这个原则处理。代码实例:#-*-coding:utf-8......
  • 机器学习算法(三):基于horse-colic数据的KNN近邻(k-nearest neighbors)预测分类
    机器学习算法(三):基于horse-colic数据的KNN近邻(k-nearestneighbors)预测分类项目链接参考:https://www.heywhale.com/home/column/64141d6b1c8c8b518ba97dcc1KNN的介绍和......