一、广义回归神经网络(GRNN)

广义回归神经网络是径向基神经网络的一种,GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好,还可以处理不稳定数据。虽然GRNN看起来没有径向基精准,但实际在分类和拟合上,特别是数据精准度比较差的时候有着很大的优势。

1 GRNN网络结构
GRNN是RBF的一种改进,结构相似。区别就在于多了一层求和层,而去掉了隐含层与输出层的权值连接(对高斯权值的最小二乘叠加)。
【优化分类】基于matlab GA优化GRNN超参数分类【含Matlab源码 1399期】_数据
【优化分类】基于matlab GA优化GRNN超参数分类【含Matlab源码 1399期】_参考文献_02
文字解析:
1.输入层为向量,维度为m,样本个数为n,线性函数为传输函数。
2.隐藏层与输入层全连接,层内无连接,隐藏层神经元个数与样本个数相等,也就是n,传输函数为径向基函数。
3.加和层中有两个节点,第一个节点为每个隐含层节点的输出和,第二个节点为预期的结果与每个隐含层节点的加权和。
4.输出层输出是第二个节点除以第一个节点。

二、部分源代码

%% grnn
%% 1.初始化环境
clc;clear;close all;format compact;
%% 2.加载数据
data=xlsread('三维数据.xlsx');
input=data(:,1:3); 
output=data(:,4);
%% 划分数据集
n=randperm(size(input,1));m=floor(0.7*size(input,1));

p_train=input(n(1:m),:)';%取转置 编成一列一个样本

spread=0.1;
net=newgrnn(p_train,t_train,spread);
pred_train=sim(net,p_train);
pre
grid on
hold on 
plot(J1,'r*');
legend('测试输出','真实标签')
title('测试集')
xlabel('样本数')
ylabel('分类标签')
hold off

function ret=select(individuals,sizepop)
% 该函数用于进行选择操作
% individuals input    种群信息
% sizepop     input    种群规模
% ret         output   选择后的新种群
%求适应度值倒数
[a bestch]=min(individuals.fitness);
fitness1=10./individuals.fitness; %individuals.fitness为个体适应度值
%个体选择概率
sumfitness=sum(fitness1);
sumf=fitness1./sumfitness;
%采用轮盘赌法选择新个体
index=[];
for i=1:sizepop   %sizepop为种群数
    pick=rand;
    while pick==0
        pick=rand;
    end
    for i=1:sizepop
        pick=pick-sumf(i);
        if pick<0
            index=[index i];
            break;
        end
    end
end
%新种群
individuals.chrom=individuals.chrom(index,:);
individuals.fitness=individuals.fitness(index);
ret=individuals;



function ret=Code(lenchrom,bound)
%本函数用于随机初始化一条染色体
% lenchrom   input : 染色体长度
% bound      input : 变量的取值范围
% ret        output: 染色体的编码值
flag=0;
while flag==0
    pick=rand(1,length(lenchrom));
    ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick;
    flag=test(lenchrom);     %检验染色体的可行性
end
function ret=Mutation(pmutation,lenchrom,chrom,sizepop,num,maxgen,bound)
% 本函数完成变异操作
% pcorss                input  : 变异概率
% lenchrom              input  : 染色体长度
% chrom     input  : 染色体群
% sizepop               input  : 种群规模
% opts                  input  : 变异方法的选择
% pop                   input  : 当前种群的进化代数和最大的进化代数信息
% bound                 input  : 每个个体的上届和下届
% maxgen                input  :最大迭代次数
% num                   input  : 当前迭代次数
% ret                   output : 变异后的染色体
for i=1:sizepop   %每一轮for循环中,可能会进行一次变异操作,染色体是随机选择的,变异位置也是随机选择的,
    %但该轮for循环中是否进行变异操作则由变异概率决定(continue控制)
    % 随机选择一个染色体进行变异
    pick=rand;
    while pick==0
        pick=rand;
    end
    index=ceil(pick*sizepop);
    % 变异概率决定该轮循环是否进行变异
    pick=rand;
    if pick>pmutation
        continue;
    end
    flag=0;
    while flag==0
        % 变异位置
        pick=rand;
        while pick==0
            pick=rand;
        end
        pos=ceil(pick*sum(lenchrom));  %随机选择了染色体变异的位置,即选择了第pos个变量进行变异
        pick=rand; %变异开始
        fg=(rand*(1-num/maxgen))^2;
    
        flag=test(lenchrom);
    end
end
ret=chrom;


三、运行结果

【优化分类】基于matlab GA优化GRNN超参数分类【含Matlab源码 1399期】_迭代_03

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
[4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
[5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.