算法一篇入门

【算法】一篇入门之-Kohonen规则聚类

作者 : 老饼 发表日期 : 2022-06-26 23:31:57 更新日期 : 2024-10-05 21:18:23
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



Kohonen规则是由Kohonen提出的一种对样本进行聚类的规则,它是SOM神经网络的基础

本文讲解Kohonen规则的思想、更新公式以及算法流程,并展示一个Kohonen聚类的例子

通过本文可以快速了解Kohonen规则是什么,以及如何使用Kohonen规则对样本进行聚类




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



本节讲解Kohonen规则聚类的算法思想以及算法流程




   什么是Kohonen规则聚类  


kohonen规则是一种用于聚类的算法,简单且有效
SOM神经网络就是基于kohonen规则的基础上的一种聚类算法
 kohonen规则聚类算法如下:
  kohonen规则聚类算法流程
1. 先随机初始化k个聚类中心                                            
2. 选出一个样本,将离它最近的聚类中心向它移动            
 这样可以使该聚类中心更离本次的样本点更近        
重复步骤2,m次后终止算法,完成聚类                  
 其中,每次对聚类中心的更新法则如下:
 
   其中  
 :离样本最近的聚类中心点
  : 学习率                             







     02. kohonen规则聚类-代码实现    




本节展示一个kohonen规则聚类的具体代码实例




    kohonen规则进行聚类-代码实现   


kohonen规则虽然简单,但却是行之有效的,下面展示一个kohonen的代码实例
我们先生成四簇数据,然后随机初始化5个聚类中心点,再使用Kohonen规则训练聚类中心
具体实现代码如下:
% 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');
运行结果如下:
 kohonen规则聚类结果展示 
可以看到,经过一定的更新步数后,聚类中心移到了四类数据的中心位置附近









  End  





联系老饼