老饼讲解:一步一步上手学习
Kohonen聚类是一种简单有效的聚类规则,是Kohonen于1981年提出的一种无监督聚类算法,SOM神经网络就是基于Kohonen规则而提出来的,那么今天我们就来说说Kohonen规则是什么,然后再来实现一个Kohonen聚类,看看它的聚类效果、以及具体的代码实现方法。
kohonen规则是一种用于聚类的算法,简单且有效,kohonen规则聚类算法如下:

1. 先随机初始化k个聚类中心 。
2. 选出一个样本,将离它最近的聚类中心向它移动。
也就是:
其中,
:离样本最近的聚类中心点
: 学习率
3. 重复步骤2,直到m次后终止算法,完成聚类。
总的来说,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聚类简单来说,就是让每次都选一个样本,然后让靠它最近的聚类中心向它靠近,规则非常的简单,而且计算量也相对较少,可以说是一个简单有效的聚类方法。
评论