本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
Kohonen规则是一种简单的聚类规则,由Kohonen提出,
它是SOM神经网络的基础,本文讲解Kohonen规则应用于聚类,是后面学习SOM的基础
本节说明什么是聚类问题及用Kohonen规则进行聚类的方法
聚类问题
对于什么是聚类问题,
这里我们用口语描述如下:
假设数据是一团团的,
我们希望找出这些一团团数据的中心点(聚类中心),
样本离哪个聚类中心最近,就将样本判为该聚类中心
什么是Kohonen规则聚类
kohonen规则聚类很简单,
先随机初始化k个聚类中心点,
然后每次选出一个样本,将离它最近的聚类点往它移动,
使该聚类点更靠近它,如此反复m次
更新法则如下:
其中
:离样本最近的聚类中心点
: 学习率
本节通过一个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