目录
老饼讲解:一步一步上手学习

【模型】一篇入门之-Kohonen聚类算法

作者 : 老饼 发表日期 : 2025-12-17 00:08:44 更新日期 : 2026-05-10 20:17:03
老饼讲解-简单易懂,干货满满,爽过嗦螺!


Kohonen聚类是一种简单有效的聚类规则,是Kohonen‌于1981年提出的一种‌无监督聚类算法,SOM神经网络就是基于Kohonen规则而提出来的,那么今天我们就来说说Kohonen规则是什么,然后再来实现一个Kohonen聚类,看看它的聚类效果、以及具体的代码实现方法。

一、Kohonen聚类

kohonen规则是一种用于聚类的算法,简单且有效,kohonen规则聚类算法如下:

kohonen规则

1. 先随机初始化k个聚类中心 。

2. 选出一个样本,将离它最近的聚类中心向它移动。

    也就是:

 

其中,

:离样本最近的聚类中心点

 : 学习率                           

3. 重复步骤2,直到m次后终止算法,完成聚类。

总的来说,kohonen就是每次挑一个样本点,然后让它所属的聚类中心向它靠得更近,这样不断干下去,聚类中心自然也就与样本更加靠近了,kohonen规则虽然简单,但却是行之有效的,下面我们用一个例子看看它的效果。

二、Kohonen聚类-代码实现

好了,下面我们就来实现一个kohonen聚类,我们先生成四簇数据,然后随机初始化5个聚类中心点,再使用kohonen规则来更新聚类中心。具体实现代码如下:

% 本代码展示如何用Kohonen规则来聚类(matlab)
% 本代码来自《老饼讲解-机器学习》 www.bbblearn.com
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                                                 % 先hold on
plot(C0(:,1),C0(:,2),'or','MarkerFaceColor','g');       % 画出训练前的聚类中心

subplot(1,2,2)                                          % 第二个子图
plot(X(:,1),X(:,2),'*');                                % 画出训练样本
hold on                                                 % 先hold on
plot(C(:,1),C(:,2),'or','MarkerFaceColor','g');         % 画出训练后的聚类中心

代码运行结果如下:

kohonen规则聚类结果

可以看到,经过一定的更新步数后,聚类中心移到了四类数据的中心位置附近,看来kohonen规则虽然简单,但的确效果不错。

总结

kohonen聚类简单来说,就是让每次都选一个样本,然后让靠它最近的聚类中心向它靠近,规则非常的简单,而且计算量也相对较少,可以说是一个简单有效的聚类方法。



图标 评论
添加评论