基于 K 均值聚类的径向基RBF神经网络优化(Matlab代码实现)

 💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

1.1 RBF神经网络模型

1.2 K-均值聚类算法

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

1.1 RBF神经网络模型

RBF神经网络是一种常见的三层结构神经网络,主要包括输入层、隐含层及输出层,如图1所示。RBF神经网络的作用原理,是将径向基函数(RBF)作为网络第二层隐含层的节点函数,以此构成隐含层空间。当数据被输入网络后,输入层会把数据传递给隐含层。经过隐含层节点函数计算之后,再将数据传递给输出层。通常而言,隐含层节点的计算函数是非线性的。当隐含层的节点数增加时,处理数据的次数也随之增加,使RBF网络得到的结果也就更加精确。但是,过多的节点数会减低网络的执行效率。第三层输出层的节点函数通常是线性的,其作用通常是对隐含层函数计算所得结果进行加权处理,将数据处理成方便输出,容易读懂的形式。

在 RBF神经网络中,设输入层节点个数为Ⅰ,隐含层节点数为M,输出层节点数为N,输入量为x.当x经输入到模型后,会经过Ⅰ次传递。因此定义x为Ⅰ维输入量。设输出量为y,同理y会经过N次输出,称y为N维输出量。一般来说,采用高斯激活函数作为隐含层节点的作用函数,该函数在RBF网络隐含层第i个节点输出为:

1.2 K-均值聚类算法

K均值聚类算法是目前应用最为广泛的划分聚类算法。其算法具有原理简单、模型清晰、操作方便、计算快速等特点,可以大规模同时对多种类型的数据进行聚类,快速挖掘出数据中隐含的关系和结构。

K均值聚类算法是判断基于数据到中心点的距离来区分数据的所属类别。其把N个对象划分)成k个簇,用簇中对象的均值表示每个簇的中心点(质心),利用合适的距离计算公式,计算出数据与聚类中心的距离,将其划分到合适的聚类中。当所有数据聚类结束后,检查聚类中心是否已收敛,如果收敛则终止,否则将继续迭代。

📚2 运行结果

部分代码:

function [C]=K_Means(X,M,D)
%% Function for Finding K-Means in the X data
% X is the Data Matrix
% M is the Number of Means Required (K)

temp=randperm(size(X,1));   % Random Permutation of Random index to pick data point
C=X(temp(1:M),:);           % Initial Guess for Centers is the random data point
J=[];                       % Cost Function to be minimized
k=1;                        % Iteration number
while(1)
    J(k)=0; 
    S=zeros(M,size(X,2));   % Sum of values fall in K Centers
    indeX=[];               % Index of the closest Center to the test data point
    for i=1:size(X,1)
        temp=0;             % temporary Variable for storing distance to centers
        for j =1:M
        temp(j)=(norm((X(i,:)-C(j,:))).^2);
        end
        [tmp,ind]=min(temp);  % Finding the closest Center for ith data point
        indeX=[indeX ind];  % Index of the closest Center to the test data point
        S(ind,:)=S(ind,:)+X(i,:);   % Sum of values fall in K Centers
        J(k)=J(k)+sum(temp); % Cost Function
    end
    for j=1:M
            N(j)=length(find(indeX==j)); % Number of Values closest to jth Center
    end
    
    Ctemp=[];   % Temporary Values for Center that will be updated only if different
    for l=1:size(X,2)
    Ctemp=[Ctemp S(:,l)./N'];
    end
    %% Check for update and stoping condition
    % Temporary Values for Center that will be updated only if different
    if(sum(sum(~(C==Ctemp)))~=0)
        C=Ctemp;
    else
        break
    end 
    %% Optional Animated Graph for Data only work if number of argument to function > 2
    % START
    if (nargin>2)
    scatter(X(:,1),X(:,2))
    hold on
    scatter(C(:,1),C(:,2),'filled')
    hold off
    pause(0.25)
    end
    % END
k=k+1;
end
%% Optional Graph for Cost only work if number of argument to function > 2
% START
if (nargin>2)
figure,plot(J)
xlabel('Iterations');
ylabel('Cost');
title('Cost Function');
end
% END

🎉3 参考文献

[1]张天逸,孙毅然,刘凡琪,梁悦祺,林永杰,马明辉.基于K均值聚类算法与RBF神经网络的交通流预测方法[J].智能计算机与应用,2020,10(08):148-151.

🌈4 Matlab代码实现

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现步骤如下: 1. 首先,将数据集进行聚类,得到聚类中心; 2. 然后,使用聚类中心计算每个数据点的径向函数(RBF)输出; 3. 接着,使用RBF输出和实际输出之间的误差训练神经网络; 4. 最后,使用测试数据集测试神经网络的性能。 以下是具体的MATLAB代码实现: ```matlab % 加载数据集 load iris_dataset; % 数据预处理 inputs = irisInputs; targets = irisTargets; inputs = inputs'; targets = targets'; % 定义聚类中心数量 k = 3; % 使用k均值聚类算法得到聚类中心 [idx, centers] = kmeans(inputs, k); % 计算径向函数的标准差 sigma = std(pdist(centers)); % 计算每个数据点的RBF输出 rbf_outputs = zeros(size(inputs, 1), k); for i = 1 : k rbf_outputs(:, i) = exp(-sum(bsxfun(@minus, inputs, centers(i,:)).^2, 2) / (2*sigma^2)); end % 训练神经网络 hidden_layer_size = k; net = newff(inputs', targets', hidden_layer_size, {'tansig' 'purelin'}, 'trainlm'); net.trainParam.showWindow = false; % 不显示训练窗口 net.trainParam.epochs = 1000; % 设置最大迭代次数 net.trainParam.goal = 1e-5; % 设置训练误差目标 net = train(net, rbf_outputs, targets'); % 测试神经网络 test_inputs = inputs; test_targets = targets; test_outputs = sim(net, rbf_outputs)'; ``` 在以上代码中,我们使用了MATLAB自带的kmeans函数进行聚类,使用了pdist函数计算欧式距离,使用了newff函数创建神经网络,并使用train函数训练神经网络。在训练过程中,我们使用径向函数的输出作为神经网络的输入。最后,我们使用sim函数测试神经网络的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值