老饼讲解-BP神经网络
竞争神经网络
【原理】什么是Kohonen规则
作者 : 老饼 日期 : 2022-06-09 04:41:52 更新 : 2023-03-16 18:40:19
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



Kohonen规则是一种简单的聚类规则,由Kohonen提出,

它是SOM神经网络的基础,本文讲解Kohonen规则应用于聚类,是后面学习SOM的基础




  01. 基于Kohonen规则的聚类算法  



本节说明什么是聚类问题及用Kohonen规则进行聚类的方法



  聚类问题  


对于什么是聚类问题,
这里我们用口语描述如下:
 
假设数据是一团团的,
我们希望找出这些一团团数据的中心点(聚类中心),
样本离哪个聚类中心最近,就将样本判为该聚类中心




   什么是Kohonen规则聚类  


kohonen规则聚类很简单,
先随机初始化k个聚类中心点,
 
然后每次选出一个样本,将离它最近的聚类点往它移动,
使该聚类点更靠近它,如此反复m次
 更新法则如下:
 
   其中  
 :离样本最近的聚类中心点
  : 学习率                             







     02. kohonen规则的有效性    



本节通过一个DEMO来检验kohonen规则对聚类的有效性



    kohonen规则进行聚类的DEMO    


kohonen规则虽然简单,然而它却是行之有效的
下面我们用一个Demo来检验kohonen规则的有效性

平面中有四簇数据,
我们先随机初始化5个聚类中心点,
然后使用Kohonen规则调整聚类中心点的位置
 训练前后的聚类中心如下
  
可以看到,经过一定步数后
聚类中心点移到了四类数据的中心位置附近





     附件:Kohonen聚类规则Demo代码    


% Kohonen聚类规则
rand('seed',70);
%------------生成样本数据-------------
dataC = [2.5,2.5;7.5,2.5;2.5,7.5;7.5,7.5]; % 生成四个样本中心
sn = 40;  % 样本个数
X = rand(sn,2)+dataC(mod(1:sn,4)+1,:); % 随机生成样本点


% -----------初始化聚类中心点--------------
kn = 5;              % 聚类中心点个数
C  = rand(kn,2)*10;  % 随机生成聚类中心
C0 = C;              % 备份聚类中心点的初始值


% -----------使用样本训练聚类中心点-----------
lr = 0.1;   % 学习率
for t = 1:50
    for i = 1:sn
        cur_x    = X(i,:);                             % 提取一个样本
        dist     = sum((repmat(cur_x,kn,1) - C).^2,2); % 计算样本到各个聚类中心点的距离
        [~,idx]  = min(dist);                          % 找出最近的聚类中心点
        C(idx,:) = C(idx,:)  + lr*(cur_x - C(idx,:));  % 将该聚类中心点往样本靠近
    end
end


% ----------画图------------------------
subplot(1,2,1)
plot(X(:,1),X(:,2),'*');
hold on 
plot(C0(:,1),C0(:,2),'or','MarkerFaceColor','g');


subplot(1,2,2)
plot(X(:,1),X(:,2),'*');
hold on 
plot(C(:,1),C(:,2),'or','MarkerFaceColor','g');








  End  





联系老饼